header: Update to Vulkan version 1.0.37

- header:  Updated vulkan.h
- scripts: Updated generator.py
- scripts: Updated vk.xml
- scripts: Merged recent genvk.py changes into lvl_genvk.py
- layers:  Updated json files
- loader:  Updated SOVERSION to 37
- header:  Rebuilt and updated vulkan.hpp
- layers:  Updated thread_checker for new functions
- scripts: Fix up vk_helper.py overzealous count detection

Change-Id: Ia10f5fc759166a09999f01e68bbcadb30ddf67f7
diff --git a/scripts/generator.py b/scripts/generator.py
index 043121c..3c5cc0a 100755
--- a/scripts/generator.py
+++ b/scripts/generator.py
@@ -318,7 +318,8 @@
         # Open specified output file. Not done in constructor since a
         # Generator can be used without writing to a file.
         if (self.genOpts.filename != None):
-            self.outFile = open(self.genOpts.directory + '/' + self.genOpts.filename, 'w')
+            filename = self.genOpts.directory + '/' + self.genOpts.filename
+            self.outFile = open(filename, 'w', encoding='utf-8')
         else:
             self.outFile = sys.stdout
     def endFile(self):
diff --git a/scripts/lvl_genvk.py b/scripts/lvl_genvk.py
index 63b8bab..07a7bcd 100644
--- a/scripts/lvl_genvk.py
+++ b/scripts/lvl_genvk.py
@@ -1,4 +1,4 @@
-#!/usr/bin/env python
+#!/usr/bin/python3
 #
 # Copyright (c) 2013-2016 The Khronos Group Inc.
 #
@@ -50,7 +50,7 @@
 # extensions - list of extension names to include.
 # protect - True if re-inclusion protection should be added to headers
 # directory - path to directory in which to generate the target(s)
-def makeGenOpts(extensions = [], protect = True, directory = '.'):
+def makeGenOpts(extensions = [], removeExtensions = [], protect = True, directory = '.'):
     global genOpts
     genOpts = {}
 
@@ -60,7 +60,7 @@
     noVersions      = noExtensions = None
 
     addExtensions     = makeREstring(extensions)
-    removeExtensions  = makeREstring([])
+    removeExtensions  = makeREstring(removeExtensions)
 
     # Copyright text prefixing all headers (list of strings).
     prefixStrings = [
@@ -199,6 +199,7 @@
 
     # Create generator options with specified parameters
     makeGenOpts(extensions = args.extension,
+                removeExtensions = args.removeExtension,
                 protect = args.protect,
                 directory = args.directory)
 
@@ -228,6 +229,9 @@
     parser.add_argument('-extension', action='append',
                         default=[],
                         help='Specify an extension or extensions to add to targets')
+    parser.add_argument('-removeExtension', action='append',
+                        default=[],
+                        help='Specify an extension or extensions to remove from targets')
     parser.add_argument('-debug', action='store_true',
                         help='Enable debugging')
     parser.add_argument('-dump', action='store_true',
@@ -276,16 +280,16 @@
 
     if (args.dump):
         write('* Dumping registry to regdump.txt', file=sys.stderr)
-        reg.dumpReg(filehandle = open('regdump.txt','w'))
+        reg.dumpReg(filehandle = open('regdump.txt','w', encoding='utf-8'))
 
     # create error/warning & diagnostic files
     if (args.errfile):
-        errWarn = open(args.errfile, 'w')
+        errWarn = open(args.errfile, 'w', encoding='utf-8')
     else:
         errWarn = sys.stderr
 
     if (args.diagfile):
-        diag = open(args.diagfile, 'w')
+        diag = open(args.diagfile, 'w', encoding='utf-8')
     else:
         diag = None
 
diff --git a/scripts/vk.xml b/scripts/vk.xml
index ed30fcd..869e127 100644
--- a/scripts/vk.xml
+++ b/scripts/vk.xml
@@ -104,7 +104,7 @@
         <type category="define">// Vulkan 1.0 version number
 #define <name>VK_API_VERSION_1_0</name> <type>VK_MAKE_VERSION</type>(1, 0, 0)</type>    <!-- The patch version here should never be set to anything other than 0 -->
         <type category="define">// Version of this file
-#define <name>VK_HEADER_VERSION</name> 34</type>
+#define <name>VK_HEADER_VERSION</name> 37</type>
 
         <type category="define">
 #define <name>VK_DEFINE_HANDLE</name>(object) typedef struct object##_T* object;</type>
@@ -195,6 +195,10 @@
         <type requires="VkDescriptorPoolCreateFlagBits"   category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorPoolCreateFlags</name>;</type>        <!-- Descriptor pool creation flags -->
         <type                                             category="bitmask">typedef <type>VkFlags</type> <name>VkDescriptorPoolResetFlags</name>;</type>         <!-- Descriptor pool reset flags -->
         <type requires="VkDependencyFlagBits"             category="bitmask">typedef <type>VkFlags</type> <name>VkDependencyFlags</name>;</type>                  <!-- Pipeline barrier and subpass dependency flags -->
+
+        <type requires="VkIndirectCommandsLayoutUsageFlagBitsNVX"  category="bitmask">typedef <type>VkFlags</type> <name>VkIndirectCommandsLayoutUsageFlagsNVX</name>;</type>  <!-- Device generated commands usage flags -->
+        <type requires="VkObjectEntryUsageFlagBitsNVX"             category="bitmask">typedef <type>VkFlags</type> <name>VkObjectEntryUsageFlagsNVX</name>;</type>             <!-- Object usage flags -->
+
             <!-- WSI extensions -->
         <type requires="VkCompositeAlphaFlagBitsKHR"      category="bitmask">typedef <type>VkFlags</type> <name>VkCompositeAlphaFlagsKHR</name>;</type>
         <type requires="VkDisplayPlaneAlphaFlagBitsKHR"   category="bitmask">typedef <type>VkFlags</type> <name>VkDisplayPlaneAlphaFlagsKHR</name>;</type>
@@ -239,6 +243,8 @@
         <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkFramebuffer</name>)</type>
         <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkRenderPass</name>)</type>
         <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkPipelineCache</name>)</type>
+        <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkObjectTableNVX</name>)</type>
+        <type category="handle" parent="VkDevice"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkIndirectCommandsLayoutNVX</name>)</type>
 
         <!-- WSI extensions -->
         <type category="handle"><type>VK_DEFINE_NON_DISPATCHABLE_HANDLE</type>(<name>VkDisplayKHR</name>)</type>
@@ -334,6 +340,10 @@
         <type name="VkAttachmentDescriptionFlagBits" category="enum"/>
         <type name="VkDescriptorPoolCreateFlagBits" category="enum"/>
         <type name="VkDependencyFlagBits" category="enum"/>
+        <type name="VkIndirectCommandsLayoutUsageFlagBitsNVX" category="enum"/>
+        <type name="VkIndirectCommandsTokenTypeNVX" category="enum"/>
+        <type name="VkObjectEntryUsageFlagBitsNVX" category="enum"/>
+        <type name="VkObjectEntryTypeNVX" category="enum"/>
         <!-- WSI extensions -->
         <type name="VkColorSpaceKHR" category="enum"/>
         <type name="VkCompositeAlphaFlagBitsKHR" category="enum"/>
@@ -1444,21 +1454,21 @@
             <member values="VK_STRUCTURE_TYPE_ANDROID_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>                    <!-- Pointer to next structure -->
             <member optional="true"><type>VkAndroidSurfaceCreateFlagsKHR</type>   <name>flags</name></member>    <!-- Reserved -->
-            <member><type>ANativeWindow</type>*                   <name>window</name></member>
+            <member noautovalidity="true"><type>ANativeWindow</type>*                   <name>window</name></member>
         </type>
         <type category="struct" name="VkMirSurfaceCreateInfoKHR">
             <member values="VK_STRUCTURE_TYPE_MIR_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>                    <!-- Pointer to next structure -->
             <member optional="true"><type>VkMirSurfaceCreateFlagsKHR</type>   <name>flags</name></member>        <!-- Reserved -->
-            <member><type>MirConnection</type>*                   <name>connection</name></member>
-            <member><type>MirSurface</type>*                      <name>mirSurface</name></member>
+            <member noautovalidity="true"><type>MirConnection</type>*                   <name>connection</name></member>
+            <member noautovalidity="true"><type>MirSurface</type>*                      <name>mirSurface</name></member>
         </type>
         <type category="struct" name="VkWaylandSurfaceCreateInfoKHR">
             <member values="VK_STRUCTURE_TYPE_WAYLAND_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>                    <!-- Pointer to next structure -->
             <member optional="true"><type>VkWaylandSurfaceCreateFlagsKHR</type>   <name>flags</name></member>    <!-- Reserved -->
-            <member>struct <type>wl_display</type>*               <name>display</name></member>
-            <member>struct <type>wl_surface</type>*               <name>surface</name></member>
+            <member noautovalidity="true">struct <type>wl_display</type>*               <name>display</name></member>
+            <member noautovalidity="true">struct <type>wl_surface</type>*               <name>surface</name></member>
         </type>
         <type category="struct" name="VkWin32SurfaceCreateInfoKHR">
             <member values="VK_STRUCTURE_TYPE_WIN32_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
@@ -1471,14 +1481,14 @@
             <member values="VK_STRUCTURE_TYPE_XLIB_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>                    <!-- Pointer to next structure -->
             <member optional="true"><type>VkXlibSurfaceCreateFlagsKHR</type>   <name>flags</name></member>       <!-- Reserved -->
-            <member><type>Display</type>*                         <name>dpy</name></member>
+            <member noautovalidity="true"><type>Display</type>*                         <name>dpy</name></member>
             <member><type>Window</type>                           <name>window</name></member>
         </type>
         <type category="struct" name="VkXcbSurfaceCreateInfoKHR">
             <member values="VK_STRUCTURE_TYPE_XCB_SURFACE_CREATE_INFO_KHR"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>                    <!-- Pointer to next structure -->
             <member optional="true"><type>VkXcbSurfaceCreateFlagsKHR</type>   <name>flags</name></member>        <!-- Reserved -->
-            <member><type>xcb_connection_t</type>*                <name>connection</name></member>
+            <member noautovalidity="true"><type>xcb_connection_t</type>*                <name>connection</name></member>
             <member><type>xcb_window_t</type>                     <name>window</name></member>
         </type>
         <type category="struct" name="VkSurfaceFormatKHR" returnedonly="true">
@@ -1571,33 +1581,33 @@
             <member optional="true"><type>VkImage</type>          <name>image</name></member>                    <!-- Image that this allocation will be bound to -->
             <member optional="true"><type>VkBuffer</type>         <name>buffer</name></member>                   <!-- Buffer that this allocation will be bound to -->
         </type>
-        <type category="struct" name="VkExternalImageFormatPropertiesNV">
+        <type category="struct" name="VkExternalImageFormatPropertiesNV" returnedonly="true">
             <member><type>VkImageFormatProperties</type>          <name>imageFormatProperties</name></member>
-            <member><type>VkExternalMemoryFeatureFlagsNV</type>   <name>externalMemoryFeatures</name></member>
-            <member><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>exportFromImportedHandleTypes</name></member>
-            <member><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>compatibleHandleTypes</name></member>
+            <member optional="true"><type>VkExternalMemoryFeatureFlagsNV</type>   <name>externalMemoryFeatures</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>exportFromImportedHandleTypes</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>compatibleHandleTypes</name></member>
         </type>
         <type category="struct" name="VkExternalMemoryImageCreateInfoNV">
             <member values="VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
-            <member><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleTypes</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleTypes</name></member>
         </type>
         <type category="struct" name="VkExportMemoryAllocateInfoNV">
             <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
-            <member><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleTypes</name></member>
+            <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleTypes</name></member>
         </type>
         <type category="struct" name="VkImportMemoryWin32HandleInfoNV">
             <member values="VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
             <member optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleType</name></member>
-            <member><type>HANDLE</type>                           <name>handle</name></member>
+            <member optional="true"><type>HANDLE</type>                           <name>handle</name></member>
         </type>
         <type category="struct" name="VkExportMemoryWin32HandleInfoNV">
             <member values="VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
             <member>const <type>void</type>*                      <name>pNext</name></member>
-            <member>const <type>SECURITY_ATTRIBUTES</type>*       <name>pAttributes</name></member>
-            <member><type>DWORD</type>                            <name>dwAccess</name></member>
+            <member optional="true">const <type>SECURITY_ATTRIBUTES</type>*       <name>pAttributes</name></member>
+            <member optional="true"><type>DWORD</type>                            <name>dwAccess</name></member>
         </type>
         <type category="struct" name="VkWin32KeyedMutexAcquireReleaseInfoNV">
             <member values="VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV"><type>VkStructureType</type> <name>sType</name></member>
@@ -1610,6 +1620,106 @@
             <member len="releaseCount">const <type>VkDeviceMemory</type>*            <name>pReleaseSyncs</name></member>
             <member len="releaseCount">const <type>uint64_t</type>*                  <name>pReleaseKeys</name></member>
         </type>
+
+        <type category="struct" name="VkDeviceGeneratedCommandsFeaturesNVX">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkBool32</type>                         <name>computeBindingPointSupport</name></member>
+        </type>
+        <type category="struct" name="VkDeviceGeneratedCommandsLimitsNVX">
+            <member values="VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                         <name>maxIndirectCommandsLayoutTokenCount</name></member>
+            <member><type>uint32_t</type>                         <name>maxObjectEntryCounts</name></member>
+            <member><type>uint32_t</type>                         <name>minSequenceCountBufferOffsetAlignment</name></member>
+            <member><type>uint32_t</type>                         <name>minSequenceIndexBufferOffsetAlignment</name></member>
+            <member><type>uint32_t</type>                         <name>minCommandsTokenBufferOffsetAlignment</name></member>
+        </type>
+        <type category="struct" name="VkIndirectCommandsTokenNVX">
+            <member><type>VkIndirectCommandsTokenTypeNVX</type>      <name>tokenType</name></member>
+            <member><type>VkBuffer</type>                         <name>buffer</name></member>  <!-- buffer containing tableEntries and additional data for indirectCommands -->
+            <member><type>VkDeviceSize</type>                     <name>offset</name></member>  <!-- offset from the base address of the buffer -->
+        </type>
+        <type category="struct" name="VkIndirectCommandsLayoutTokenNVX">
+            <member><type>VkIndirectCommandsTokenTypeNVX</type>      <name>tokenType</name></member>
+            <member><type>uint32_t</type>                         <name>bindingUnit</name></member>  <!-- Binding unit for vertex attribute / descriptor set, offset for pushconstants -->
+            <member><type>uint32_t</type>                         <name>dynamicCount</name></member> <!-- Number of variable dynamic values for descriptor set / push constants -->
+            <member><type>uint32_t</type>                         <name>divisor</name></member>      <!-- Rate the which the array is advanced per element (must be power of 2, minimum 1) -->
+        </type>
+        <type category="struct" name="VkIndirectCommandsLayoutCreateInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>VkPipelineBindPoint</type>                      <name>pipelineBindPoint</name></member>
+            <member><type>VkIndirectCommandsLayoutUsageFlagsNVX</type>    <name>flags</name></member>
+            <member><type>uint32_t</type>                                 <name>tokenCount</name></member>
+            <member len="tokenCount">const <type>VkIndirectCommandsLayoutTokenNVX</type>*  <name>pTokens</name></member>
+        </type>
+        <type category="struct" name="VkCmdProcessCommandsInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkObjectTableNVX</type>                                         <name>objectTable</name></member>
+            <member><type>VkIndirectCommandsLayoutNVX</type>                              <name>indirectCommandsLayout</name></member>
+            <member><type>uint32_t</type>                                                 <name>indirectCommandsTokenCount</name></member>
+            <member len="indirectCommandsTokenCount">const <type>VkIndirectCommandsTokenNVX</type>*       <name>pIndirectCommandsTokens</name></member>
+            <member><type>uint32_t</type>                                                 <name>maxSequencesCount</name></member>
+            <member optional="true" externsync="true"><type>VkCommandBuffer</type>                          <name>targetCommandBuffer</name></member>
+            <member optional="true"><type>VkBuffer</type>                                 <name>sequencesCountBuffer</name></member>
+            <member optional="true"><type>VkDeviceSize</type>                             <name>sequencesCountOffset</name></member>
+            <member optional="true"><type>VkBuffer</type>                                 <name>sequencesIndexBuffer</name></member>
+            <member optional="true"><type>VkDeviceSize</type>                             <name>sequencesIndexOffset</name></member>
+        </type>
+        <type category="struct" name="VkCmdReserveSpaceForCommandsInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member externsync="true"><type>VkObjectTableNVX</type>                                         <name>objectTable</name></member>
+            <member><type>VkIndirectCommandsLayoutNVX</type>                              <name>indirectCommandsLayout</name></member>
+            <member><type>uint32_t</type>                                                 <name>maxSequencesCount</name></member>
+        </type>
+        <type category="struct" name="VkObjectTableCreateInfoNVX">
+            <member values="VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX"><type>VkStructureType</type> <name>sType</name></member>
+            <member>const <type>void</type>*                      <name>pNext</name></member>
+            <member><type>uint32_t</type>                                          <name>objectCount</name></member>
+            <member len="objectCount">const <type>VkObjectEntryTypeNVX</type>*       <name>pObjectEntryTypes</name></member>
+            <member len="objectCount">const <type>uint32_t</type>*                   <name>pObjectEntryCounts</name></member>
+            <member len="objectCount">const <type>VkObjectEntryUsageFlagsNVX</type>* <name>pObjectEntryUsageFlags</name></member>
+
+            <member><type>uint32_t</type> <name>maxUniformBuffersPerDescriptor</name></member>
+            <member><type>uint32_t</type> <name>maxStorageBuffersPerDescriptor</name></member>
+            <member><type>uint32_t</type> <name>maxStorageImagesPerDescriptor</name></member>
+            <member><type>uint32_t</type> <name>maxSampledImagesPerDescriptor</name></member>
+            <member><type>uint32_t</type> <name>maxPipelineLayouts</name></member>
+        </type>
+        <type category="struct" name="VkObjectTableEntryNVX">
+            <member><type>VkObjectEntryTypeNVX</type>         <name>type</name></member>
+            <member><type>VkObjectEntryUsageFlagsNVX</type>   <name>flags</name></member>
+        </type>
+        <type category="struct" name="VkObjectTablePipelineEntryNVX">
+            <member><type>VkObjectEntryTypeNVX</type>         <name>type</name></member>
+            <member><type>VkObjectEntryUsageFlagsNVX</type>   <name>flags</name></member>
+            <member><type>VkPipeline</type>                   <name>pipeline</name></member>
+        </type>
+        <type category="struct" name="VkObjectTableDescriptorSetEntryNVX">
+            <member><type>VkObjectEntryTypeNVX</type>         <name>type</name></member>
+            <member><type>VkObjectEntryUsageFlagsNVX</type>   <name>flags</name></member>
+            <member><type>VkPipelineLayout</type>             <name>pipelineLayout</name></member>
+            <member><type>VkDescriptorSet</type>              <name>descriptorSet</name></member>
+        </type>
+        <type category="struct" name="VkObjectTableVertexBufferEntryNVX">
+            <member><type>VkObjectEntryTypeNVX</type>         <name>type</name></member>
+            <member><type>VkObjectEntryUsageFlagsNVX</type>   <name>flags</name></member>
+            <member><type>VkBuffer</type>                     <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkObjectTableIndexBufferEntryNVX">
+            <member><type>VkObjectEntryTypeNVX</type>         <name>type</name></member>
+            <member><type>VkObjectEntryUsageFlagsNVX</type>   <name>flags</name></member>
+            <member><type>VkBuffer</type>                     <name>buffer</name></member>
+        </type>
+        <type category="struct" name="VkObjectTablePushConstantEntryNVX">
+            <member><type>VkObjectEntryTypeNVX</type>         <name>type</name></member>
+            <member><type>VkObjectEntryUsageFlagsNVX</type>   <name>flags</name></member>
+            <member><type>VkPipelineLayout</type>             <name>pipelineLayout</name></member>
+            <member><type>VkShaderStageFlags</type>           <name>stageFlags</name></member>
+        </type>
     </types>
 
     <!-- SECTION: Vulkan enumerant (token) definitions. -->
@@ -2410,6 +2520,10 @@
         <enum value="26" name="VK_DEBUG_REPORT_OBJECT_TYPE_SURFACE_KHR_EXT"/>
         <enum value="27" name="VK_DEBUG_REPORT_OBJECT_TYPE_SWAPCHAIN_KHR_EXT"/>
         <enum value="28" name="VK_DEBUG_REPORT_OBJECT_TYPE_DEBUG_REPORT_EXT"/>
+        <enum value="29" name="VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_KHR_EXT"/>
+        <enum value="30" name="VK_DEBUG_REPORT_OBJECT_TYPE_DISPLAY_MODE_KHR_EXT"/>
+        <enum value="31" name="VK_DEBUG_REPORT_OBJECT_TYPE_OBJECT_TABLE_NVX_EXT"/>
+        <enum value="32" name="VK_DEBUG_REPORT_OBJECT_TYPE_INDIRECT_COMMANDS_LAYOUT_NVX_EXT"/>
     </enums>
     <enums name="VkDebugReportErrorEXT" type="enum">
         <enum value="0" name="VK_DEBUG_REPORT_ERROR_NONE_EXT"/>         <!-- Used for INFO & other non-error messages -->
@@ -2434,7 +2548,33 @@
         <enum value="0" name="VK_VALIDATION_CHECK_ALL_EXT"/>
         <!-- Placeholder for validation enums to be defined for VK_EXT_Validation_flags extension -->
     </enums>
-
+    <enums name="VkIndirectCommandsLayoutUsageFlagBitsNVX" type="bitmask">
+        <enum bitpos="0" name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_UNORDERED_SEQUENCES_BIT_NVX"/> <!-- sequences can be processed in implementation-dependent order -->
+        <enum bitpos="1" name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_SPARSE_SEQUENCES_BIT_NVX"/>    <!-- likely generated with a high difference in actual sequencesCount and maxSequencesCount -->
+        <enum bitpos="2" name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_EMPTY_EXECUTIONS_BIT_NVX"/>    <!-- likely to contain draw/dispatch calls that are zero-sized -->
+        <enum bitpos="3" name="VK_INDIRECT_COMMANDS_LAYOUT_USAGE_INDEXED_SEQUENCES_BIT_NVX"/>   <!-- custom sequence index permutation (32-bit) is provided -->
+    </enums>
+    <enums name="VkObjectEntryUsageFlagBitsNVX" type="bitmask">
+        <enum bitpos="0" name="VK_OBJECT_ENTRY_USAGE_GRAPHICS_BIT_NVX"/>
+        <enum bitpos="1" name="VK_OBJECT_ENTRY_USAGE_COMPUTE_BIT_NVX"/>
+    </enums>
+    <enums name="VkIndirectCommandsTokenTypeNVX" type="enum">
+        <enum value="0" name="VK_INDIRECT_COMMANDS_TOKEN_PIPELINE_NVX"/>        <!-- array of 32bit tableEntry in the object table -->
+        <enum value="1" name="VK_INDIRECT_COMMANDS_TOKEN_DESCRIPTOR_SET_NVX"/>  <!-- array of (32 bit tableEntry + variable count 32bit offsets) -->
+        <enum value="2" name="VK_INDIRECT_COMMANDS_TOKEN_INDEX_BUFFER_NVX"/>    <!-- array of (32 bit tableEntry + optional 32bit offset) -->
+        <enum value="3" name="VK_INDIRECT_COMMANDS_TOKEN_VERTEX_BUFFER_NVX"/>   <!-- array of (32 bit tableEntry + optional 32bit offset) -->
+        <enum value="4" name="VK_INDIRECT_COMMANDS_TOKEN_PUSH_CONSTANT_NVX"/>   <!-- array of (32 bit tableEntry + variable count 32bit values ) -->
+        <enum value="5" name="VK_INDIRECT_COMMANDS_TOKEN_DRAW_INDEXED_NVX"/>    <!-- array of VkDrawIndexedIndirectCommand -->
+        <enum value="6" name="VK_INDIRECT_COMMANDS_TOKEN_DRAW_NVX"/>            <!-- array of VkDrawIndirectCommand -->
+        <enum value="7" name="VK_INDIRECT_COMMANDS_TOKEN_DISPATCH_NVX"/>        <!-- array of VkDispatchIndirectCommand -->
+    </enums>
+    <enums name="VkObjectEntryTypeNVX" type="enum">
+        <enum value="0" name="VK_OBJECT_ENTRY_DESCRIPTOR_SET_NVX"/>
+        <enum value="1" name="VK_OBJECT_ENTRY_PIPELINE_NVX"/>
+        <enum value="2" name="VK_OBJECT_ENTRY_INDEX_BUFFER_NVX"/>
+        <enum value="3" name="VK_OBJECT_ENTRY_VERTEX_BUFFER_NVX"/>
+        <enum value="4" name="VK_OBJECT_ENTRY_PUSH_CONSTANT_NVX"/>
+    </enums>
     <!-- SECTION: Vulkan command definitions -->
     <commands>
         <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY,VK_ERROR_INITIALIZATION_FAILED,VK_ERROR_LAYER_NOT_PRESENT,VK_ERROR_EXTENSION_NOT_PRESENT,VK_ERROR_INCOMPATIBLE_DRIVER">
@@ -3131,7 +3271,7 @@
             <param len="bindingCount">const <type>VkBuffer</type>* <name>pBuffers</name></param>
             <param len="bindingCount">const <type>VkDeviceSize</type>* <name>pOffsets</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdDraw</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>uint32_t</type> <name>vertexCount</name></param>
@@ -3139,7 +3279,7 @@
             <param><type>uint32_t</type> <name>firstVertex</name></param>
             <param><type>uint32_t</type> <name>firstInstance</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdDrawIndexed</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>uint32_t</type> <name>indexCount</name></param>
@@ -3148,7 +3288,7 @@
             <param><type>int32_t</type> <name>vertexOffset</name></param>
             <param><type>uint32_t</type> <name>firstInstance</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdDrawIndirect</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>buffer</name></param>
@@ -3156,7 +3296,7 @@
             <param><type>uint32_t</type> <name>drawCount</name></param>
             <param><type>uint32_t</type> <name>stride</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdDrawIndexedIndirect</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>buffer</name></param>
@@ -3164,20 +3304,20 @@
             <param><type>uint32_t</type> <name>drawCount</name></param>
             <param><type>uint32_t</type> <name>stride</name></param>
         </command>
-        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="compute">
             <proto><type>void</type> <name>vkCmdDispatch</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>uint32_t</type> <name>x</name></param>
             <param><type>uint32_t</type> <name>y</name></param>
             <param><type>uint32_t</type> <name>z</name></param>
         </command>
-        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="compute">
             <proto><type>void</type> <name>vkCmdDispatchIndirect</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>buffer</name></param>
             <param><type>VkDeviceSize</type> <name>offset</name></param>
         </command>
-        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdCopyBuffer</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>srcBuffer</name></param>
@@ -3185,7 +3325,7 @@
             <param><type>uint32_t</type> <name>regionCount</name></param>
             <param len="regionCount">const <type>VkBufferCopy</type>* <name>pRegions</name></param>
         </command>
-        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdCopyImage</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkImage</type> <name>srcImage</name></param>
@@ -3195,7 +3335,7 @@
             <param><type>uint32_t</type> <name>regionCount</name></param>
             <param len="regionCount">const <type>VkImageCopy</type>* <name>pRegions</name></param>
         </command>
-        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdBlitImage</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkImage</type> <name>srcImage</name></param>
@@ -3206,7 +3346,7 @@
             <param len="regionCount">const <type>VkImageBlit</type>* <name>pRegions</name></param>
             <param><type>VkFilter</type> <name>filter</name></param>
         </command>
-        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdCopyBufferToImage</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>srcBuffer</name></param>
@@ -3215,7 +3355,7 @@
             <param><type>uint32_t</type> <name>regionCount</name></param>
             <param len="regionCount">const <type>VkBufferImageCopy</type>* <name>pRegions</name></param>
         </command>
-        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdCopyImageToBuffer</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkImage</type> <name>srcImage</name></param>
@@ -3224,7 +3364,7 @@
             <param><type>uint32_t</type> <name>regionCount</name></param>
             <param len="regionCount">const <type>VkBufferImageCopy</type>* <name>pRegions</name></param>
         </command>
-        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="transfer,graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdUpdateBuffer</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>dstBuffer</name></param>
@@ -3232,7 +3372,7 @@
             <param><type>VkDeviceSize</type> <name>dataSize</name></param>
             <param len="dataSize">const <type>void</type>* <name>pData</name></param>
         </command>
-        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdFillBuffer</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>dstBuffer</name></param>
@@ -3240,7 +3380,7 @@
             <param><type>VkDeviceSize</type> <name>size</name></param>
             <param><type>uint32_t</type> <name>data</name></param>
         </command>
-        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdClearColorImage</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkImage</type> <name>image</name></param>
@@ -3249,7 +3389,7 @@
             <param><type>uint32_t</type> <name>rangeCount</name></param>
             <param len="rangeCount">const <type>VkImageSubresourceRange</type>* <name>pRanges</name></param>
         </command>
-        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdClearDepthStencilImage</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkImage</type> <name>image</name></param>
@@ -3258,7 +3398,7 @@
             <param><type>uint32_t</type> <name>rangeCount</name></param>
             <param len="rangeCount">const <type>VkImageSubresourceRange</type>* <name>pRanges</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdClearAttachments</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>uint32_t</type> <name>attachmentCount</name></param>
@@ -3266,7 +3406,7 @@
             <param><type>uint32_t</type> <name>rectCount</name></param>
             <param len="rectCount">const <type>VkClearRect</type>* <name>pRects</name></param>
         </command>
-        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdResolveImage</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkImage</type> <name>srcImage</name></param>
@@ -3335,14 +3475,14 @@
             <param><type>uint32_t</type> <name>firstQuery</name></param>
             <param><type>uint32_t</type> <name>queryCount</name></param>
         </command>
-        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary">
+        <command queues="graphics,compute" renderpass="both" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdWriteTimestamp</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkPipelineStageFlagBits</type> <name>pipelineStage</name></param>
             <param><type>VkQueryPool</type> <name>queryPool</name></param>
             <param><type>uint32_t</type> <name>query</name></param>
         </command>
-        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics,compute" renderpass="outside" cmdbufferlevel="primary,secondary" pipeline="transfer">
             <proto><type>void</type> <name>vkCmdCopyQueryPoolResults</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkQueryPool</type> <name>queryPool</name></param>
@@ -3362,18 +3502,18 @@
             <param><type>uint32_t</type> <name>size</name></param>
             <param len="size">const <type>void</type>* <name>pValues</name></param>
         </command>
-        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary">
+        <command queues="graphics" renderpass="outside" cmdbufferlevel="primary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdBeginRenderPass</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param>const <type>VkRenderPassBeginInfo</type>* <name>pRenderPassBegin</name></param>
             <param><type>VkSubpassContents</type> <name>contents</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdNextSubpass</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkSubpassContents</type> <name>contents</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdEndRenderPass</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
         </command>
@@ -3600,8 +3740,8 @@
             <param><type>uint64_t</type> <name>object</name></param>
             <param><type>size_t</type> <name>location</name></param>
             <param><type>int32_t</type> <name>messageCode</name></param>
-            <param>const <type>char</type>* <name>pLayerPrefix</name></param>
-            <param>const <type>char</type>* <name>pMessage</name></param>
+            <param len="null-terminated">const <type>char</type>* <name>pLayerPrefix</name></param>
+            <param len="null-terminated">const <type>char</type>* <name>pMessage</name></param>
         </command>
         <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
             <proto><type>VkResult</type> <name>vkDebugMarkerSetObjectNameEXT</name></proto>
@@ -3634,8 +3774,8 @@
             <param><type>VkImageType</type> <name>type</name></param>
             <param><type>VkImageTiling</type> <name>tiling</name></param>
             <param><type>VkImageUsageFlags</type> <name>usage</name></param>
-            <param><type>VkImageCreateFlags</type> <name>flags</name></param>
-            <param><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>externalHandleType</name></param>
+            <param optional="true"><type>VkImageCreateFlags</type> <name>flags</name></param>
+            <param optional="true"><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>externalHandleType</name></param>
             <param><type>VkExternalImageFormatPropertiesNV</type>* <name>pExternalImageFormatProperties</name></param>
         </command>
         <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_TOO_MANY_OBJECTS,VK_ERROR_OUT_OF_HOST_MEMORY">
@@ -3645,7 +3785,7 @@
             <param><type>VkExternalMemoryHandleTypeFlagsNV</type> <name>handleType</name></param>
             <param><type>HANDLE</type>* <name>pHandle</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdDrawIndirectCountAMD</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>buffer</name></param>
@@ -3655,7 +3795,7 @@
             <param><type>uint32_t</type> <name>maxDrawCount</name></param>
             <param><type>uint32_t</type> <name>stride</name></param>
         </command>
-        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary">
+        <command queues="graphics" renderpass="inside" cmdbufferlevel="primary,secondary" pipeline="graphics">
             <proto><type>void</type> <name>vkCmdDrawIndexedIndirectCountAMD</name></proto>
             <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
             <param><type>VkBuffer</type> <name>buffer</name></param>
@@ -3665,6 +3805,64 @@
             <param><type>uint32_t</type> <name>maxDrawCount</name></param>
             <param><type>uint32_t</type> <name>stride</name></param>
         </command>
+        <command queues="graphics,compute" renderpass="inside" cmdbufferlevel="primary,secondary">
+            <proto><type>void</type> <name>vkCmdProcessCommandsNVX</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCmdProcessCommandsInfoNVX</type>* <name>pProcessCommandsInfo</name></param>
+        </command>
+        <command queues="graphics,compute" renderpass="inside" cmdbufferlevel="secondary">
+            <proto><type>void</type> <name>vkCmdReserveSpaceForCommandsNVX</name></proto>
+            <param externsync="true"><type>VkCommandBuffer</type> <name>commandBuffer</name></param>
+            <param>const <type>VkCmdReserveSpaceForCommandsInfoNVX</type>* <name>pReserveSpaceInfo</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateIndirectCommandsLayoutNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkIndirectCommandsLayoutCreateInfoNVX</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkIndirectCommandsLayoutNVX</type>* <name>pIndirectCommandsLayout</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyIndirectCommandsLayoutNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param><type>VkIndirectCommandsLayoutNVX</type> <name>indirectCommandsLayout</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkCreateObjectTableNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param>const <type>VkObjectTableCreateInfoNVX</type>* <name>pCreateInfo</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+            <param><type>VkObjectTableNVX</type>* <name>pObjectTable</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkDestroyObjectTableNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkObjectTableNVX</type> <name>objectTable</name></param>
+            <param optional="true">const <type>VkAllocationCallbacks</type>* <name>pAllocator</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkRegisterObjectsNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkObjectTableNVX</type> <name>objectTable</name></param>
+            <param><type>uint32_t</type> <name>objectCount</name></param>
+            <param len="objectCount">const <type>VkObjectTableEntryNVX</type>* const*    <name>ppObjectTableEntries</name></param>
+            <param len="objectCount">const <type>uint32_t</type>* <name>pObjectIndices</name></param>
+        </command>
+        <command successcodes="VK_SUCCESS" errorcodes="VK_ERROR_OUT_OF_HOST_MEMORY,VK_ERROR_OUT_OF_DEVICE_MEMORY">
+            <proto><type>VkResult</type> <name>vkUnregisterObjectsNVX</name></proto>
+            <param><type>VkDevice</type> <name>device</name></param>
+            <param externsync="true"><type>VkObjectTableNVX</type> <name>objectTable</name></param>
+            <param><type>uint32_t</type> <name>objectCount</name></param>
+            <param len="objectCount">const <type>VkObjectEntryTypeNVX</type>* <name>pObjectEntryTypes</name></param>
+            <param len="objectCount">const <type>uint32_t</type>* <name>pObjectIndices</name></param>
+        </command>
+        <command>
+            <proto><type>void</type> <name>vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX</name></proto>
+            <param><type>VkPhysicalDevice</type> <name>physicalDevice</name></param>
+            <param><type>VkDeviceGeneratedCommandsFeaturesNVX</type>* <name>pFeatures</name></param>
+            <param><type>VkDeviceGeneratedCommandsLimitsNVX</type>* <name>pLimits</name></param>
+        </command>
     </commands>
 
     <!-- SECTION: Vulkan API interface definitions -->
@@ -4037,7 +4235,7 @@
         </extension>
         <extension name="VK_EXT_debug_report" number="12" type="instance" author="Google, Inc." contact="Courtney Goeltzenleuchter @courtney" supported="vulkan">
             <require>
-                <enum value="3"                                         name="VK_EXT_DEBUG_REPORT_SPEC_VERSION"/>
+                <enum value="4"                                         name="VK_EXT_DEBUG_REPORT_SPEC_VERSION"/>
                 <enum value="&quot;VK_EXT_debug_report&quot;"           name="VK_EXT_DEBUG_REPORT_EXTENSION_NAME"/>
                 <enum offset="0" extends="VkStructureType"              name="VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT"/>
                 <enum offset="1" dir="-" extends="VkResult"             name="VK_ERROR_VALIDATION_FAILED_EXT"/>
@@ -4547,12 +4745,52 @@
                  <enum value="&quot;VK_KHR_extension_86&quot;"           name="VK_KHR_EXTENSION_86_EXTENSION_NAME"/>
               </require>
          </extension>
-         <extension name="VK_NV_extension_87" number="87" author="NVIDIA" contact="Christoph Kubisch @pixeljetstream" supported="disabled">
-             <require>
-                 <enum value="0"                                         name="VK_NV_EXTENSION_87_SPEC_VERSION"/>
-                 <enum value="&quot;VK_NV_extension_87&quot;"            name="VK_NV_EXTENSION_87_EXTENSION_NAME"/>
-              </require>
-         </extension>
+        <extension name="VK_NVX_device_generated_commands" number="87" type="device" author="NVIDIA" contact="Christoph Kubisch @pixeljetstream" supported="vulkan">
+          <require>
+              <enum value="1"                                               name="VK_NVX_DEVICE_GENERATED_COMMANDS_SPEC_VERSION"/>
+              <enum value="&quot;VK_NVX_device_generated_commands&quot;"    name="VK_NVX_DEVICE_GENERATED_COMMANDS_EXTENSION_NAME"/>
+              <enum offset="0" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_OBJECT_TABLE_CREATE_INFO_NVX"/>
+              <enum offset="1" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_INDIRECT_COMMANDS_LAYOUT_CREATE_INFO_NVX"/>
+              <enum offset="2" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_CMD_PROCESS_COMMANDS_INFO_NVX"/>
+              <enum offset="3" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_CMD_RESERVE_SPACE_FOR_COMMANDS_INFO_NVX"/>
+              <enum offset="4" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_LIMITS_NVX"/>
+              <enum offset="5" extends="VkStructureType"                    name="VK_STRUCTURE_TYPE_DEVICE_GENERATED_COMMANDS_FEATURES_NVX"/>
+              <enum bitpos="17" extends="VkPipelineStageFlagBits"           name="VK_PIPELINE_STAGE_COMMAND_PROCESS_BIT_NVX"/>
+              <enum bitpos="17" extends="VkAccessFlagBits"                  name="VK_ACCESS_COMMAND_PROCESS_READ_BIT_NVX"/>
+              <enum bitpos="18" extends="VkAccessFlagBits"                  name="VK_ACCESS_COMMAND_PROCESS_WRITE_BIT_NVX"/>
+              <type name="VkObjectTableNVX"/>
+              <type name="VkIndirectCommandsLayoutNVX"/>
+              <type name="VkIndirectCommandsLayoutUsageFlagsNVX"/>
+              <type name="VkObjectEntryUsageFlagsNVX"/>
+              <type name="VkIndirectCommandsLayoutUsageFlagBitsNVX"/>
+              <type name="VkIndirectCommandsTokenTypeNVX"/>
+              <type name="VkObjectEntryUsageFlagBitsNVX"/>
+              <type name="VkObjectEntryTypeNVX"/>
+              <type name="VkDeviceGeneratedCommandsFeaturesNVX"/>
+              <type name="VkDeviceGeneratedCommandsLimitsNVX"/>
+              <type name="VkIndirectCommandsTokenNVX"/>
+              <type name="VkIndirectCommandsLayoutTokenNVX"/>
+              <type name="VkIndirectCommandsLayoutCreateInfoNVX"/>
+              <type name="VkCmdProcessCommandsInfoNVX"/>
+              <type name="VkCmdReserveSpaceForCommandsInfoNVX"/>
+              <type name="VkObjectTableCreateInfoNVX"/>
+              <type name="VkObjectTableEntryNVX"/>
+              <type name="VkObjectTablePipelineEntryNVX"/>
+              <type name="VkObjectTableDescriptorSetEntryNVX"/>
+              <type name="VkObjectTableVertexBufferEntryNVX"/>
+              <type name="VkObjectTableIndexBufferEntryNVX"/>
+              <type name="VkObjectTablePushConstantEntryNVX"/>
+              <command name="vkCmdProcessCommandsNVX"/>
+              <command name="vkCmdReserveSpaceForCommandsNVX"/>
+              <command name="vkCreateIndirectCommandsLayoutNVX"/>
+              <command name="vkDestroyIndirectCommandsLayoutNVX"/>
+              <command name="vkCreateObjectTableNVX"/>
+              <command name="vkDestroyObjectTableNVX"/>
+              <command name="vkRegisterObjectsNVX"/>
+              <command name="vkUnregisterObjectsNVX"/>
+              <command name="vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX"/>
+          </require>
+        </extension>
          <extension name="VK_KHR_extension_88" number="88" author="NV" contact="Eric Werness @ewerness" supported="disabled">
              <require>
                  <enum value="0"                                         name="VK_KHR_EXTENSION_88_SPEC_VERSION"/>
@@ -4577,5 +4815,89 @@
                  <enum value="&quot;VK_EXT_extension_91&quot;"           name="VK_EXT_EXTENSION_91_EXTENSION_NAME"/>
               </require>
          </extension>
+         <extension name="VK_EXT_extension_92" number="92" author="NV" contact="James Jones @cubanismo" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_EXT_EXTENSION_92_SPEC_VERSION"/>
+                 <enum value="&quot;VK_EXT_extension_92&quot;"           name="VK_EXT_EXTENSION_92_EXTENSION_NAME"/>
+              </require>
+         </extension>
+         <extension name="VK_KHR_extension_93" number="93" author="GOOGLE" contact="Ian Elliott @ianelliott" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_GOOGLE_EXTENSION_93_SPEC_VERSION"/>
+                 <enum value="&quot;VK_GOOGLE_extension_93&quot;"        name="VK_GOOGLE_EXTENSION_93_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_KHR_extension_94" number="94" author="Codeplay" contact="Neil Henning @neil_henning" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_KHR_EXTENSION_94_SPEC_VERSION"/>
+                 <enum value="&quot;VK_KHR_extension_94&quot;"           name="VK_KHR_EXTENSION_94_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_95" number="95" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_95_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_95&quot;"            name="VK_NV_EXTENSION_95_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_96" number="96" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_96_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_96&quot;"            name="VK_NV_EXTENSION_96_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_97" number="97" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_97_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_97&quot;"            name="VK_NV_EXTENSION_97_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_98" number="98" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_98_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_98&quot;"            name="VK_NV_EXTENSION_98_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_99" number="99" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_99_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_99&quot;"            name="VK_NV_EXTENSION_99_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_100" number="100" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_100_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_100&quot;"           name="VK_NV_EXTENSION_100_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_101" number="101" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_101_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_101&quot;"           name="VK_NV_EXTENSION_101_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_102" number="102" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_102_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_102&quot;"           name="VK_NV_EXTENSION_102_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_103" number="103" author="NVIDIA" contact="Daniel Koch @dgkoch" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_103_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_103&quot;"           name="VK_NV_EXTENSION_103_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_NV_extension_104" number="104" author="NVIDIA" contact="Mathias Schott @mschott" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_NV_EXTENSION_104_SPEC_VERSION"/>
+                 <enum value="&quot;VK_NV_extension_104&quot;"           name="VK_NV_EXTENSION_104_EXTENSION_NAME"/>
+             </require>
+         </extension>
+         <extension name="VK_EXT_extension_105" number="105" author="GOOGLE" contact="Courtney Goeltzenleuchter @courtneygo" supported="disabled">
+             <require>
+                 <enum value="0"                                         name="VK_KHR_EXTENSION_105_SPEC_VERSION"/>
+                 <enum value="&quot;VK_EXT_extension_105&quot;"           name="VK_KHR_EXTENSION_105_EXTENSION_NAME"/>
+             </require>
+         </extension>
     </extensions>
 </registry>
diff --git a/scripts/vulkan.py b/scripts/vulkan.py
index 5d71f52..65728c7 100644
--- a/scripts/vulkan.py
+++ b/scripts/vulkan.py
@@ -1344,6 +1344,66 @@
     ],
 )
 
+VK_NVX_device_generated_commands = Extension(
+    name="VK_EXT_debug_marker",
+    headers=["vulkan/vulkan.h"],
+    objects=[
+        "VkObjectTableNVX",
+        "VkIndirectCommandsLayoutNVX",
+    ],
+    protos=[
+        Proto("void", "CmdProcessCommandsNVX",
+            [Param("VkCommandBuffer", "commandBuffer"),
+             Param("VkCmdProcessCommandsInfoNVX*", "pProcessCommandsInfo")]),
+
+        Proto("void", "CmdReserveSpaceForCommandsNV",
+            [Param("VkCommandBuffer", "commandBuffer"),
+             Param("VkCmdReserveSpaceForCommandsInfoNVX*", "pReserveSpaceInfo")]),
+
+        Proto("VkResult", "CreateIndirectCommandsLayoutNVX",
+            [Param("VkDevice", "device"),
+             Param("VkIndirectCommandsLayoutCreateInfoNVX*", "pCreateInfo"),
+             Param("VkAllocationCallbacks*", "pAllocator"),
+             Param("VkIndirectCommandsLayoutNVX*", "pIndirectCommandsLayout")]),
+
+        Proto("void", "DestroyIndirectCommandsLayoutNVX",
+            [Param("VkDevice", "device"),
+             Param("VkIndirectCommandsLayoutNVX", "indirectCommandsLayout"),
+             Param("VkAllocationCallbacks*", "pAllocator")]),
+
+        Proto("VkResult", "CreateObjectTableNVX)",
+            [Param("VkDevice", "device"),
+             Param("VkObjectTableCreateInfoNVX*", "pCreateInfo"),
+             Param("VkAllocationCallbacks*", "pAllocator"),
+             Param("VkObjectTableNVX*", "pObjectTable")]),
+
+        Proto("void", "DestroyObjectTableNVX",
+            [Param("VkDevice", "device"),
+             Param("VkObjectTableNVX", "objectTable"),
+             Param("VkAllocationCallbacks*", "pAllocator")]),
+
+        Proto("VkResult", "RegisterObjectsNVX",
+            [Param("VkDevice", "device"),
+             Param("VkObjectTableNVX", "objectTable"),
+             Param("uint32_t", "objectCount"),
+             Param("VkObjectTableEntryNVX**", "ppObjectTableEntries"),
+             Param("uint32_t*", "pObjectIndices")]),
+
+        Proto("VkResult", "UnregisterObjectsNVX)",
+            [Param("VkDevice", "device"),
+             Param("VkObjectTableNVX*", "objectTable"),
+             Param("uint32_t*", "objectCount"),
+             Param("VkObjectEntryTypeNVX*", "pObjectEntryTypes"),
+             Param("uint32_t*", "pObjectIndices")]),
+
+        Proto("void", "GetPhysicalDeviceGeneratedCommandsPropertiesNVX",
+            [Param("VkPhysicalDevice", "physicalDevice"),
+             Param("VkDeviceGeneratedCommandsFeaturesNVX*", "pFeatures"),
+             Param("VkDeviceGeneratedCommandsLimitsNVX*", "pLimits")]),
+    ],
+)
+
+
 import sys
 
 wsi_linux = ['Xcb', 'Xlib', 'Wayland', 'Mir', 'Display']
@@ -1398,6 +1458,7 @@
 #                    VK_AMD_gpu_shader_half_float,
 #                    VK_AMD_shader_ballot,
 #                    VK_IMG_format_pvrtc,
+#                    VK_NVX_device_generated_commands,
                     ]
 
 extensions = common_exts