vk1.2: Add rootType argument to struct functions. (guest codegen)

Change-Id: I40a9cebb075340c16da5ccc04f3fc2de3842e576
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 9767c6c..27564ca 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -89,13 +89,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkInstanceCreateInfo*)pool->alloc(sizeof(const VkInstanceCreateInfo));
-        deepcopy_VkInstanceCreateInfo(pool, pCreateInfo, (VkInstanceCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkInstanceCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkInstanceCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -109,12 +109,12 @@
     size_t count = 0;
     size_t* countPtr = &count;
     {
-        count_VkInstanceCreateInfo(sFeatureBits, (VkInstanceCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkInstanceCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkInstanceCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_0;
         *countPtr += 8;
@@ -127,7 +127,7 @@
     memcpy(streamPtr, &opcode_vkCreateInstance, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
     memcpy(streamPtr, &packetSize_vkCreateInstance, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
     if (queueSubmitWithCommandsEnabled) { memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t); }
-    reservedmarshal_VkInstanceCreateInfo(stream, (VkInstanceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkInstanceCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkInstanceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_0, 8);
@@ -135,7 +135,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_1;
@@ -178,7 +178,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -194,7 +194,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyInstance = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -216,7 +216,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkInstance((VkInstance*)&instance);
     stream->flush();
@@ -367,7 +367,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceFeatures(sFeatureBits, (VkPhysicalDeviceFeatures*)(pFeatures), countPtr);
+        count_VkPhysicalDeviceFeatures(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures*)(pFeatures), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceFeatures = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures);
@@ -381,8 +381,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
+    reservedmarshal_VkPhysicalDeviceFeatures(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures*)(pFeatures), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceFeatures(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures*)(pFeatures));
     if (pFeatures)
     {
         transform_fromhost_VkPhysicalDeviceFeatures(sResourceTracker, (VkPhysicalDeviceFeatures*)(pFeatures));
@@ -417,7 +417,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkFormat);
-        count_VkFormatProperties(sFeatureBits, (VkFormatProperties*)(pFormatProperties), countPtr);
+        count_VkFormatProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties*)(pFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceFormatProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties);
@@ -433,8 +433,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
     *streamPtrPtr += sizeof(VkFormat);
-    reservedmarshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties), streamPtrPtr);
-    unmarshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
+    reservedmarshal_VkFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties*)(pFormatProperties), streamPtrPtr);
+    unmarshal_VkFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties*)(pFormatProperties));
     if (pFormatProperties)
     {
         transform_fromhost_VkFormatProperties(sResourceTracker, (VkFormatProperties*)(pFormatProperties));
@@ -485,7 +485,7 @@
         *countPtr += sizeof(VkImageTiling);
         *countPtr += sizeof(VkImageUsageFlags);
         *countPtr += sizeof(VkImageCreateFlags);
-        count_VkImageFormatProperties(sFeatureBits, (VkImageFormatProperties*)(pImageFormatProperties), countPtr);
+        count_VkImageFormatProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties*)(pImageFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties);
@@ -509,8 +509,8 @@
     *streamPtrPtr += sizeof(VkImageUsageFlags);
     memcpy(*streamPtrPtr, (VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
     *streamPtrPtr += sizeof(VkImageCreateFlags);
-    reservedmarshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties), streamPtrPtr);
-    unmarshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
+    reservedmarshal_VkImageFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties*)(pImageFormatProperties), streamPtrPtr);
+    unmarshal_VkImageFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties*)(pImageFormatProperties));
     if (pImageFormatProperties)
     {
         transform_fromhost_VkImageFormatProperties(sResourceTracker, (VkImageFormatProperties*)(pImageFormatProperties));
@@ -544,7 +544,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceProperties(sFeatureBits, (VkPhysicalDeviceProperties*)(pProperties), countPtr);
+        count_VkPhysicalDeviceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties*)(pProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties);
@@ -558,8 +558,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
+    reservedmarshal_VkPhysicalDeviceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties*)(pProperties), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties*)(pProperties));
     if (pProperties)
     {
         transform_fromhost_VkPhysicalDeviceProperties(sResourceTracker, (VkPhysicalDeviceProperties*)(pProperties));
@@ -606,7 +606,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
                 {
-                    count_VkQueueFamilyProperties(sFeatureBits, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i), countPtr);
+                    count_VkQueueFamilyProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i), countPtr);
                 }
             }
         }
@@ -642,7 +642,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
         {
-            reservedmarshal_VkQueueFamilyProperties(stream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i), streamPtrPtr);
+            reservedmarshal_VkQueueFamilyProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -669,7 +669,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
             {
-                unmarshal_VkQueueFamilyProperties(stream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
+                unmarshal_VkQueueFamilyProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
             }
         }
     }
@@ -709,7 +709,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceMemoryProperties(sFeatureBits, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties), countPtr);
+        count_VkPhysicalDeviceMemoryProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties);
@@ -723,8 +723,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
+    reservedmarshal_VkPhysicalDeviceMemoryProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceMemoryProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
     if (pMemoryProperties)
     {
         transform_fromhost_VkPhysicalDeviceMemoryProperties(sResourceTracker, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
@@ -867,13 +867,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDeviceCreateInfo*)pool->alloc(sizeof(const VkDeviceCreateInfo));
-        deepcopy_VkDeviceCreateInfo(pool, pCreateInfo, (VkDeviceCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDeviceCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDeviceCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -889,12 +889,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDeviceCreateInfo(sFeatureBits, (VkDeviceCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDeviceCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -911,7 +911,7 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDeviceCreateInfo(stream, (VkDeviceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDeviceCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -919,7 +919,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -963,7 +963,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -979,7 +979,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDevice = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -1001,7 +1001,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDevice((VkDevice*)&device);
     stream->flush();
@@ -1058,7 +1058,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkExtensionProperties(sFeatureBits, (VkExtensionProperties*)(pProperties + i), countPtr);
+                    count_VkExtensionProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtensionProperties*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -1120,7 +1120,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtensionProperties*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -1147,7 +1147,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
+                unmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtensionProperties*)(pProperties + i));
             }
         }
     }
@@ -1222,7 +1222,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkExtensionProperties(sFeatureBits, (VkExtensionProperties*)(pProperties + i), countPtr);
+                    count_VkExtensionProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtensionProperties*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -1288,7 +1288,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtensionProperties*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -1315,7 +1315,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
+                unmarshal_VkExtensionProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtensionProperties*)(pProperties + i));
             }
         }
     }
@@ -1368,7 +1368,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkLayerProperties(sFeatureBits, (VkLayerProperties*)(pProperties + i), countPtr);
+                    count_VkLayerProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkLayerProperties*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -1400,7 +1400,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkLayerProperties*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -1427,7 +1427,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
+                unmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkLayerProperties*)(pProperties + i));
             }
         }
     }
@@ -1485,7 +1485,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkLayerProperties(sFeatureBits, (VkLayerProperties*)(pProperties + i), countPtr);
+                    count_VkLayerProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkLayerProperties*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -1521,7 +1521,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkLayerProperties*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -1548,7 +1548,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
+                unmarshal_VkLayerProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkLayerProperties*)(pProperties + i));
             }
         }
     }
@@ -1662,7 +1662,7 @@
         local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
         for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
         {
-            deepcopy_VkSubmitInfo(pool, pSubmits + i, (VkSubmitInfo*)(local_pSubmits + i));
+            deepcopy_VkSubmitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i, (VkSubmitInfo*)(local_pSubmits + i));
         }
     }
     local_fence = fence;
@@ -1681,7 +1681,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
         {
-            count_VkSubmitInfo(sFeatureBits, (VkSubmitInfo*)(local_pSubmits + i), countPtr);
+            count_VkSubmitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubmitInfo*)(local_pSubmits + i), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
@@ -1702,7 +1702,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
     {
-        reservedmarshal_VkSubmitInfo(stream, (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
+        reservedmarshal_VkSubmitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
     }
     uint64_t cgen_var_1;
     *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
@@ -1822,13 +1822,13 @@
     if (pAllocateInfo)
     {
         local_pAllocateInfo = (VkMemoryAllocateInfo*)pool->alloc(sizeof(const VkMemoryAllocateInfo));
-        deepcopy_VkMemoryAllocateInfo(pool, pAllocateInfo, (VkMemoryAllocateInfo*)(local_pAllocateInfo));
+        deepcopy_VkMemoryAllocateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocateInfo, (VkMemoryAllocateInfo*)(local_pAllocateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocateInfo)
@@ -1844,12 +1844,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkMemoryAllocateInfo(sFeatureBits, (VkMemoryAllocateInfo*)(local_pAllocateInfo), countPtr);
+        count_VkMemoryAllocateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryAllocateInfo*)(local_pAllocateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -1866,7 +1866,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMemoryAllocateInfo(stream, (VkMemoryAllocateInfo*)(local_pAllocateInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryAllocateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryAllocateInfo*)(local_pAllocateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -1874,7 +1874,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -1919,7 +1919,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     sResourceTracker->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
@@ -1934,7 +1934,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkFreeMemory = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -1960,7 +1960,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDeviceMemory((VkDeviceMemory*)&memory);
     stream->flush();
@@ -2020,7 +2020,7 @@
         local_pMemoryRanges = (VkMappedMemoryRange*)pool->alloc(((memoryRangeCount)) * sizeof(const VkMappedMemoryRange));
         for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
         {
-            deepcopy_VkMappedMemoryRange(pool, pMemoryRanges + i, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
+            deepcopy_VkMappedMemoryRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryRanges + i, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
         }
     }
     if (local_pMemoryRanges)
@@ -2038,7 +2038,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
         {
-            count_VkMappedMemoryRange(sFeatureBits, (VkMappedMemoryRange*)(local_pMemoryRanges + i), countPtr);
+            count_VkMappedMemoryRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMappedMemoryRange*)(local_pMemoryRanges + i), countPtr);
         }
     }
     uint32_t packetSize_vkFlushMappedMemoryRanges = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -2057,7 +2057,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
     {
-        reservedmarshal_VkMappedMemoryRange(stream, (VkMappedMemoryRange*)(local_pMemoryRanges + i), streamPtrPtr);
+        reservedmarshal_VkMappedMemoryRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMappedMemoryRange*)(local_pMemoryRanges + i), streamPtrPtr);
     }
     if (!sResourceTracker->usingDirectMapping())
     {
@@ -2113,7 +2113,7 @@
         local_pMemoryRanges = (VkMappedMemoryRange*)pool->alloc(((memoryRangeCount)) * sizeof(const VkMappedMemoryRange));
         for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
         {
-            deepcopy_VkMappedMemoryRange(pool, pMemoryRanges + i, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
+            deepcopy_VkMappedMemoryRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryRanges + i, (VkMappedMemoryRange*)(local_pMemoryRanges + i));
         }
     }
     if (local_pMemoryRanges)
@@ -2131,7 +2131,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
         {
-            count_VkMappedMemoryRange(sFeatureBits, (VkMappedMemoryRange*)(local_pMemoryRanges + i), countPtr);
+            count_VkMappedMemoryRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMappedMemoryRange*)(local_pMemoryRanges + i), countPtr);
         }
     }
     uint32_t packetSize_vkInvalidateMappedMemoryRanges = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -2150,7 +2150,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
     {
-        reservedmarshal_VkMappedMemoryRange(stream, (VkMappedMemoryRange*)(local_pMemoryRanges + i), streamPtrPtr);
+        reservedmarshal_VkMappedMemoryRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMappedMemoryRange*)(local_pMemoryRanges + i), streamPtrPtr);
     }
     VkResult vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
     stream->read(&vkInvalidateMappedMemoryRanges_VkResult_return, sizeof(VkResult));
@@ -2390,7 +2390,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkMemoryRequirements(sFeatureBits, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
+        count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetBufferMemoryRequirements = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements);
@@ -2408,8 +2408,8 @@
     *&cgen_var_1 = get_host_u64_VkBuffer((*&local_buffer));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
+    reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements(sResourceTracker, (VkMemoryRequirements*)(pMemoryRequirements));
@@ -2445,7 +2445,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkMemoryRequirements(sFeatureBits, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
+        count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetImageMemoryRequirements = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements);
@@ -2463,8 +2463,8 @@
     *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
+    reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements(sResourceTracker, (VkMemoryRequirements*)(pMemoryRequirements));
@@ -2515,7 +2515,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
                 {
-                    count_VkSparseImageMemoryRequirements(sFeatureBits, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i), countPtr);
+                    count_VkSparseImageMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i), countPtr);
                 }
             }
         }
@@ -2555,7 +2555,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
         {
-            reservedmarshal_VkSparseImageMemoryRequirements(stream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i), streamPtrPtr);
+            reservedmarshal_VkSparseImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -2582,7 +2582,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
             {
-                unmarshal_VkSparseImageMemoryRequirements(stream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
+                unmarshal_VkSparseImageMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
             }
         }
     }
@@ -2657,7 +2657,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkSparseImageFormatProperties(sFeatureBits, (VkSparseImageFormatProperties*)(pProperties + i), countPtr);
+                    count_VkSparseImageFormatProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -2703,7 +2703,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkSparseImageFormatProperties(stream, (VkSparseImageFormatProperties*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkSparseImageFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -2730,7 +2730,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkSparseImageFormatProperties(stream, (VkSparseImageFormatProperties*)(pProperties + i));
+                unmarshal_VkSparseImageFormatProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties*)(pProperties + i));
             }
         }
     }
@@ -2777,7 +2777,7 @@
         local_pBindInfo = (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindSparseInfo(pool, pBindInfo + i, (VkBindSparseInfo*)(local_pBindInfo + i));
+            deepcopy_VkBindSparseInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfo + i, (VkBindSparseInfo*)(local_pBindInfo + i));
         }
     }
     local_fence = fence;
@@ -2796,7 +2796,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindSparseInfo(sFeatureBits, (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
+            count_VkBindSparseInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
@@ -2817,7 +2817,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindSparseInfo(stream, (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
+        reservedmarshal_VkBindSparseInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
     }
     uint64_t cgen_var_1;
     *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
@@ -2855,13 +2855,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkFenceCreateInfo*)pool->alloc(sizeof(const VkFenceCreateInfo));
-        deepcopy_VkFenceCreateInfo(pool, pCreateInfo, (VkFenceCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkFenceCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkFenceCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -2877,12 +2877,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkFenceCreateInfo(sFeatureBits, (VkFenceCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkFenceCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFenceCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -2899,7 +2899,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkFenceCreateInfo(stream, (VkFenceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkFenceCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFenceCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -2907,7 +2907,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -2952,7 +2952,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -2970,7 +2970,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyFence = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -2996,7 +2996,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkFence((VkFence*)&fence);
     stream->flush();
@@ -3221,13 +3221,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkSemaphoreCreateInfo*)pool->alloc(sizeof(const VkSemaphoreCreateInfo));
-        deepcopy_VkSemaphoreCreateInfo(pool, pCreateInfo, (VkSemaphoreCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkSemaphoreCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkSemaphoreCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -3243,12 +3243,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreCreateInfo(sFeatureBits, (VkSemaphoreCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkSemaphoreCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -3265,7 +3265,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreCreateInfo(stream, (VkSemaphoreCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -3273,7 +3273,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -3318,7 +3318,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -3336,7 +3336,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroySemaphore = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -3362,7 +3362,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkSemaphore((VkSemaphore*)&semaphore);
     stream->flush();
@@ -3395,13 +3395,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkEventCreateInfo*)pool->alloc(sizeof(const VkEventCreateInfo));
-        deepcopy_VkEventCreateInfo(pool, pCreateInfo, (VkEventCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkEventCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkEventCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -3417,12 +3417,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkEventCreateInfo(sFeatureBits, (VkEventCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkEventCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkEventCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -3439,7 +3439,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkEventCreateInfo(stream, (VkEventCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkEventCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkEventCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -3447,7 +3447,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -3492,7 +3492,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -3510,7 +3510,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyEvent = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -3536,7 +3536,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkEvent((VkEvent*)&event);
     stream->flush();
@@ -3719,13 +3719,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkQueryPoolCreateInfo*)pool->alloc(sizeof(const VkQueryPoolCreateInfo));
-        deepcopy_VkQueryPoolCreateInfo(pool, pCreateInfo, (VkQueryPoolCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkQueryPoolCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkQueryPoolCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -3741,12 +3741,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkQueryPoolCreateInfo(sFeatureBits, (VkQueryPoolCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkQueryPoolCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueryPoolCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -3763,7 +3763,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkQueryPoolCreateInfo(stream, (VkQueryPoolCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkQueryPoolCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueryPoolCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -3771,7 +3771,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -3816,7 +3816,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -3834,7 +3834,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyQueryPool = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -3860,7 +3860,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkQueryPool((VkQueryPool*)&queryPool);
     stream->flush();
@@ -3980,13 +3980,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
-        deepcopy_VkBufferCreateInfo(pool, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkBufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -4002,12 +4002,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferCreateInfo(sFeatureBits, (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkBufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -4024,7 +4024,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferCreateInfo(stream, (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkBufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -4032,7 +4032,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -4077,7 +4077,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -4095,7 +4095,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyBuffer = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -4121,7 +4121,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkBuffer((VkBuffer*)&buffer);
     stream->flush();
@@ -4154,13 +4154,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkBufferViewCreateInfo*)pool->alloc(sizeof(const VkBufferViewCreateInfo));
-        deepcopy_VkBufferViewCreateInfo(pool, pCreateInfo, (VkBufferViewCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkBufferViewCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkBufferViewCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -4176,12 +4176,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferViewCreateInfo(sFeatureBits, (VkBufferViewCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkBufferViewCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferViewCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -4198,7 +4198,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferViewCreateInfo(stream, (VkBufferViewCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkBufferViewCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferViewCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -4206,7 +4206,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -4251,7 +4251,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -4269,7 +4269,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyBufferView = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -4295,7 +4295,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkBufferView((VkBufferView*)&bufferView);
     stream->flush();
@@ -4328,13 +4328,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
-        deepcopy_VkImageCreateInfo(pool, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     sResourceTracker->unwrap_VkNativeBufferANDROID(pCreateInfo, local_pCreateInfo);
     local_pAllocator = nullptr;
@@ -4351,12 +4351,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageCreateInfo(sFeatureBits, (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -4373,7 +4373,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageCreateInfo(stream, (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -4381,7 +4381,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -4426,7 +4426,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -4444,7 +4444,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyImage = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -4470,7 +4470,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkImage((VkImage*)&image);
     stream->flush();
@@ -4504,7 +4504,7 @@
     if (pSubresource)
     {
         local_pSubresource = (VkImageSubresource*)pool->alloc(sizeof(const VkImageSubresource));
-        deepcopy_VkImageSubresource(pool, pSubresource, (VkImageSubresource*)(local_pSubresource));
+        deepcopy_VkImageSubresource(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubresource, (VkImageSubresource*)(local_pSubresource));
     }
     if (local_pSubresource)
     {
@@ -4517,8 +4517,8 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkImageSubresource(sFeatureBits, (VkImageSubresource*)(local_pSubresource), countPtr);
-        count_VkSubresourceLayout(sFeatureBits, (VkSubresourceLayout*)(pLayout), countPtr);
+        count_VkImageSubresource(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSubresource*)(local_pSubresource), countPtr);
+        count_VkSubresourceLayout(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubresourceLayout*)(pLayout), countPtr);
     }
     uint32_t packetSize_vkGetImageSubresourceLayout = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageSubresourceLayout);
@@ -4536,9 +4536,9 @@
     *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageSubresource(stream, (VkImageSubresource*)(local_pSubresource), streamPtrPtr);
-    reservedmarshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout), streamPtrPtr);
-    unmarshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
+    reservedmarshal_VkImageSubresource(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSubresource*)(local_pSubresource), streamPtrPtr);
+    reservedmarshal_VkSubresourceLayout(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubresourceLayout*)(pLayout), streamPtrPtr);
+    unmarshal_VkSubresourceLayout(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubresourceLayout*)(pLayout));
     if (pLayout)
     {
         transform_fromhost_VkSubresourceLayout(sResourceTracker, (VkSubresourceLayout*)(pLayout));
@@ -4572,13 +4572,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkImageViewCreateInfo*)pool->alloc(sizeof(const VkImageViewCreateInfo));
-        deepcopy_VkImageViewCreateInfo(pool, pCreateInfo, (VkImageViewCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkImageViewCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkImageViewCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -4594,12 +4594,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageViewCreateInfo(sFeatureBits, (VkImageViewCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkImageViewCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -4616,7 +4616,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageViewCreateInfo(stream, (VkImageViewCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkImageViewCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -4624,7 +4624,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -4669,7 +4669,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -4687,7 +4687,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyImageView = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -4713,7 +4713,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkImageView((VkImageView*)&imageView);
     stream->flush();
@@ -4746,13 +4746,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkShaderModuleCreateInfo*)pool->alloc(sizeof(const VkShaderModuleCreateInfo));
-        deepcopy_VkShaderModuleCreateInfo(pool, pCreateInfo, (VkShaderModuleCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkShaderModuleCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkShaderModuleCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -4768,12 +4768,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkShaderModuleCreateInfo(sFeatureBits, (VkShaderModuleCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkShaderModuleCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkShaderModuleCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -4790,7 +4790,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkShaderModuleCreateInfo(stream, (VkShaderModuleCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkShaderModuleCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkShaderModuleCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -4798,7 +4798,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -4843,7 +4843,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -4861,7 +4861,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyShaderModule = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -4887,7 +4887,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkShaderModule((VkShaderModule*)&shaderModule);
     stream->flush();
@@ -4920,13 +4920,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkPipelineCacheCreateInfo*)pool->alloc(sizeof(const VkPipelineCacheCreateInfo));
-        deepcopy_VkPipelineCacheCreateInfo(pool, pCreateInfo, (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkPipelineCacheCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -4942,12 +4942,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPipelineCacheCreateInfo(sFeatureBits, (VkPipelineCacheCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkPipelineCacheCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineCacheCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -4964,7 +4964,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPipelineCacheCreateInfo(stream, (VkPipelineCacheCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkPipelineCacheCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineCacheCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -4972,7 +4972,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -5017,7 +5017,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -5035,7 +5035,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyPipelineCache = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -5061,7 +5061,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkPipelineCache((VkPipelineCache*)&pipelineCache);
     stream->flush();
@@ -5287,14 +5287,14 @@
         local_pCreateInfos = (VkGraphicsPipelineCreateInfo*)pool->alloc(((createInfoCount)) * sizeof(const VkGraphicsPipelineCreateInfo));
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            deepcopy_VkGraphicsPipelineCreateInfo(pool, pCreateInfos + i, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
+            deepcopy_VkGraphicsPipelineCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
         }
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfos)
@@ -5318,13 +5318,13 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            count_VkGraphicsPipelineCreateInfo(sFeatureBits, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i), countPtr);
+            count_VkGraphicsPipelineCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i), countPtr);
         }
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         if (((createInfoCount)))
         {
@@ -5351,7 +5351,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
     {
-        reservedmarshal_VkGraphicsPipelineCreateInfo(stream, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i), streamPtrPtr);
+        reservedmarshal_VkGraphicsPipelineCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i), streamPtrPtr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
@@ -5360,7 +5360,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     if (((createInfoCount)))
@@ -5423,14 +5423,14 @@
         local_pCreateInfos = (VkComputePipelineCreateInfo*)pool->alloc(((createInfoCount)) * sizeof(const VkComputePipelineCreateInfo));
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            deepcopy_VkComputePipelineCreateInfo(pool, pCreateInfos + i, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
+            deepcopy_VkComputePipelineCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
         }
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfos)
@@ -5454,13 +5454,13 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            count_VkComputePipelineCreateInfo(sFeatureBits, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i), countPtr);
+            count_VkComputePipelineCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i), countPtr);
         }
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         if (((createInfoCount)))
         {
@@ -5487,7 +5487,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
     {
-        reservedmarshal_VkComputePipelineCreateInfo(stream, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i), streamPtrPtr);
+        reservedmarshal_VkComputePipelineCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkComputePipelineCreateInfo*)(local_pCreateInfos + i), streamPtrPtr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
@@ -5496,7 +5496,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     if (((createInfoCount)))
@@ -5551,7 +5551,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -5569,7 +5569,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyPipeline = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -5595,7 +5595,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkPipeline((VkPipeline*)&pipeline);
     stream->flush();
@@ -5628,13 +5628,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkPipelineLayoutCreateInfo*)pool->alloc(sizeof(const VkPipelineLayoutCreateInfo));
-        deepcopy_VkPipelineLayoutCreateInfo(pool, pCreateInfo, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkPipelineLayoutCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -5650,12 +5650,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPipelineLayoutCreateInfo(sFeatureBits, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkPipelineLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -5672,7 +5672,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPipelineLayoutCreateInfo(stream, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkPipelineLayoutCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -5680,7 +5680,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -5725,7 +5725,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -5743,7 +5743,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyPipelineLayout = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -5769,7 +5769,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkPipelineLayout((VkPipelineLayout*)&pipelineLayout);
     stream->flush();
@@ -5802,13 +5802,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkSamplerCreateInfo*)pool->alloc(sizeof(const VkSamplerCreateInfo));
-        deepcopy_VkSamplerCreateInfo(pool, pCreateInfo, (VkSamplerCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkSamplerCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkSamplerCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -5824,12 +5824,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSamplerCreateInfo(sFeatureBits, (VkSamplerCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkSamplerCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSamplerCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -5846,7 +5846,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSamplerCreateInfo(stream, (VkSamplerCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkSamplerCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSamplerCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -5854,7 +5854,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -5899,7 +5899,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -5917,7 +5917,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroySampler = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -5943,7 +5943,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkSampler((VkSampler*)&sampler);
     stream->flush();
@@ -5976,13 +5976,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(sizeof(const VkDescriptorSetLayoutCreateInfo));
-        deepcopy_VkDescriptorSetLayoutCreateInfo(pool, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDescriptorSetLayoutCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -5998,12 +5998,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -6020,7 +6020,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorSetLayoutCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -6028,7 +6028,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -6073,7 +6073,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -6091,7 +6091,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDescriptorSetLayout = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -6117,7 +6117,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDescriptorSetLayout((VkDescriptorSetLayout*)&descriptorSetLayout);
     stream->flush();
@@ -6150,13 +6150,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDescriptorPoolCreateInfo*)pool->alloc(sizeof(const VkDescriptorPoolCreateInfo));
-        deepcopy_VkDescriptorPoolCreateInfo(pool, pCreateInfo, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDescriptorPoolCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -6172,12 +6172,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorPoolCreateInfo(sFeatureBits, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDescriptorPoolCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -6194,7 +6194,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorPoolCreateInfo(stream, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorPoolCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorPoolCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -6202,7 +6202,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -6247,7 +6247,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -6265,7 +6265,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDescriptorPool = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -6291,7 +6291,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDescriptorPool((VkDescriptorPool*)&descriptorPool);
     stream->flush();
@@ -6378,7 +6378,7 @@
     if (pAllocateInfo)
     {
         local_pAllocateInfo = (VkDescriptorSetAllocateInfo*)pool->alloc(sizeof(const VkDescriptorSetAllocateInfo));
-        deepcopy_VkDescriptorSetAllocateInfo(pool, pAllocateInfo, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
+        deepcopy_VkDescriptorSetAllocateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocateInfo, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
     }
     if (local_pAllocateInfo)
     {
@@ -6389,7 +6389,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorSetAllocateInfo(sFeatureBits, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo), countPtr);
+        count_VkDescriptorSetAllocateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo), countPtr);
         if (pAllocateInfo->descriptorSetCount)
         {
             *countPtr += pAllocateInfo->descriptorSetCount * 8;
@@ -6407,7 +6407,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorSetAllocateInfo(stream, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorSetAllocateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo), streamPtrPtr);
     /* is handle, possibly out */;
     if (pAllocateInfo->descriptorSetCount)
     {
@@ -6558,7 +6558,7 @@
         local_pDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
         for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
         {
-            deepcopy_VkWriteDescriptorSet(pool, pDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
+            deepcopy_VkWriteDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
         }
     }
     local_descriptorCopyCount = descriptorCopyCount;
@@ -6568,7 +6568,7 @@
         local_pDescriptorCopies = (VkCopyDescriptorSet*)pool->alloc(((descriptorCopyCount)) * sizeof(const VkCopyDescriptorSet));
         for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
         {
-            deepcopy_VkCopyDescriptorSet(pool, pDescriptorCopies + i, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
+            deepcopy_VkCopyDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDescriptorCopies + i, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
         }
     }
     if (local_pDescriptorWrites)
@@ -6593,12 +6593,12 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
         {
-            count_VkWriteDescriptorSet(sFeatureBits, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), countPtr);
+            count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), countPtr);
         }
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
         {
-            count_VkCopyDescriptorSet(sFeatureBits, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i), countPtr);
+            count_VkCopyDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i), countPtr);
         }
     }
     uint32_t packetSize_vkUpdateDescriptorSets = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -6617,13 +6617,13 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
     {
-        reservedmarshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), streamPtrPtr);
+        reservedmarshal_VkWriteDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint32_t*)&local_descriptorCopyCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
     {
-        reservedmarshal_VkCopyDescriptorSet(stream, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i), streamPtrPtr);
+        reservedmarshal_VkCopyDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyDescriptorSet*)(local_pDescriptorCopies + i), streamPtrPtr);
     }
     stream->flush();
     ++encodeCount;;
@@ -6655,13 +6655,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkFramebufferCreateInfo*)pool->alloc(sizeof(const VkFramebufferCreateInfo));
-        deepcopy_VkFramebufferCreateInfo(pool, pCreateInfo, (VkFramebufferCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkFramebufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkFramebufferCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -6677,12 +6677,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkFramebufferCreateInfo(sFeatureBits, (VkFramebufferCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkFramebufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFramebufferCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -6699,7 +6699,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkFramebufferCreateInfo(stream, (VkFramebufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkFramebufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFramebufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -6707,7 +6707,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -6752,7 +6752,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -6770,7 +6770,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyFramebuffer = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -6796,7 +6796,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkFramebuffer((VkFramebuffer*)&framebuffer);
     stream->flush();
@@ -6829,13 +6829,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkRenderPassCreateInfo*)pool->alloc(sizeof(const VkRenderPassCreateInfo));
-        deepcopy_VkRenderPassCreateInfo(pool, pCreateInfo, (VkRenderPassCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkRenderPassCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkRenderPassCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -6851,12 +6851,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkRenderPassCreateInfo(sFeatureBits, (VkRenderPassCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkRenderPassCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -6873,7 +6873,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkRenderPassCreateInfo(stream, (VkRenderPassCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkRenderPassCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -6881,7 +6881,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -6926,7 +6926,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -6944,7 +6944,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyRenderPass = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -6970,7 +6970,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkRenderPass((VkRenderPass*)&renderPass);
     stream->flush();
@@ -7005,7 +7005,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkExtent2D(sFeatureBits, (VkExtent2D*)(pGranularity), countPtr);
+        count_VkExtent2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity), countPtr);
     }
     uint32_t packetSize_vkGetRenderAreaGranularity = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetRenderAreaGranularity);
@@ -7023,8 +7023,8 @@
     *&cgen_var_1 = get_host_u64_VkRenderPass((*&local_renderPass));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity), streamPtrPtr);
-    unmarshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
+    reservedmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity), streamPtrPtr);
+    unmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(pGranularity));
     if (pGranularity)
     {
         transform_fromhost_VkExtent2D(sResourceTracker, (VkExtent2D*)(pGranularity));
@@ -7058,13 +7058,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkCommandPoolCreateInfo*)pool->alloc(sizeof(const VkCommandPoolCreateInfo));
-        deepcopy_VkCommandPoolCreateInfo(pool, pCreateInfo, (VkCommandPoolCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkCommandPoolCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkCommandPoolCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -7080,12 +7080,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCommandPoolCreateInfo(sFeatureBits, (VkCommandPoolCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkCommandPoolCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandPoolCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -7102,7 +7102,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkCommandPoolCreateInfo(stream, (VkCommandPoolCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkCommandPoolCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandPoolCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -7110,7 +7110,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -7155,7 +7155,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -7173,7 +7173,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyCommandPool = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -7199,7 +7199,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkCommandPool((VkCommandPool*)&commandPool);
     stream->flush();
@@ -7286,7 +7286,7 @@
     if (pAllocateInfo)
     {
         local_pAllocateInfo = (VkCommandBufferAllocateInfo*)pool->alloc(sizeof(const VkCommandBufferAllocateInfo));
-        deepcopy_VkCommandBufferAllocateInfo(pool, pAllocateInfo, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
+        deepcopy_VkCommandBufferAllocateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocateInfo, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
     }
     if (local_pAllocateInfo)
     {
@@ -7297,7 +7297,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCommandBufferAllocateInfo(sFeatureBits, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo), countPtr);
+        count_VkCommandBufferAllocateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo), countPtr);
         if (pAllocateInfo->commandBufferCount)
         {
             *countPtr += pAllocateInfo->commandBufferCount * 8;
@@ -7315,7 +7315,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkCommandBufferAllocateInfo(stream, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo), streamPtrPtr);
+    reservedmarshal_VkCommandBufferAllocateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandBufferAllocateInfo*)(local_pAllocateInfo), streamPtrPtr);
     /* is handle, possibly out */;
     if (pAllocateInfo->commandBufferCount)
     {
@@ -7455,7 +7455,7 @@
     if (pBeginInfo)
     {
         local_pBeginInfo = (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
-        deepcopy_VkCommandBufferBeginInfo(pool, pBeginInfo, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
+        deepcopy_VkCommandBufferBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBeginInfo, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
     }
     if (local_pBeginInfo)
     {
@@ -7466,7 +7466,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCommandBufferBeginInfo(sFeatureBits, (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
+        count_VkCommandBufferBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
     }
     uint32_t packetSize_vkBeginCommandBuffer = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkBeginCommandBuffer -= 8;
@@ -7482,7 +7482,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCommandBufferBeginInfo(stream, (VkCommandBufferBeginInfo*)(local_pBeginInfo), streamPtrPtr);
+    reservedmarshal_VkCommandBufferBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandBufferBeginInfo*)(local_pBeginInfo), streamPtrPtr);
     VkResult vkBeginCommandBuffer_VkResult_return = (VkResult)0;
     stream->read(&vkBeginCommandBuffer_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -7667,7 +7667,7 @@
         local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            deepcopy_VkViewport(pool, pViewports + i, (VkViewport*)(local_pViewports + i));
+            deepcopy_VkViewport(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewports + i, (VkViewport*)(local_pViewports + i));
         }
     }
     if (local_pViewports)
@@ -7686,7 +7686,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            count_VkViewport(sFeatureBits, (VkViewport*)(local_pViewports + i), countPtr);
+            count_VkViewport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViewport*)(local_pViewports + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetViewport = 4 + 4 + count;
@@ -7709,7 +7709,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
     {
-        reservedmarshal_VkViewport(stream, (VkViewport*)(local_pViewports + i), streamPtrPtr);
+        reservedmarshal_VkViewport(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViewport*)(local_pViewports + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -7745,7 +7745,7 @@
         local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
         for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
         {
-            deepcopy_VkRect2D(pool, pScissors + i, (VkRect2D*)(local_pScissors + i));
+            deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pScissors + i, (VkRect2D*)(local_pScissors + i));
         }
     }
     if (local_pScissors)
@@ -7764,7 +7764,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
         {
-            count_VkRect2D(sFeatureBits, (VkRect2D*)(local_pScissors + i), countPtr);
+            count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pScissors + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetScissor = 4 + 4 + count;
@@ -7787,7 +7787,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
     {
-        reservedmarshal_VkRect2D(stream, (VkRect2D*)(local_pScissors + i), streamPtrPtr);
+        reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pScissors + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -8801,7 +8801,7 @@
         local_pRegions = (VkBufferCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferCopy));
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            deepcopy_VkBufferCopy(pool, pRegions + i, (VkBufferCopy*)(local_pRegions + i));
+            deepcopy_VkBufferCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i, (VkBufferCopy*)(local_pRegions + i));
         }
     }
     if (local_pRegions)
@@ -8823,7 +8823,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            count_VkBufferCopy(sFeatureBits, (VkBufferCopy*)(local_pRegions + i), countPtr);
+            count_VkBufferCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferCopy*)(local_pRegions + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdCopyBuffer = 4 + 4 + count;
@@ -8852,7 +8852,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
     {
-        reservedmarshal_VkBufferCopy(stream, (VkBufferCopy*)(local_pRegions + i), streamPtrPtr);
+        reservedmarshal_VkBufferCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferCopy*)(local_pRegions + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -8897,7 +8897,7 @@
         local_pRegions = (VkImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkImageCopy));
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            deepcopy_VkImageCopy(pool, pRegions + i, (VkImageCopy*)(local_pRegions + i));
+            deepcopy_VkImageCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i, (VkImageCopy*)(local_pRegions + i));
         }
     }
     if (local_pRegions)
@@ -8921,7 +8921,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            count_VkImageCopy(sFeatureBits, (VkImageCopy*)(local_pRegions + i), countPtr);
+            count_VkImageCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageCopy*)(local_pRegions + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdCopyImage = 4 + 4 + count;
@@ -8954,7 +8954,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
     {
-        reservedmarshal_VkImageCopy(stream, (VkImageCopy*)(local_pRegions + i), streamPtrPtr);
+        reservedmarshal_VkImageCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageCopy*)(local_pRegions + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9001,7 +9001,7 @@
         local_pRegions = (VkImageBlit*)pool->alloc(((regionCount)) * sizeof(const VkImageBlit));
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            deepcopy_VkImageBlit(pool, pRegions + i, (VkImageBlit*)(local_pRegions + i));
+            deepcopy_VkImageBlit(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i, (VkImageBlit*)(local_pRegions + i));
         }
     }
     local_filter = filter;
@@ -9026,7 +9026,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            count_VkImageBlit(sFeatureBits, (VkImageBlit*)(local_pRegions + i), countPtr);
+            count_VkImageBlit(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageBlit*)(local_pRegions + i), countPtr);
         }
         *countPtr += sizeof(VkFilter);
     }
@@ -9060,7 +9060,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
     {
-        reservedmarshal_VkImageBlit(stream, (VkImageBlit*)(local_pRegions + i), streamPtrPtr);
+        reservedmarshal_VkImageBlit(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageBlit*)(local_pRegions + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (VkFilter*)&local_filter, sizeof(VkFilter));
     *streamPtrPtr += sizeof(VkFilter);
@@ -9104,7 +9104,7 @@
         local_pRegions = (VkBufferImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferImageCopy));
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            deepcopy_VkBufferImageCopy(pool, pRegions + i, (VkBufferImageCopy*)(local_pRegions + i));
+            deepcopy_VkBufferImageCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i, (VkBufferImageCopy*)(local_pRegions + i));
         }
     }
     if (local_pRegions)
@@ -9127,7 +9127,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            count_VkBufferImageCopy(sFeatureBits, (VkBufferImageCopy*)(local_pRegions + i), countPtr);
+            count_VkBufferImageCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferImageCopy*)(local_pRegions + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdCopyBufferToImage = 4 + 4 + count;
@@ -9158,7 +9158,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
     {
-        reservedmarshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i), streamPtrPtr);
+        reservedmarshal_VkBufferImageCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferImageCopy*)(local_pRegions + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9200,7 +9200,7 @@
         local_pRegions = (VkBufferImageCopy*)pool->alloc(((regionCount)) * sizeof(const VkBufferImageCopy));
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            deepcopy_VkBufferImageCopy(pool, pRegions + i, (VkBufferImageCopy*)(local_pRegions + i));
+            deepcopy_VkBufferImageCopy(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i, (VkBufferImageCopy*)(local_pRegions + i));
         }
     }
     if (local_pRegions)
@@ -9223,7 +9223,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            count_VkBufferImageCopy(sFeatureBits, (VkBufferImageCopy*)(local_pRegions + i), countPtr);
+            count_VkBufferImageCopy(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferImageCopy*)(local_pRegions + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdCopyImageToBuffer = 4 + 4 + count;
@@ -9254,7 +9254,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
     {
-        reservedmarshal_VkBufferImageCopy(stream, (VkBufferImageCopy*)(local_pRegions + i), streamPtrPtr);
+        reservedmarshal_VkBufferImageCopy(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferImageCopy*)(local_pRegions + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9427,7 +9427,7 @@
     if (pColor)
     {
         local_pColor = (VkClearColorValue*)pool->alloc(sizeof(const VkClearColorValue));
-        deepcopy_VkClearColorValue(pool, pColor, (VkClearColorValue*)(local_pColor));
+        deepcopy_VkClearColorValue(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pColor, (VkClearColorValue*)(local_pColor));
     }
     local_rangeCount = rangeCount;
     local_pRanges = nullptr;
@@ -9436,7 +9436,7 @@
         local_pRanges = (VkImageSubresourceRange*)pool->alloc(((rangeCount)) * sizeof(const VkImageSubresourceRange));
         for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
         {
-            deepcopy_VkImageSubresourceRange(pool, pRanges + i, (VkImageSubresourceRange*)(local_pRanges + i));
+            deepcopy_VkImageSubresourceRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRanges + i, (VkImageSubresourceRange*)(local_pRanges + i));
         }
     }
     if (local_pColor)
@@ -9458,11 +9458,11 @@
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkImageLayout);
-        count_VkClearColorValue(sFeatureBits, (VkClearColorValue*)(local_pColor), countPtr);
+        count_VkClearColorValue(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearColorValue*)(local_pColor), countPtr);
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
         {
-            count_VkImageSubresourceRange(sFeatureBits, (VkImageSubresourceRange*)(local_pRanges + i), countPtr);
+            count_VkImageSubresourceRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSubresourceRange*)(local_pRanges + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdClearColorImage = 4 + 4 + count;
@@ -9485,12 +9485,12 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
     *streamPtrPtr += sizeof(VkImageLayout);
-    reservedmarshal_VkClearColorValue(stream, (VkClearColorValue*)(local_pColor), streamPtrPtr);
+    reservedmarshal_VkClearColorValue(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearColorValue*)(local_pColor), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint32_t*)&local_rangeCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
     {
-        reservedmarshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i), streamPtrPtr);
+        reservedmarshal_VkImageSubresourceRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSubresourceRange*)(local_pRanges + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9528,7 +9528,7 @@
     if (pDepthStencil)
     {
         local_pDepthStencil = (VkClearDepthStencilValue*)pool->alloc(sizeof(const VkClearDepthStencilValue));
-        deepcopy_VkClearDepthStencilValue(pool, pDepthStencil, (VkClearDepthStencilValue*)(local_pDepthStencil));
+        deepcopy_VkClearDepthStencilValue(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDepthStencil, (VkClearDepthStencilValue*)(local_pDepthStencil));
     }
     local_rangeCount = rangeCount;
     local_pRanges = nullptr;
@@ -9537,7 +9537,7 @@
         local_pRanges = (VkImageSubresourceRange*)pool->alloc(((rangeCount)) * sizeof(const VkImageSubresourceRange));
         for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
         {
-            deepcopy_VkImageSubresourceRange(pool, pRanges + i, (VkImageSubresourceRange*)(local_pRanges + i));
+            deepcopy_VkImageSubresourceRange(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRanges + i, (VkImageSubresourceRange*)(local_pRanges + i));
         }
     }
     if (local_pDepthStencil)
@@ -9559,11 +9559,11 @@
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkImageLayout);
-        count_VkClearDepthStencilValue(sFeatureBits, (VkClearDepthStencilValue*)(local_pDepthStencil), countPtr);
+        count_VkClearDepthStencilValue(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearDepthStencilValue*)(local_pDepthStencil), countPtr);
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
         {
-            count_VkImageSubresourceRange(sFeatureBits, (VkImageSubresourceRange*)(local_pRanges + i), countPtr);
+            count_VkImageSubresourceRange(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSubresourceRange*)(local_pRanges + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdClearDepthStencilImage = 4 + 4 + count;
@@ -9586,12 +9586,12 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkImageLayout*)&local_imageLayout, sizeof(VkImageLayout));
     *streamPtrPtr += sizeof(VkImageLayout);
-    reservedmarshal_VkClearDepthStencilValue(stream, (VkClearDepthStencilValue*)(local_pDepthStencil), streamPtrPtr);
+    reservedmarshal_VkClearDepthStencilValue(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearDepthStencilValue*)(local_pDepthStencil), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint32_t*)&local_rangeCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
     {
-        reservedmarshal_VkImageSubresourceRange(stream, (VkImageSubresourceRange*)(local_pRanges + i), streamPtrPtr);
+        reservedmarshal_VkImageSubresourceRange(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSubresourceRange*)(local_pRanges + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9628,7 +9628,7 @@
         local_pAttachments = (VkClearAttachment*)pool->alloc(((attachmentCount)) * sizeof(const VkClearAttachment));
         for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
         {
-            deepcopy_VkClearAttachment(pool, pAttachments + i, (VkClearAttachment*)(local_pAttachments + i));
+            deepcopy_VkClearAttachment(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAttachments + i, (VkClearAttachment*)(local_pAttachments + i));
         }
     }
     local_rectCount = rectCount;
@@ -9638,7 +9638,7 @@
         local_pRects = (VkClearRect*)pool->alloc(((rectCount)) * sizeof(const VkClearRect));
         for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
         {
-            deepcopy_VkClearRect(pool, pRects + i, (VkClearRect*)(local_pRects + i));
+            deepcopy_VkClearRect(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRects + i, (VkClearRect*)(local_pRects + i));
         }
     }
     if (local_pAttachments)
@@ -9663,12 +9663,12 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
         {
-            count_VkClearAttachment(sFeatureBits, (VkClearAttachment*)(local_pAttachments + i), countPtr);
+            count_VkClearAttachment(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearAttachment*)(local_pAttachments + i), countPtr);
         }
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
         {
-            count_VkClearRect(sFeatureBits, (VkClearRect*)(local_pRects + i), countPtr);
+            count_VkClearRect(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearRect*)(local_pRects + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdClearAttachments = 4 + 4 + count;
@@ -9689,13 +9689,13 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
     {
-        reservedmarshal_VkClearAttachment(stream, (VkClearAttachment*)(local_pAttachments + i), streamPtrPtr);
+        reservedmarshal_VkClearAttachment(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearAttachment*)(local_pAttachments + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint32_t*)&local_rectCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
     {
-        reservedmarshal_VkClearRect(stream, (VkClearRect*)(local_pRects + i), streamPtrPtr);
+        reservedmarshal_VkClearRect(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkClearRect*)(local_pRects + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9740,7 +9740,7 @@
         local_pRegions = (VkImageResolve*)pool->alloc(((regionCount)) * sizeof(const VkImageResolve));
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            deepcopy_VkImageResolve(pool, pRegions + i, (VkImageResolve*)(local_pRegions + i));
+            deepcopy_VkImageResolve(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRegions + i, (VkImageResolve*)(local_pRegions + i));
         }
     }
     if (local_pRegions)
@@ -9764,7 +9764,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            count_VkImageResolve(sFeatureBits, (VkImageResolve*)(local_pRegions + i), countPtr);
+            count_VkImageResolve(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageResolve*)(local_pRegions + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdResolveImage = 4 + 4 + count;
@@ -9797,7 +9797,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
     {
-        reservedmarshal_VkImageResolve(stream, (VkImageResolve*)(local_pRegions + i), streamPtrPtr);
+        reservedmarshal_VkImageResolve(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageResolve*)(local_pRegions + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -9961,7 +9961,7 @@
         local_pMemoryBarriers = (VkMemoryBarrier*)pool->alloc(((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
         for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
         {
-            deepcopy_VkMemoryBarrier(pool, pMemoryBarriers + i, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
+            deepcopy_VkMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryBarriers + i, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
         }
     }
     local_bufferMemoryBarrierCount = bufferMemoryBarrierCount;
@@ -9971,7 +9971,7 @@
         local_pBufferMemoryBarriers = (VkBufferMemoryBarrier*)pool->alloc(((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
         for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
         {
-            deepcopy_VkBufferMemoryBarrier(pool, pBufferMemoryBarriers + i, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
+            deepcopy_VkBufferMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferMemoryBarriers + i, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
         }
     }
     local_imageMemoryBarrierCount = imageMemoryBarrierCount;
@@ -9981,7 +9981,7 @@
         local_pImageMemoryBarriers = (VkImageMemoryBarrier*)pool->alloc(((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
         for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
         {
-            deepcopy_VkImageMemoryBarrier(pool, pImageMemoryBarriers + i, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
+            deepcopy_VkImageMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageMemoryBarriers + i, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
         }
     }
     if (local_pMemoryBarriers)
@@ -10020,17 +10020,17 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
         {
-            count_VkMemoryBarrier(sFeatureBits, (VkMemoryBarrier*)(local_pMemoryBarriers + i), countPtr);
+            count_VkMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryBarrier*)(local_pMemoryBarriers + i), countPtr);
         }
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
         {
-            count_VkBufferMemoryBarrier(sFeatureBits, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), countPtr);
+            count_VkBufferMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), countPtr);
         }
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
         {
-            count_VkImageMemoryBarrier(sFeatureBits, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), countPtr);
+            count_VkImageMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdWaitEvents = 4 + 4 + count;
@@ -10067,19 +10067,19 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
     {
-        reservedmarshal_VkMemoryBarrier(stream, (VkMemoryBarrier*)(local_pMemoryBarriers + i), streamPtrPtr);
+        reservedmarshal_VkMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryBarrier*)(local_pMemoryBarriers + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
     {
-        reservedmarshal_VkBufferMemoryBarrier(stream, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), streamPtrPtr);
+        reservedmarshal_VkBufferMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
     {
-        reservedmarshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), streamPtrPtr);
+        reservedmarshal_VkImageMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -10129,7 +10129,7 @@
         local_pMemoryBarriers = (VkMemoryBarrier*)pool->alloc(((memoryBarrierCount)) * sizeof(const VkMemoryBarrier));
         for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
         {
-            deepcopy_VkMemoryBarrier(pool, pMemoryBarriers + i, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
+            deepcopy_VkMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMemoryBarriers + i, (VkMemoryBarrier*)(local_pMemoryBarriers + i));
         }
     }
     local_bufferMemoryBarrierCount = bufferMemoryBarrierCount;
@@ -10139,7 +10139,7 @@
         local_pBufferMemoryBarriers = (VkBufferMemoryBarrier*)pool->alloc(((bufferMemoryBarrierCount)) * sizeof(const VkBufferMemoryBarrier));
         for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
         {
-            deepcopy_VkBufferMemoryBarrier(pool, pBufferMemoryBarriers + i, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
+            deepcopy_VkBufferMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferMemoryBarriers + i, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
         }
     }
     local_imageMemoryBarrierCount = imageMemoryBarrierCount;
@@ -10149,7 +10149,7 @@
         local_pImageMemoryBarriers = (VkImageMemoryBarrier*)pool->alloc(((imageMemoryBarrierCount)) * sizeof(const VkImageMemoryBarrier));
         for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
         {
-            deepcopy_VkImageMemoryBarrier(pool, pImageMemoryBarriers + i, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
+            deepcopy_VkImageMemoryBarrier(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageMemoryBarriers + i, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
         }
     }
     if (local_pMemoryBarriers)
@@ -10184,17 +10184,17 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
         {
-            count_VkMemoryBarrier(sFeatureBits, (VkMemoryBarrier*)(local_pMemoryBarriers + i), countPtr);
+            count_VkMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryBarrier*)(local_pMemoryBarriers + i), countPtr);
         }
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
         {
-            count_VkBufferMemoryBarrier(sFeatureBits, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), countPtr);
+            count_VkBufferMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), countPtr);
         }
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
         {
-            count_VkImageMemoryBarrier(sFeatureBits, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), countPtr);
+            count_VkImageMemoryBarrier(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdPipelineBarrier = 4 + 4 + count;
@@ -10221,19 +10221,19 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
     {
-        reservedmarshal_VkMemoryBarrier(stream, (VkMemoryBarrier*)(local_pMemoryBarriers + i), streamPtrPtr);
+        reservedmarshal_VkMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryBarrier*)(local_pMemoryBarriers + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint32_t*)&local_bufferMemoryBarrierCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
     {
-        reservedmarshal_VkBufferMemoryBarrier(stream, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), streamPtrPtr);
+        reservedmarshal_VkBufferMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint32_t*)&local_imageMemoryBarrierCount, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
     {
-        reservedmarshal_VkImageMemoryBarrier(stream, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), streamPtrPtr);
+        reservedmarshal_VkImageMemoryBarrier(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -10663,7 +10663,7 @@
     if (pRenderPassBegin)
     {
         local_pRenderPassBegin = (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
-        deepcopy_VkRenderPassBeginInfo(pool, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
+        deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     }
     local_contents = contents;
     if (local_pRenderPassBegin)
@@ -10675,7 +10675,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkRenderPassBeginInfo(sFeatureBits, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
+        count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
         *countPtr += sizeof(VkSubpassContents);
     }
     uint32_t packetSize_vkCmdBeginRenderPass = 4 + 4 + count;
@@ -10692,7 +10692,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), streamPtrPtr);
+    reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), streamPtrPtr);
     memcpy(*streamPtrPtr, (VkSubpassContents*)&local_contents, sizeof(VkSubpassContents));
     *streamPtrPtr += sizeof(VkSubpassContents);
     ++encodeCount;;
@@ -10915,7 +10915,7 @@
         local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindBufferMemoryInfo(pool, pBindInfos + i, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
+            deepcopy_VkBindBufferMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
         }
     }
     if (local_pBindInfos)
@@ -10933,7 +10933,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindBufferMemoryInfo(sFeatureBits, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
+            count_VkBindBufferMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
         }
     }
     uint32_t packetSize_vkBindBufferMemory2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -10952,7 +10952,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindBufferMemoryInfo(stream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
+        reservedmarshal_VkBindBufferMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
     }
     VkResult vkBindBufferMemory2_VkResult_return = (VkResult)0;
     stream->read(&vkBindBufferMemory2_VkResult_return, sizeof(VkResult));
@@ -10988,7 +10988,7 @@
         local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindImageMemoryInfo));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindImageMemoryInfo(pool, pBindInfos + i, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
+            deepcopy_VkBindImageMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
         }
     }
     if (local_pBindInfos)
@@ -11006,7 +11006,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindImageMemoryInfo(sFeatureBits, (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
+            count_VkBindImageMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
         }
     }
     uint32_t packetSize_vkBindImageMemory2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -11025,7 +11025,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindImageMemoryInfo(stream, (VkBindImageMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
+        reservedmarshal_VkBindImageMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindImageMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
     }
     VkResult vkBindImageMemory2_VkResult_return = (VkResult)0;
     stream->read(&vkBindImageMemory2_VkResult_return, sizeof(VkResult));
@@ -11254,7 +11254,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
                 {
-                    count_VkPhysicalDeviceGroupProperties(sFeatureBits, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), countPtr);
+                    count_VkPhysicalDeviceGroupProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), countPtr);
                 }
             }
         }
@@ -11290,7 +11290,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
         {
-            reservedmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), streamPtrPtr);
+            reservedmarshal_VkPhysicalDeviceGroupProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -11317,7 +11317,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
             {
-                unmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
+                unmarshal_VkPhysicalDeviceGroupProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
             }
         }
     }
@@ -11361,7 +11361,7 @@
     if (pInfo)
     {
         local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageMemoryRequirementsInfo2));
-        deepcopy_VkImageMemoryRequirementsInfo2(pool, pInfo, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
+        deepcopy_VkImageMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -11372,8 +11372,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageMemoryRequirementsInfo2(sFeatureBits, (VkImageMemoryRequirementsInfo2*)(local_pInfo), countPtr);
-        count_VkMemoryRequirements2(sFeatureBits, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
+        count_VkImageMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryRequirementsInfo2*)(local_pInfo), countPtr);
+        count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetImageMemoryRequirements2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements2);
@@ -11387,9 +11387,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
-    reservedmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    reservedmarshal_VkImageMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements2(sResourceTracker, (VkMemoryRequirements2*)(pMemoryRequirements));
@@ -11421,7 +11421,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkBufferMemoryRequirementsInfo2));
-        deepcopy_VkBufferMemoryRequirementsInfo2(pool, pInfo, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
+        deepcopy_VkBufferMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -11432,8 +11432,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferMemoryRequirementsInfo2(sFeatureBits, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), countPtr);
-        count_VkMemoryRequirements2(sFeatureBits, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
+        count_VkBufferMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), countPtr);
+        count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetBufferMemoryRequirements2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements2);
@@ -11447,9 +11447,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
-    reservedmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements2(sResourceTracker, (VkMemoryRequirements2*)(pMemoryRequirements));
@@ -11482,7 +11482,7 @@
     if (pInfo)
     {
         local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageSparseMemoryRequirementsInfo2));
-        deepcopy_VkImageSparseMemoryRequirementsInfo2(pool, pInfo, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
+        deepcopy_VkImageSparseMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -11493,7 +11493,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageSparseMemoryRequirementsInfo2(sFeatureBits, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
+        count_VkImageSparseMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pSparseMemoryRequirementCount)
@@ -11508,7 +11508,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
                 {
-                    count_VkSparseImageMemoryRequirements2(sFeatureBits, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), countPtr);
+                    count_VkSparseImageMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), countPtr);
                 }
             }
         }
@@ -11525,7 +11525,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageSparseMemoryRequirementsInfo2(stream, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkImageSparseMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -11545,7 +11545,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
         {
-            reservedmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
+            reservedmarshal_VkSparseImageMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -11572,7 +11572,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
             {
-                unmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
+                unmarshal_VkSparseImageMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
             }
         }
     }
@@ -11612,7 +11612,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceFeatures2(sFeatureBits, (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
+        count_VkPhysicalDeviceFeatures2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceFeatures2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures2);
@@ -11626,8 +11626,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
+    reservedmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures));
     if (pFeatures)
     {
         transform_fromhost_VkPhysicalDeviceFeatures2(sResourceTracker, (VkPhysicalDeviceFeatures2*)(pFeatures));
@@ -11658,7 +11658,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceProperties2(sFeatureBits, (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
+        count_VkPhysicalDeviceProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceProperties2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties2);
@@ -11672,8 +11672,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
+    reservedmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties2*)(pProperties), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties2*)(pProperties));
     if (pProperties)
     {
         transform_fromhost_VkPhysicalDeviceProperties2(sResourceTracker, (VkPhysicalDeviceProperties2*)(pProperties));
@@ -11709,7 +11709,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkFormat);
-        count_VkFormatProperties2(sFeatureBits, (VkFormatProperties2*)(pFormatProperties), countPtr);
+        count_VkFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties2*)(pFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties2);
@@ -11725,8 +11725,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
     *streamPtrPtr += sizeof(VkFormat);
-    reservedmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
-    unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
+    reservedmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
+    unmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties2*)(pFormatProperties));
     if (pFormatProperties)
     {
         transform_fromhost_VkFormatProperties2(sResourceTracker, (VkFormatProperties2*)(pFormatProperties));
@@ -11758,7 +11758,7 @@
     if (pImageFormatInfo)
     {
         local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceImageFormatInfo2));
-        deepcopy_VkPhysicalDeviceImageFormatInfo2(pool, pImageFormatInfo, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
+        deepcopy_VkPhysicalDeviceImageFormatInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageFormatInfo, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
     }
     if (local_pImageFormatInfo)
     {
@@ -11769,8 +11769,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceImageFormatInfo2(sFeatureBits, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
-        count_VkImageFormatProperties2(sFeatureBits, (VkImageFormatProperties2*)(pImageFormatProperties), countPtr);
+        count_VkPhysicalDeviceImageFormatInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
+        count_VkImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties2*)(pImageFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties2);
@@ -11784,9 +11784,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
-    reservedmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties), streamPtrPtr);
-    unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
+    reservedmarshal_VkPhysicalDeviceImageFormatInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
+    reservedmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties2*)(pImageFormatProperties), streamPtrPtr);
+    unmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties2*)(pImageFormatProperties));
     if (pImageFormatProperties)
     {
         transform_fromhost_VkImageFormatProperties2(sResourceTracker, (VkImageFormatProperties2*)(pImageFormatProperties));
@@ -11835,7 +11835,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
                 {
-                    count_VkQueueFamilyProperties2(sFeatureBits, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
+                    count_VkQueueFamilyProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
                 }
             }
         }
@@ -11871,7 +11871,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
         {
-            reservedmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
+            reservedmarshal_VkQueueFamilyProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -11898,7 +11898,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
             {
-                unmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
+                unmarshal_VkQueueFamilyProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
             }
         }
     }
@@ -11938,7 +11938,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceMemoryProperties2(sFeatureBits, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
+        count_VkPhysicalDeviceMemoryProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2 = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties2);
@@ -11952,8 +11952,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
+    reservedmarshal_VkPhysicalDeviceMemoryProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceMemoryProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
     if (pMemoryProperties)
     {
         transform_fromhost_VkPhysicalDeviceMemoryProperties2(sResourceTracker, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
@@ -11987,7 +11987,7 @@
     if (pFormatInfo)
     {
         local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
-        deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(pool, pFormatInfo, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
+        deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pFormatInfo, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
     }
     if (local_pFormatInfo)
     {
@@ -11998,7 +11998,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceSparseImageFormatInfo2(sFeatureBits, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
+        count_VkPhysicalDeviceSparseImageFormatInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pPropertyCount)
@@ -12013,7 +12013,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkSparseImageFormatProperties2(sFeatureBits, (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
+                    count_VkSparseImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -12030,7 +12030,7 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(stream, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
+    reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -12050,7 +12050,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkSparseImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -12077,7 +12077,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
+                unmarshal_VkSparseImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties2*)(pProperties + i));
             }
         }
     }
@@ -12172,7 +12172,7 @@
     if (pQueueInfo)
     {
         local_pQueueInfo = (VkDeviceQueueInfo2*)pool->alloc(sizeof(const VkDeviceQueueInfo2));
-        deepcopy_VkDeviceQueueInfo2(pool, pQueueInfo, (VkDeviceQueueInfo2*)(local_pQueueInfo));
+        deepcopy_VkDeviceQueueInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pQueueInfo, (VkDeviceQueueInfo2*)(local_pQueueInfo));
     }
     if (local_pQueueInfo)
     {
@@ -12183,7 +12183,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDeviceQueueInfo2(sFeatureBits, (VkDeviceQueueInfo2*)(local_pQueueInfo), countPtr);
+        count_VkDeviceQueueInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceQueueInfo2*)(local_pQueueInfo), countPtr);
         uint64_t cgen_var_1;
         *countPtr += 8;
     }
@@ -12199,7 +12199,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDeviceQueueInfo2(stream, (VkDeviceQueueInfo2*)(local_pQueueInfo), streamPtrPtr);
+    reservedmarshal_VkDeviceQueueInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceQueueInfo2*)(local_pQueueInfo), streamPtrPtr);
     /* is handle, possibly out */;
     uint64_t cgen_var_1;
     *&cgen_var_1 = (uint64_t)((*pQueue));
@@ -12238,13 +12238,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(sizeof(const VkSamplerYcbcrConversionCreateInfo));
-        deepcopy_VkSamplerYcbcrConversionCreateInfo(pool, pCreateInfo, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkSamplerYcbcrConversionCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -12260,12 +12260,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSamplerYcbcrConversionCreateInfo(sFeatureBits, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkSamplerYcbcrConversionCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -12282,7 +12282,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSamplerYcbcrConversionCreateInfo(stream, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkSamplerYcbcrConversionCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -12290,7 +12290,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -12335,7 +12335,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -12353,7 +12353,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroySamplerYcbcrConversion = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -12379,7 +12379,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
     stream->flush();
@@ -12412,13 +12412,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(sizeof(const VkDescriptorUpdateTemplateCreateInfo));
-        deepcopy_VkDescriptorUpdateTemplateCreateInfo(pool, pCreateInfo, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDescriptorUpdateTemplateCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -12434,12 +12434,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorUpdateTemplateCreateInfo(sFeatureBits, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDescriptorUpdateTemplateCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -12456,7 +12456,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(stream, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -12464,7 +12464,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -12510,7 +12510,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -12528,7 +12528,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDescriptorUpdateTemplate = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -12554,7 +12554,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
     stream->flush();
@@ -12662,7 +12662,7 @@
     if (pExternalBufferInfo)
     {
         local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalBufferInfo));
-        deepcopy_VkPhysicalDeviceExternalBufferInfo(pool, pExternalBufferInfo, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
+        deepcopy_VkPhysicalDeviceExternalBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalBufferInfo, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
     }
     if (local_pExternalBufferInfo)
     {
@@ -12674,8 +12674,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceExternalBufferInfo(sFeatureBits, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
-        count_VkExternalBufferProperties(sFeatureBits, (VkExternalBufferProperties*)(pExternalBufferProperties), countPtr);
+        count_VkPhysicalDeviceExternalBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
+        count_VkExternalBufferProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalBufferProperties*)(pExternalBufferProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalBufferProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalBufferProperties);
@@ -12689,9 +12689,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
-    reservedmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
-    unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
+    reservedmarshal_VkPhysicalDeviceExternalBufferInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
+    reservedmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
+    unmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalBufferProperties*)(pExternalBufferProperties));
     if (pExternalBufferProperties)
     {
         sResourceTracker->transformImpl_VkExternalBufferProperties_fromhost(pExternalBufferProperties, 1);
@@ -12724,7 +12724,7 @@
     if (pExternalFenceInfo)
     {
         local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalFenceInfo));
-        deepcopy_VkPhysicalDeviceExternalFenceInfo(pool, pExternalFenceInfo, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
+        deepcopy_VkPhysicalDeviceExternalFenceInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalFenceInfo, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
     }
     if (local_pExternalFenceInfo)
     {
@@ -12735,8 +12735,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceExternalFenceInfo(sFeatureBits, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
-        count_VkExternalFenceProperties(sFeatureBits, (VkExternalFenceProperties*)(pExternalFenceProperties), countPtr);
+        count_VkPhysicalDeviceExternalFenceInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
+        count_VkExternalFenceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalFenceProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalFenceProperties);
@@ -12750,9 +12750,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
-    reservedmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties), streamPtrPtr);
-    unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
+    reservedmarshal_VkPhysicalDeviceExternalFenceInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
+    reservedmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties), streamPtrPtr);
+    unmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties));
     if (pExternalFenceProperties)
     {
         transform_fromhost_VkExternalFenceProperties(sResourceTracker, (VkExternalFenceProperties*)(pExternalFenceProperties));
@@ -12784,7 +12784,7 @@
     if (pExternalSemaphoreInfo)
     {
         local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
-        deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(pool, pExternalSemaphoreInfo, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
+        deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalSemaphoreInfo, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
     }
     if (local_pExternalSemaphoreInfo)
     {
@@ -12795,8 +12795,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceExternalSemaphoreInfo(sFeatureBits, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
-        count_VkExternalSemaphoreProperties(sFeatureBits, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
+        count_VkPhysicalDeviceExternalSemaphoreInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
+        count_VkExternalSemaphoreProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalSemaphoreProperties);
@@ -12810,9 +12810,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
-    reservedmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
-    unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
+    reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
+    reservedmarshal_VkExternalSemaphoreProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
+    unmarshal_VkExternalSemaphoreProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
     if (pExternalSemaphoreProperties)
     {
         transform_fromhost_VkExternalSemaphoreProperties(sResourceTracker, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
@@ -12845,7 +12845,7 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(sizeof(const VkDescriptorSetLayoutCreateInfo));
-        deepcopy_VkDescriptorSetLayoutCreateInfo(pool, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDescriptorSetLayoutCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     }
     if (local_pCreateInfo)
     {
@@ -12856,8 +12856,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), countPtr);
-        count_VkDescriptorSetLayoutSupport(sFeatureBits, (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
+        count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDescriptorSetLayoutSupport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
     }
     uint32_t packetSize_vkGetDescriptorSetLayoutSupport = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDescriptorSetLayoutSupport);
@@ -12871,9 +12871,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
-    reservedmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport), streamPtrPtr);
-    unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
+    reservedmarshal_VkDescriptorSetLayoutCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutSupport*)(pSupport), streamPtrPtr);
+    unmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutSupport*)(pSupport));
     if (pSupport)
     {
         transform_fromhost_VkDescriptorSetLayoutSupport(sResourceTracker, (VkDescriptorSetLayoutSupport*)(pSupport));
@@ -13073,13 +13073,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkRenderPassCreateInfo2*)pool->alloc(sizeof(const VkRenderPassCreateInfo2));
-        deepcopy_VkRenderPassCreateInfo2(pool, pCreateInfo, (VkRenderPassCreateInfo2*)(local_pCreateInfo));
+        deepcopy_VkRenderPassCreateInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkRenderPassCreateInfo2*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -13095,12 +13095,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkRenderPassCreateInfo2(sFeatureBits, (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
+        count_VkRenderPassCreateInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -13117,7 +13117,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkRenderPassCreateInfo2(stream, (VkRenderPassCreateInfo2*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkRenderPassCreateInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassCreateInfo2*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -13125,7 +13125,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -13167,13 +13167,13 @@
     if (pRenderPassBegin)
     {
         local_pRenderPassBegin = (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
-        deepcopy_VkRenderPassBeginInfo(pool, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
+        deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     }
     local_pSubpassBeginInfo = nullptr;
     if (pSubpassBeginInfo)
     {
         local_pSubpassBeginInfo = (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
-        deepcopy_VkSubpassBeginInfo(pool, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
+        deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
     }
     if (local_pRenderPassBegin)
     {
@@ -13188,8 +13188,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkRenderPassBeginInfo(sFeatureBits, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
-        count_VkSubpassBeginInfo(sFeatureBits, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
+        count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
+        count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
     }
     uint32_t packetSize_vkCmdBeginRenderPass2 = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderPass2 -= 8;
@@ -13205,8 +13205,8 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), streamPtrPtr);
-    reservedmarshal_VkSubpassBeginInfo(stream, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
+    reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), streamPtrPtr);
+    reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -13235,13 +13235,13 @@
     if (pSubpassBeginInfo)
     {
         local_pSubpassBeginInfo = (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
-        deepcopy_VkSubpassBeginInfo(pool, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
+        deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
     }
     local_pSubpassEndInfo = nullptr;
     if (pSubpassEndInfo)
     {
         local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
-        deepcopy_VkSubpassEndInfo(pool, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
+        deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
     }
     if (local_pSubpassBeginInfo)
     {
@@ -13256,8 +13256,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSubpassBeginInfo(sFeatureBits, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
-        count_VkSubpassEndInfo(sFeatureBits, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
+        count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
+        count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
     }
     uint32_t packetSize_vkCmdNextSubpass2 = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdNextSubpass2 -= 8;
@@ -13273,8 +13273,8 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkSubpassBeginInfo(stream, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
-    reservedmarshal_VkSubpassEndInfo(stream, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
+    reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
+    reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -13301,7 +13301,7 @@
     if (pSubpassEndInfo)
     {
         local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
-        deepcopy_VkSubpassEndInfo(pool, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
+        deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
     }
     if (local_pSubpassEndInfo)
     {
@@ -13312,7 +13312,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSubpassEndInfo(sFeatureBits, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
+        count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
     }
     uint32_t packetSize_vkCmdEndRenderPass2 = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderPass2 -= 8;
@@ -13328,7 +13328,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkSubpassEndInfo(stream, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
+    reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -13472,7 +13472,7 @@
     if (pWaitInfo)
     {
         local_pWaitInfo = (VkSemaphoreWaitInfo*)pool->alloc(sizeof(const VkSemaphoreWaitInfo));
-        deepcopy_VkSemaphoreWaitInfo(pool, pWaitInfo, (VkSemaphoreWaitInfo*)(local_pWaitInfo));
+        deepcopy_VkSemaphoreWaitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pWaitInfo, (VkSemaphoreWaitInfo*)(local_pWaitInfo));
     }
     local_timeout = timeout;
     if (local_pWaitInfo)
@@ -13484,7 +13484,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreWaitInfo(sFeatureBits, (VkSemaphoreWaitInfo*)(local_pWaitInfo), countPtr);
+        count_VkSemaphoreWaitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreWaitInfo*)(local_pWaitInfo), countPtr);
         *countPtr += sizeof(uint64_t);
     }
     uint32_t packetSize_vkWaitSemaphores = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -13499,7 +13499,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreWaitInfo(stream, (VkSemaphoreWaitInfo*)(local_pWaitInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreWaitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreWaitInfo*)(local_pWaitInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint64_t*)&local_timeout, sizeof(uint64_t));
     *streamPtrPtr += sizeof(uint64_t);
     VkResult vkWaitSemaphores_VkResult_return = (VkResult)0;
@@ -13531,7 +13531,7 @@
     if (pSignalInfo)
     {
         local_pSignalInfo = (VkSemaphoreSignalInfo*)pool->alloc(sizeof(const VkSemaphoreSignalInfo));
-        deepcopy_VkSemaphoreSignalInfo(pool, pSignalInfo, (VkSemaphoreSignalInfo*)(local_pSignalInfo));
+        deepcopy_VkSemaphoreSignalInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSignalInfo, (VkSemaphoreSignalInfo*)(local_pSignalInfo));
     }
     if (local_pSignalInfo)
     {
@@ -13542,7 +13542,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreSignalInfo(sFeatureBits, (VkSemaphoreSignalInfo*)(local_pSignalInfo), countPtr);
+        count_VkSemaphoreSignalInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreSignalInfo*)(local_pSignalInfo), countPtr);
     }
     uint32_t packetSize_vkSignalSemaphore = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkSignalSemaphore);
@@ -13556,7 +13556,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreSignalInfo(stream, (VkSemaphoreSignalInfo*)(local_pSignalInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreSignalInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreSignalInfo*)(local_pSignalInfo), streamPtrPtr);
     VkResult vkSignalSemaphore_VkResult_return = (VkResult)0;
     stream->read(&vkSignalSemaphore_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -13586,7 +13586,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
-        deepcopy_VkBufferDeviceAddressInfo(pool, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
+        deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -13597,7 +13597,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferDeviceAddressInfo(sFeatureBits, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
+        count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetBufferDeviceAddress = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferDeviceAddress);
@@ -13611,7 +13611,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferDeviceAddressInfo(stream, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
     VkDeviceAddress vkGetBufferDeviceAddress_VkDeviceAddress_return = (VkDeviceAddress)0;
     stream->read(&vkGetBufferDeviceAddress_VkDeviceAddress_return, sizeof(VkDeviceAddress));
     ++encodeCount;;
@@ -13641,7 +13641,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
-        deepcopy_VkBufferDeviceAddressInfo(pool, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
+        deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -13652,7 +13652,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferDeviceAddressInfo(sFeatureBits, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
+        count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetBufferOpaqueCaptureAddress = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferOpaqueCaptureAddress);
@@ -13666,7 +13666,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferDeviceAddressInfo(stream, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
     uint64_t vkGetBufferOpaqueCaptureAddress_uint64_t_return = (uint64_t)0;
     stream->read(&vkGetBufferOpaqueCaptureAddress_uint64_t_return, sizeof(uint64_t));
     ++encodeCount;;
@@ -13696,7 +13696,7 @@
     if (pInfo)
     {
         local_pInfo = (VkDeviceMemoryOpaqueCaptureAddressInfo*)pool->alloc(sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
-        deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(pool, pInfo, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
+        deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -13707,7 +13707,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDeviceMemoryOpaqueCaptureAddressInfo(sFeatureBits, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
+        count_VkDeviceMemoryOpaqueCaptureAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetDeviceMemoryOpaqueCaptureAddress = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceMemoryOpaqueCaptureAddress);
@@ -13721,7 +13721,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(stream, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), streamPtrPtr);
     uint64_t vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return = (uint64_t)0;
     stream->read(&vkGetDeviceMemoryOpaqueCaptureAddress_uint64_t_return, sizeof(uint64_t));
     ++encodeCount;;
@@ -13756,7 +13756,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -13774,7 +13774,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroySurfaceKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -13800,7 +13800,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkSurfaceKHR((VkSurfaceKHR*)&surface);
     stream->flush();
@@ -13896,7 +13896,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkSurfaceCapabilitiesKHR(sFeatureBits, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities), countPtr);
+        count_VkSurfaceCapabilitiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceSurfaceCapabilitiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceSurfaceCapabilitiesKHR);
@@ -13914,8 +13914,8 @@
     *&cgen_var_1 = get_host_u64_VkSurfaceKHR((*&local_surface));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities), streamPtrPtr);
-    unmarshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
+    reservedmarshal_VkSurfaceCapabilitiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities), streamPtrPtr);
+    unmarshal_VkSurfaceCapabilitiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
     if (pSurfaceCapabilities)
     {
         transform_fromhost_VkSurfaceCapabilitiesKHR(sResourceTracker, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
@@ -13969,7 +13969,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
                 {
-                    count_VkSurfaceFormatKHR(sFeatureBits, (VkSurfaceFormatKHR*)(pSurfaceFormats + i), countPtr);
+                    count_VkSurfaceFormatKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceFormatKHR*)(pSurfaceFormats + i), countPtr);
                 }
             }
         }
@@ -14009,7 +14009,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
         {
-            reservedmarshal_VkSurfaceFormatKHR(stream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i), streamPtrPtr);
+            reservedmarshal_VkSurfaceFormatKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceFormatKHR*)(pSurfaceFormats + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -14036,7 +14036,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
             {
-                unmarshal_VkSurfaceFormatKHR(stream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
+                unmarshal_VkSurfaceFormatKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
             }
         }
     }
@@ -14193,13 +14193,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkSwapchainCreateInfoKHR*)pool->alloc(sizeof(const VkSwapchainCreateInfoKHR));
-        deepcopy_VkSwapchainCreateInfoKHR(pool, pCreateInfo, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkSwapchainCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -14215,12 +14215,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSwapchainCreateInfoKHR(sFeatureBits, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkSwapchainCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -14237,7 +14237,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSwapchainCreateInfoKHR(stream, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkSwapchainCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSwapchainCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -14245,7 +14245,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -14290,7 +14290,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -14308,7 +14308,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroySwapchainKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -14334,7 +14334,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkSwapchainKHR((VkSwapchainKHR*)&swapchain);
     stream->flush();
@@ -14571,7 +14571,7 @@
     if (pPresentInfo)
     {
         local_pPresentInfo = (VkPresentInfoKHR*)pool->alloc(sizeof(const VkPresentInfoKHR));
-        deepcopy_VkPresentInfoKHR(pool, pPresentInfo, (VkPresentInfoKHR*)(local_pPresentInfo));
+        deepcopy_VkPresentInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPresentInfo, (VkPresentInfoKHR*)(local_pPresentInfo));
     }
     if (local_pPresentInfo)
     {
@@ -14582,7 +14582,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPresentInfoKHR(sFeatureBits, (VkPresentInfoKHR*)(local_pPresentInfo), countPtr);
+        count_VkPresentInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPresentInfoKHR*)(local_pPresentInfo), countPtr);
     }
     uint32_t packetSize_vkQueuePresentKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkQueuePresentKHR);
@@ -14596,7 +14596,7 @@
     *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPresentInfoKHR(stream, (VkPresentInfoKHR*)(local_pPresentInfo), streamPtrPtr);
+    reservedmarshal_VkPresentInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPresentInfoKHR*)(local_pPresentInfo), streamPtrPtr);
     VkResult vkQueuePresentKHR_VkResult_return = (VkResult)0;
     stream->read(&vkQueuePresentKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -14626,7 +14626,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDeviceGroupPresentCapabilitiesKHR(sFeatureBits, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities), countPtr);
+        count_VkDeviceGroupPresentCapabilitiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities), countPtr);
     }
     uint32_t packetSize_vkGetDeviceGroupPresentCapabilitiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceGroupPresentCapabilitiesKHR);
@@ -14640,8 +14640,8 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities), streamPtrPtr);
-    unmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
+    reservedmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities), streamPtrPtr);
+    unmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
     if (pDeviceGroupPresentCapabilities)
     {
         transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(sResourceTracker, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
@@ -14773,7 +14773,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
                 {
-                    count_VkRect2D(sFeatureBits, (VkRect2D*)(pRects + i), countPtr);
+                    count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(pRects + i), countPtr);
                 }
             }
         }
@@ -14813,7 +14813,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
         {
-            reservedmarshal_VkRect2D(stream, (VkRect2D*)(pRects + i), streamPtrPtr);
+            reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(pRects + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -14840,7 +14840,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
             {
-                unmarshal_VkRect2D(stream, (VkRect2D*)(pRects + i));
+                unmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(pRects + i));
             }
         }
     }
@@ -14884,7 +14884,7 @@
     if (pAcquireInfo)
     {
         local_pAcquireInfo = (VkAcquireNextImageInfoKHR*)pool->alloc(sizeof(const VkAcquireNextImageInfoKHR));
-        deepcopy_VkAcquireNextImageInfoKHR(pool, pAcquireInfo, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
+        deepcopy_VkAcquireNextImageInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAcquireInfo, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
     }
     if (local_pAcquireInfo)
     {
@@ -14895,7 +14895,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAcquireNextImageInfoKHR(sFeatureBits, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo), countPtr);
+        count_VkAcquireNextImageInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo), countPtr);
         *countPtr += sizeof(uint32_t);
     }
     uint32_t packetSize_vkAcquireNextImage2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -14910,7 +14910,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAcquireNextImageInfoKHR(stream, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo), streamPtrPtr);
+    reservedmarshal_VkAcquireNextImageInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint32_t*)pImageIndex, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     stream->read((uint32_t*)pImageIndex, sizeof(uint32_t));
@@ -14960,7 +14960,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkDisplayPropertiesKHR(sFeatureBits, (VkDisplayPropertiesKHR*)(pProperties + i), countPtr);
+                    count_VkDisplayPropertiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPropertiesKHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -14996,7 +14996,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkDisplayPropertiesKHR(stream, (VkDisplayPropertiesKHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkDisplayPropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPropertiesKHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -15023,7 +15023,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkDisplayPropertiesKHR(stream, (VkDisplayPropertiesKHR*)(pProperties + i));
+                unmarshal_VkDisplayPropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPropertiesKHR*)(pProperties + i));
             }
         }
     }
@@ -15081,7 +15081,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkDisplayPlanePropertiesKHR(sFeatureBits, (VkDisplayPlanePropertiesKHR*)(pProperties + i), countPtr);
+                    count_VkDisplayPlanePropertiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlanePropertiesKHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -15117,7 +15117,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkDisplayPlanePropertiesKHR(stream, (VkDisplayPlanePropertiesKHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkDisplayPlanePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlanePropertiesKHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -15144,7 +15144,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkDisplayPlanePropertiesKHR(stream, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
+                unmarshal_VkDisplayPlanePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
             }
         }
     }
@@ -15332,7 +15332,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkDisplayModePropertiesKHR(sFeatureBits, (VkDisplayModePropertiesKHR*)(pProperties + i), countPtr);
+                    count_VkDisplayModePropertiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModePropertiesKHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -15372,7 +15372,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkDisplayModePropertiesKHR(stream, (VkDisplayModePropertiesKHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkDisplayModePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModePropertiesKHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -15399,7 +15399,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkDisplayModePropertiesKHR(stream, (VkDisplayModePropertiesKHR*)(pProperties + i));
+                unmarshal_VkDisplayModePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModePropertiesKHR*)(pProperties + i));
             }
         }
     }
@@ -15448,13 +15448,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDisplayModeCreateInfoKHR*)pool->alloc(sizeof(const VkDisplayModeCreateInfoKHR));
-        deepcopy_VkDisplayModeCreateInfoKHR(pool, pCreateInfo, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkDisplayModeCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -15472,12 +15472,12 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkDisplayModeCreateInfoKHR(sFeatureBits, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkDisplayModeCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_2;
         *countPtr += 8;
@@ -15498,7 +15498,7 @@
     *&cgen_var_1 = get_host_u64_VkDisplayKHR((*&local_display));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDisplayModeCreateInfoKHR(stream, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDisplayModeCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_2, 8);
@@ -15506,7 +15506,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_3;
@@ -15557,7 +15557,7 @@
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
         *countPtr += sizeof(uint32_t);
-        count_VkDisplayPlaneCapabilitiesKHR(sFeatureBits, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities), countPtr);
+        count_VkDisplayPlaneCapabilitiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities), countPtr);
     }
     uint32_t packetSize_vkGetDisplayPlaneCapabilitiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDisplayPlaneCapabilitiesKHR);
@@ -15577,8 +15577,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (uint32_t*)&local_planeIndex, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
-    reservedmarshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities), streamPtrPtr);
-    unmarshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
+    reservedmarshal_VkDisplayPlaneCapabilitiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities), streamPtrPtr);
+    unmarshal_VkDisplayPlaneCapabilitiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
     if (pCapabilities)
     {
         transform_fromhost_VkDisplayPlaneCapabilitiesKHR(sResourceTracker, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
@@ -15615,13 +15615,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDisplaySurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkDisplaySurfaceCreateInfoKHR));
-        deepcopy_VkDisplaySurfaceCreateInfoKHR(pool, pCreateInfo, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkDisplaySurfaceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -15637,12 +15637,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDisplaySurfaceCreateInfoKHR(sFeatureBits, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkDisplaySurfaceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -15659,7 +15659,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDisplaySurfaceCreateInfoKHR(stream, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDisplaySurfaceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -15667,7 +15667,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -15717,14 +15717,14 @@
         local_pCreateInfos = (VkSwapchainCreateInfoKHR*)pool->alloc(((swapchainCount)) * sizeof(const VkSwapchainCreateInfoKHR));
         for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
         {
-            deepcopy_VkSwapchainCreateInfoKHR(pool, pCreateInfos + i, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
+            deepcopy_VkSwapchainCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
         }
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfos)
@@ -15746,13 +15746,13 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
         {
-            count_VkSwapchainCreateInfoKHR(sFeatureBits, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i), countPtr);
+            count_VkSwapchainCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i), countPtr);
         }
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         if (((swapchainCount)))
         {
@@ -15775,7 +15775,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
     {
-        reservedmarshal_VkSwapchainCreateInfoKHR(stream, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i), streamPtrPtr);
+        reservedmarshal_VkSwapchainCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i), streamPtrPtr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
@@ -15784,7 +15784,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     if (((swapchainCount)))
@@ -15839,13 +15839,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkXlibSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkXlibSurfaceCreateInfoKHR));
-        deepcopy_VkXlibSurfaceCreateInfoKHR(pool, pCreateInfo, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkXlibSurfaceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -15861,12 +15861,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkXlibSurfaceCreateInfoKHR(sFeatureBits, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkXlibSurfaceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -15883,7 +15883,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkXlibSurfaceCreateInfoKHR(stream, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkXlibSurfaceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -15891,7 +15891,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -15994,13 +15994,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkXcbSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkXcbSurfaceCreateInfoKHR));
-        deepcopy_VkXcbSurfaceCreateInfoKHR(pool, pCreateInfo, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkXcbSurfaceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -16016,12 +16016,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkXcbSurfaceCreateInfoKHR(sFeatureBits, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkXcbSurfaceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -16038,7 +16038,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkXcbSurfaceCreateInfoKHR(stream, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkXcbSurfaceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -16046,7 +16046,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -16149,13 +16149,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkWaylandSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkWaylandSurfaceCreateInfoKHR));
-        deepcopy_VkWaylandSurfaceCreateInfoKHR(pool, pCreateInfo, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkWaylandSurfaceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -16171,12 +16171,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkWaylandSurfaceCreateInfoKHR(sFeatureBits, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkWaylandSurfaceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -16193,7 +16193,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkWaylandSurfaceCreateInfoKHR(stream, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkWaylandSurfaceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -16201,7 +16201,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -16298,13 +16298,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkAndroidSurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkAndroidSurfaceCreateInfoKHR));
-        deepcopy_VkAndroidSurfaceCreateInfoKHR(pool, pCreateInfo, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkAndroidSurfaceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -16320,12 +16320,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAndroidSurfaceCreateInfoKHR(sFeatureBits, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkAndroidSurfaceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -16342,7 +16342,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAndroidSurfaceCreateInfoKHR(stream, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkAndroidSurfaceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -16350,7 +16350,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -16395,13 +16395,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkWin32SurfaceCreateInfoKHR*)pool->alloc(sizeof(const VkWin32SurfaceCreateInfoKHR));
-        deepcopy_VkWin32SurfaceCreateInfoKHR(pool, pCreateInfo, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkWin32SurfaceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -16417,12 +16417,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkWin32SurfaceCreateInfoKHR(sFeatureBits, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkWin32SurfaceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -16439,7 +16439,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkWin32SurfaceCreateInfoKHR(stream, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkWin32SurfaceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -16447,7 +16447,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -16540,7 +16540,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceFeatures2(sFeatureBits, (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
+        count_VkPhysicalDeviceFeatures2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceFeatures2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFeatures2KHR);
@@ -16554,8 +16554,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
+    reservedmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceFeatures2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFeatures2*)(pFeatures));
     if (pFeatures)
     {
         transform_fromhost_VkPhysicalDeviceFeatures2(sResourceTracker, (VkPhysicalDeviceFeatures2*)(pFeatures));
@@ -16586,7 +16586,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceProperties2(sFeatureBits, (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
+        count_VkPhysicalDeviceProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties2*)(pProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceProperties2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceProperties2KHR);
@@ -16600,8 +16600,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
+    reservedmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties2*)(pProperties), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceProperties2*)(pProperties));
     if (pProperties)
     {
         transform_fromhost_VkPhysicalDeviceProperties2(sResourceTracker, (VkPhysicalDeviceProperties2*)(pProperties));
@@ -16637,7 +16637,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkFormat);
-        count_VkFormatProperties2(sFeatureBits, (VkFormatProperties2*)(pFormatProperties), countPtr);
+        count_VkFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties2*)(pFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceFormatProperties2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceFormatProperties2KHR);
@@ -16653,8 +16653,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkFormat*)&local_format, sizeof(VkFormat));
     *streamPtrPtr += sizeof(VkFormat);
-    reservedmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
-    unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
+    reservedmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties2*)(pFormatProperties), streamPtrPtr);
+    unmarshal_VkFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFormatProperties2*)(pFormatProperties));
     if (pFormatProperties)
     {
         transform_fromhost_VkFormatProperties2(sResourceTracker, (VkFormatProperties2*)(pFormatProperties));
@@ -16686,7 +16686,7 @@
     if (pImageFormatInfo)
     {
         local_pImageFormatInfo = (VkPhysicalDeviceImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceImageFormatInfo2));
-        deepcopy_VkPhysicalDeviceImageFormatInfo2(pool, pImageFormatInfo, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
+        deepcopy_VkPhysicalDeviceImageFormatInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageFormatInfo, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
     }
     if (local_pImageFormatInfo)
     {
@@ -16697,8 +16697,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceImageFormatInfo2(sFeatureBits, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
-        count_VkImageFormatProperties2(sFeatureBits, (VkImageFormatProperties2*)(pImageFormatProperties), countPtr);
+        count_VkPhysicalDeviceImageFormatInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), countPtr);
+        count_VkImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties2*)(pImageFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceImageFormatProperties2KHR);
@@ -16712,9 +16712,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
-    reservedmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties), streamPtrPtr);
-    unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
+    reservedmarshal_VkPhysicalDeviceImageFormatInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo), streamPtrPtr);
+    reservedmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties2*)(pImageFormatProperties), streamPtrPtr);
+    unmarshal_VkImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageFormatProperties2*)(pImageFormatProperties));
     if (pImageFormatProperties)
     {
         transform_fromhost_VkImageFormatProperties2(sResourceTracker, (VkImageFormatProperties2*)(pImageFormatProperties));
@@ -16763,7 +16763,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
                 {
-                    count_VkQueueFamilyProperties2(sFeatureBits, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
+                    count_VkQueueFamilyProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), countPtr);
                 }
             }
         }
@@ -16799,7 +16799,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
         {
-            reservedmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
+            reservedmarshal_VkQueueFamilyProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -16826,7 +16826,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
             {
-                unmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
+                unmarshal_VkQueueFamilyProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
             }
         }
     }
@@ -16866,7 +16866,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceMemoryProperties2(sFeatureBits, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
+        count_VkPhysicalDeviceMemoryProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceMemoryProperties2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMemoryProperties2KHR);
@@ -16880,8 +16880,8 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), streamPtrPtr);
-    unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
+    reservedmarshal_VkPhysicalDeviceMemoryProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties), streamPtrPtr);
+    unmarshal_VkPhysicalDeviceMemoryProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
     if (pMemoryProperties)
     {
         transform_fromhost_VkPhysicalDeviceMemoryProperties2(sResourceTracker, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
@@ -16915,7 +16915,7 @@
     if (pFormatInfo)
     {
         local_pFormatInfo = (VkPhysicalDeviceSparseImageFormatInfo2*)pool->alloc(sizeof(const VkPhysicalDeviceSparseImageFormatInfo2));
-        deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(pool, pFormatInfo, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
+        deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pFormatInfo, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
     }
     if (local_pFormatInfo)
     {
@@ -16926,7 +16926,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceSparseImageFormatInfo2(sFeatureBits, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
+        count_VkPhysicalDeviceSparseImageFormatInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pPropertyCount)
@@ -16941,7 +16941,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkSparseImageFormatProperties2(sFeatureBits, (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
+                    count_VkSparseImageFormatProperties2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties2*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -16958,7 +16958,7 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(stream, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
+    reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPropertyCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -16978,7 +16978,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkSparseImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties2*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -17005,7 +17005,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
+                unmarshal_VkSparseImageFormatProperties2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageFormatProperties2*)(pProperties + i));
             }
         }
     }
@@ -17305,7 +17305,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
                 {
-                    count_VkPhysicalDeviceGroupProperties(sFeatureBits, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), countPtr);
+                    count_VkPhysicalDeviceGroupProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), countPtr);
                 }
             }
         }
@@ -17341,7 +17341,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
         {
-            reservedmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), streamPtrPtr);
+            reservedmarshal_VkPhysicalDeviceGroupProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -17368,7 +17368,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
             {
-                unmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
+                unmarshal_VkPhysicalDeviceGroupProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
             }
         }
     }
@@ -17414,7 +17414,7 @@
     if (pExternalBufferInfo)
     {
         local_pExternalBufferInfo = (VkPhysicalDeviceExternalBufferInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalBufferInfo));
-        deepcopy_VkPhysicalDeviceExternalBufferInfo(pool, pExternalBufferInfo, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
+        deepcopy_VkPhysicalDeviceExternalBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalBufferInfo, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
     }
     if (local_pExternalBufferInfo)
     {
@@ -17426,8 +17426,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceExternalBufferInfo(sFeatureBits, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
-        count_VkExternalBufferProperties(sFeatureBits, (VkExternalBufferProperties*)(pExternalBufferProperties), countPtr);
+        count_VkPhysicalDeviceExternalBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), countPtr);
+        count_VkExternalBufferProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalBufferProperties*)(pExternalBufferProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalBufferPropertiesKHR);
@@ -17441,9 +17441,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
-    reservedmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
-    unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
+    reservedmarshal_VkPhysicalDeviceExternalBufferInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo), streamPtrPtr);
+    reservedmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalBufferProperties*)(pExternalBufferProperties), streamPtrPtr);
+    unmarshal_VkExternalBufferProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalBufferProperties*)(pExternalBufferProperties));
     if (pExternalBufferProperties)
     {
         sResourceTracker->transformImpl_VkExternalBufferProperties_fromhost(pExternalBufferProperties, 1);
@@ -17480,7 +17480,7 @@
     if (pGetWin32HandleInfo)
     {
         local_pGetWin32HandleInfo = (VkMemoryGetWin32HandleInfoKHR*)pool->alloc(sizeof(const VkMemoryGetWin32HandleInfoKHR));
-        deepcopy_VkMemoryGetWin32HandleInfoKHR(pool, pGetWin32HandleInfo, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
+        deepcopy_VkMemoryGetWin32HandleInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetWin32HandleInfo, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
     }
     if (local_pGetWin32HandleInfo)
     {
@@ -17491,7 +17491,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkMemoryGetWin32HandleInfoKHR(sFeatureBits, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), countPtr);
+        count_VkMemoryGetWin32HandleInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), countPtr);
         *countPtr += sizeof(HANDLE);
     }
     uint32_t packetSize_vkGetMemoryWin32HandleKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -17506,7 +17506,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMemoryGetWin32HandleInfoKHR(stream, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryGetWin32HandleInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (HANDLE*)pHandle, sizeof(HANDLE));
     *streamPtrPtr += sizeof(HANDLE);
     stream->read((HANDLE*)pHandle, sizeof(HANDLE));
@@ -17547,7 +17547,7 @@
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
         *countPtr += sizeof(HANDLE);
-        count_VkMemoryWin32HandlePropertiesKHR(sFeatureBits, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties), countPtr);
+        count_VkMemoryWin32HandlePropertiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties), countPtr);
     }
     uint32_t packetSize_vkGetMemoryWin32HandlePropertiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetMemoryWin32HandlePropertiesKHR);
@@ -17565,8 +17565,8 @@
     *streamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
     memcpy(*streamPtrPtr, (HANDLE*)&local_handle, sizeof(HANDLE));
     *streamPtrPtr += sizeof(HANDLE);
-    reservedmarshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties), streamPtrPtr);
-    unmarshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
+    reservedmarshal_VkMemoryWin32HandlePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties), streamPtrPtr);
+    unmarshal_VkMemoryWin32HandlePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
     if (pMemoryWin32HandleProperties)
     {
         transform_fromhost_VkMemoryWin32HandlePropertiesKHR(sResourceTracker, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
@@ -17603,7 +17603,7 @@
     if (pGetFdInfo)
     {
         local_pGetFdInfo = (VkMemoryGetFdInfoKHR*)pool->alloc(sizeof(const VkMemoryGetFdInfoKHR));
-        deepcopy_VkMemoryGetFdInfoKHR(pool, pGetFdInfo, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
+        deepcopy_VkMemoryGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
     }
     if (local_pGetFdInfo)
     {
@@ -17614,7 +17614,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkMemoryGetFdInfoKHR(sFeatureBits, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
+        count_VkMemoryGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
         *countPtr += sizeof(int);
     }
     uint32_t packetSize_vkGetMemoryFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -17629,7 +17629,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMemoryGetFdInfoKHR(stream, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
     *streamPtrPtr += sizeof(int);
     stream->read((int*)pFd, sizeof(int));
@@ -17670,7 +17670,7 @@
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
         *countPtr += sizeof(int);
-        count_VkMemoryFdPropertiesKHR(sFeatureBits, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties), countPtr);
+        count_VkMemoryFdPropertiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties), countPtr);
     }
     uint32_t packetSize_vkGetMemoryFdPropertiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetMemoryFdPropertiesKHR);
@@ -17688,8 +17688,8 @@
     *streamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagBits);
     memcpy(*streamPtrPtr, (int*)&local_fd, sizeof(int));
     *streamPtrPtr += sizeof(int);
-    reservedmarshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties), streamPtrPtr);
-    unmarshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
+    reservedmarshal_VkMemoryFdPropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties), streamPtrPtr);
+    unmarshal_VkMemoryFdPropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
     if (pMemoryFdProperties)
     {
         transform_fromhost_VkMemoryFdPropertiesKHR(sResourceTracker, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
@@ -17728,7 +17728,7 @@
     if (pExternalSemaphoreInfo)
     {
         local_pExternalSemaphoreInfo = (VkPhysicalDeviceExternalSemaphoreInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalSemaphoreInfo));
-        deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(pool, pExternalSemaphoreInfo, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
+        deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalSemaphoreInfo, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
     }
     if (local_pExternalSemaphoreInfo)
     {
@@ -17739,8 +17739,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceExternalSemaphoreInfo(sFeatureBits, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
-        count_VkExternalSemaphoreProperties(sFeatureBits, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
+        count_VkPhysicalDeviceExternalSemaphoreInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), countPtr);
+        count_VkExternalSemaphoreProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR);
@@ -17754,9 +17754,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
-    reservedmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
-    unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
+    reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo), streamPtrPtr);
+    reservedmarshal_VkExternalSemaphoreProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties), streamPtrPtr);
+    unmarshal_VkExternalSemaphoreProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
     if (pExternalSemaphoreProperties)
     {
         transform_fromhost_VkExternalSemaphoreProperties(sResourceTracker, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
@@ -17792,7 +17792,7 @@
     if (pImportSemaphoreWin32HandleInfo)
     {
         local_pImportSemaphoreWin32HandleInfo = (VkImportSemaphoreWin32HandleInfoKHR*)pool->alloc(sizeof(const VkImportSemaphoreWin32HandleInfoKHR));
-        deepcopy_VkImportSemaphoreWin32HandleInfoKHR(pool, pImportSemaphoreWin32HandleInfo, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
+        deepcopy_VkImportSemaphoreWin32HandleInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportSemaphoreWin32HandleInfo, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
     }
     if (local_pImportSemaphoreWin32HandleInfo)
     {
@@ -17803,7 +17803,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImportSemaphoreWin32HandleInfoKHR(sFeatureBits, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo), countPtr);
+        count_VkImportSemaphoreWin32HandleInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo), countPtr);
     }
     uint32_t packetSize_vkImportSemaphoreWin32HandleKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkImportSemaphoreWin32HandleKHR);
@@ -17817,7 +17817,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImportSemaphoreWin32HandleInfoKHR(stream, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo), streamPtrPtr);
+    reservedmarshal_VkImportSemaphoreWin32HandleInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo), streamPtrPtr);
     VkResult vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
     stream->read(&vkImportSemaphoreWin32HandleKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -17848,7 +17848,7 @@
     if (pGetWin32HandleInfo)
     {
         local_pGetWin32HandleInfo = (VkSemaphoreGetWin32HandleInfoKHR*)pool->alloc(sizeof(const VkSemaphoreGetWin32HandleInfoKHR));
-        deepcopy_VkSemaphoreGetWin32HandleInfoKHR(pool, pGetWin32HandleInfo, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
+        deepcopy_VkSemaphoreGetWin32HandleInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetWin32HandleInfo, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
     }
     if (local_pGetWin32HandleInfo)
     {
@@ -17859,7 +17859,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreGetWin32HandleInfoKHR(sFeatureBits, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), countPtr);
+        count_VkSemaphoreGetWin32HandleInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), countPtr);
         *countPtr += sizeof(HANDLE);
     }
     uint32_t packetSize_vkGetSemaphoreWin32HandleKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -17874,7 +17874,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreGetWin32HandleInfoKHR(stream, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreGetWin32HandleInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (HANDLE*)pHandle, sizeof(HANDLE));
     *streamPtrPtr += sizeof(HANDLE);
     stream->read((HANDLE*)pHandle, sizeof(HANDLE));
@@ -17909,7 +17909,7 @@
     if (pImportSemaphoreFdInfo)
     {
         local_pImportSemaphoreFdInfo = (VkImportSemaphoreFdInfoKHR*)pool->alloc(sizeof(const VkImportSemaphoreFdInfoKHR));
-        deepcopy_VkImportSemaphoreFdInfoKHR(pool, pImportSemaphoreFdInfo, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
+        deepcopy_VkImportSemaphoreFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportSemaphoreFdInfo, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
     }
     if (local_pImportSemaphoreFdInfo)
     {
@@ -17920,7 +17920,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImportSemaphoreFdInfoKHR(sFeatureBits, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), countPtr);
+        count_VkImportSemaphoreFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), countPtr);
     }
     uint32_t packetSize_vkImportSemaphoreFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkImportSemaphoreFdKHR);
@@ -17934,7 +17934,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImportSemaphoreFdInfoKHR(stream, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), streamPtrPtr);
+    reservedmarshal_VkImportSemaphoreFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo), streamPtrPtr);
     VkResult vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
     stream->read(&vkImportSemaphoreFdKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -17965,7 +17965,7 @@
     if (pGetFdInfo)
     {
         local_pGetFdInfo = (VkSemaphoreGetFdInfoKHR*)pool->alloc(sizeof(const VkSemaphoreGetFdInfoKHR));
-        deepcopy_VkSemaphoreGetFdInfoKHR(pool, pGetFdInfo, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
+        deepcopy_VkSemaphoreGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
     }
     if (local_pGetFdInfo)
     {
@@ -17976,7 +17976,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreGetFdInfoKHR(sFeatureBits, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
+        count_VkSemaphoreGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
         *countPtr += sizeof(int);
     }
     uint32_t packetSize_vkGetSemaphoreFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -17991,7 +17991,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreGetFdInfoKHR(stream, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
     *streamPtrPtr += sizeof(int);
     stream->read((int*)pFd, sizeof(int));
@@ -18040,7 +18040,7 @@
         local_pDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(((descriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
         for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
         {
-            deepcopy_VkWriteDescriptorSet(pool, pDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
+            deepcopy_VkWriteDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
         }
     }
     if (local_pDescriptorWrites)
@@ -18062,7 +18062,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
         {
-            count_VkWriteDescriptorSet(sFeatureBits, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), countPtr);
+            count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdPushDescriptorSetKHR = 4 + 4 + count;
@@ -18091,7 +18091,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
     {
-        reservedmarshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), streamPtrPtr);
+        reservedmarshal_VkWriteDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWriteDescriptorSet*)(local_pDescriptorWrites + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -18214,13 +18214,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDescriptorUpdateTemplateCreateInfo*)pool->alloc(sizeof(const VkDescriptorUpdateTemplateCreateInfo));
-        deepcopy_VkDescriptorUpdateTemplateCreateInfo(pool, pCreateInfo, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDescriptorUpdateTemplateCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -18236,12 +18236,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorUpdateTemplateCreateInfo(sFeatureBits, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDescriptorUpdateTemplateCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -18258,7 +18258,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(stream, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -18266,7 +18266,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -18312,7 +18312,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -18330,7 +18330,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDescriptorUpdateTemplateKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -18356,7 +18356,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDescriptorUpdateTemplate((VkDescriptorUpdateTemplate*)&descriptorUpdateTemplate);
     stream->flush();
@@ -18470,13 +18470,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkRenderPassCreateInfo2*)pool->alloc(sizeof(const VkRenderPassCreateInfo2));
-        deepcopy_VkRenderPassCreateInfo2(pool, pCreateInfo, (VkRenderPassCreateInfo2*)(local_pCreateInfo));
+        deepcopy_VkRenderPassCreateInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkRenderPassCreateInfo2*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -18492,12 +18492,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkRenderPassCreateInfo2(sFeatureBits, (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
+        count_VkRenderPassCreateInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassCreateInfo2*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -18514,7 +18514,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkRenderPassCreateInfo2(stream, (VkRenderPassCreateInfo2*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkRenderPassCreateInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassCreateInfo2*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -18522,7 +18522,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -18564,13 +18564,13 @@
     if (pRenderPassBegin)
     {
         local_pRenderPassBegin = (VkRenderPassBeginInfo*)pool->alloc(sizeof(const VkRenderPassBeginInfo));
-        deepcopy_VkRenderPassBeginInfo(pool, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
+        deepcopy_VkRenderPassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRenderPassBegin, (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     }
     local_pSubpassBeginInfo = nullptr;
     if (pSubpassBeginInfo)
     {
         local_pSubpassBeginInfo = (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
-        deepcopy_VkSubpassBeginInfo(pool, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
+        deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
     }
     if (local_pRenderPassBegin)
     {
@@ -18585,8 +18585,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkRenderPassBeginInfo(sFeatureBits, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
-        count_VkSubpassBeginInfo(sFeatureBits, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
+        count_VkRenderPassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), countPtr);
+        count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
     }
     uint32_t packetSize_vkCmdBeginRenderPass2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginRenderPass2KHR -= 8;
@@ -18602,8 +18602,8 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkRenderPassBeginInfo(stream, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), streamPtrPtr);
-    reservedmarshal_VkSubpassBeginInfo(stream, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
+    reservedmarshal_VkRenderPassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRenderPassBeginInfo*)(local_pRenderPassBegin), streamPtrPtr);
+    reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -18632,13 +18632,13 @@
     if (pSubpassBeginInfo)
     {
         local_pSubpassBeginInfo = (VkSubpassBeginInfo*)pool->alloc(sizeof(const VkSubpassBeginInfo));
-        deepcopy_VkSubpassBeginInfo(pool, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
+        deepcopy_VkSubpassBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassBeginInfo, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo));
     }
     local_pSubpassEndInfo = nullptr;
     if (pSubpassEndInfo)
     {
         local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
-        deepcopy_VkSubpassEndInfo(pool, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
+        deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
     }
     if (local_pSubpassBeginInfo)
     {
@@ -18653,8 +18653,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSubpassBeginInfo(sFeatureBits, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
-        count_VkSubpassEndInfo(sFeatureBits, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
+        count_VkSubpassBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), countPtr);
+        count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
     }
     uint32_t packetSize_vkCmdNextSubpass2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdNextSubpass2KHR -= 8;
@@ -18670,8 +18670,8 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkSubpassBeginInfo(stream, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
-    reservedmarshal_VkSubpassEndInfo(stream, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
+    reservedmarshal_VkSubpassBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassBeginInfo*)(local_pSubpassBeginInfo), streamPtrPtr);
+    reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -18698,7 +18698,7 @@
     if (pSubpassEndInfo)
     {
         local_pSubpassEndInfo = (VkSubpassEndInfo*)pool->alloc(sizeof(const VkSubpassEndInfo));
-        deepcopy_VkSubpassEndInfo(pool, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
+        deepcopy_VkSubpassEndInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubpassEndInfo, (VkSubpassEndInfo*)(local_pSubpassEndInfo));
     }
     if (local_pSubpassEndInfo)
     {
@@ -18709,7 +18709,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSubpassEndInfo(sFeatureBits, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
+        count_VkSubpassEndInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), countPtr);
     }
     uint32_t packetSize_vkCmdEndRenderPass2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdEndRenderPass2KHR -= 8;
@@ -18725,7 +18725,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkSubpassEndInfo(stream, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
+    reservedmarshal_VkSubpassEndInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubpassEndInfo*)(local_pSubpassEndInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -18807,7 +18807,7 @@
     if (pExternalFenceInfo)
     {
         local_pExternalFenceInfo = (VkPhysicalDeviceExternalFenceInfo*)pool->alloc(sizeof(const VkPhysicalDeviceExternalFenceInfo));
-        deepcopy_VkPhysicalDeviceExternalFenceInfo(pool, pExternalFenceInfo, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
+        deepcopy_VkPhysicalDeviceExternalFenceInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExternalFenceInfo, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
     }
     if (local_pExternalFenceInfo)
     {
@@ -18818,8 +18818,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceExternalFenceInfo(sFeatureBits, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
-        count_VkExternalFenceProperties(sFeatureBits, (VkExternalFenceProperties*)(pExternalFenceProperties), countPtr);
+        count_VkPhysicalDeviceExternalFenceInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), countPtr);
+        count_VkExternalFenceProperties(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalFencePropertiesKHR);
@@ -18833,9 +18833,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
-    reservedmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties), streamPtrPtr);
-    unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
+    reservedmarshal_VkPhysicalDeviceExternalFenceInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo), streamPtrPtr);
+    reservedmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties), streamPtrPtr);
+    unmarshal_VkExternalFenceProperties(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalFenceProperties*)(pExternalFenceProperties));
     if (pExternalFenceProperties)
     {
         transform_fromhost_VkExternalFenceProperties(sResourceTracker, (VkExternalFenceProperties*)(pExternalFenceProperties));
@@ -18870,7 +18870,7 @@
     if (pImportFenceWin32HandleInfo)
     {
         local_pImportFenceWin32HandleInfo = (VkImportFenceWin32HandleInfoKHR*)pool->alloc(sizeof(const VkImportFenceWin32HandleInfoKHR));
-        deepcopy_VkImportFenceWin32HandleInfoKHR(pool, pImportFenceWin32HandleInfo, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
+        deepcopy_VkImportFenceWin32HandleInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportFenceWin32HandleInfo, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
     }
     if (local_pImportFenceWin32HandleInfo)
     {
@@ -18881,7 +18881,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImportFenceWin32HandleInfoKHR(sFeatureBits, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo), countPtr);
+        count_VkImportFenceWin32HandleInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo), countPtr);
     }
     uint32_t packetSize_vkImportFenceWin32HandleKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkImportFenceWin32HandleKHR);
@@ -18895,7 +18895,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImportFenceWin32HandleInfoKHR(stream, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo), streamPtrPtr);
+    reservedmarshal_VkImportFenceWin32HandleInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo), streamPtrPtr);
     VkResult vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
     stream->read(&vkImportFenceWin32HandleKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -18926,7 +18926,7 @@
     if (pGetWin32HandleInfo)
     {
         local_pGetWin32HandleInfo = (VkFenceGetWin32HandleInfoKHR*)pool->alloc(sizeof(const VkFenceGetWin32HandleInfoKHR));
-        deepcopy_VkFenceGetWin32HandleInfoKHR(pool, pGetWin32HandleInfo, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
+        deepcopy_VkFenceGetWin32HandleInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetWin32HandleInfo, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
     }
     if (local_pGetWin32HandleInfo)
     {
@@ -18937,7 +18937,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkFenceGetWin32HandleInfoKHR(sFeatureBits, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), countPtr);
+        count_VkFenceGetWin32HandleInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), countPtr);
         *countPtr += sizeof(HANDLE);
     }
     uint32_t packetSize_vkGetFenceWin32HandleKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -18952,7 +18952,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkFenceGetWin32HandleInfoKHR(stream, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), streamPtrPtr);
+    reservedmarshal_VkFenceGetWin32HandleInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (HANDLE*)pHandle, sizeof(HANDLE));
     *streamPtrPtr += sizeof(HANDLE);
     stream->read((HANDLE*)pHandle, sizeof(HANDLE));
@@ -18987,7 +18987,7 @@
     if (pImportFenceFdInfo)
     {
         local_pImportFenceFdInfo = (VkImportFenceFdInfoKHR*)pool->alloc(sizeof(const VkImportFenceFdInfoKHR));
-        deepcopy_VkImportFenceFdInfoKHR(pool, pImportFenceFdInfo, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
+        deepcopy_VkImportFenceFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImportFenceFdInfo, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
     }
     if (local_pImportFenceFdInfo)
     {
@@ -18998,7 +18998,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImportFenceFdInfoKHR(sFeatureBits, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo), countPtr);
+        count_VkImportFenceFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo), countPtr);
     }
     uint32_t packetSize_vkImportFenceFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkImportFenceFdKHR);
@@ -19012,7 +19012,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImportFenceFdInfoKHR(stream, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo), streamPtrPtr);
+    reservedmarshal_VkImportFenceFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo), streamPtrPtr);
     VkResult vkImportFenceFdKHR_VkResult_return = (VkResult)0;
     stream->read(&vkImportFenceFdKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -19043,7 +19043,7 @@
     if (pGetFdInfo)
     {
         local_pGetFdInfo = (VkFenceGetFdInfoKHR*)pool->alloc(sizeof(const VkFenceGetFdInfoKHR));
-        deepcopy_VkFenceGetFdInfoKHR(pool, pGetFdInfo, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
+        deepcopy_VkFenceGetFdInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGetFdInfo, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
     }
     if (local_pGetFdInfo)
     {
@@ -19054,7 +19054,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkFenceGetFdInfoKHR(sFeatureBits, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
+        count_VkFenceGetFdInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), countPtr);
         *countPtr += sizeof(int);
     }
     uint32_t packetSize_vkGetFenceFdKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -19069,7 +19069,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkFenceGetFdInfoKHR(stream, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
+    reservedmarshal_VkFenceGetFdInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFenceGetFdInfoKHR*)(local_pGetFdInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (int*)pFd, sizeof(int));
     *streamPtrPtr += sizeof(int);
     stream->read((int*)pFd, sizeof(int));
@@ -19124,7 +19124,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i)
                 {
-                    count_VkPerformanceCounterKHR(sFeatureBits, (VkPerformanceCounterKHR*)(pCounters + i), countPtr);
+                    count_VkPerformanceCounterKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceCounterKHR*)(pCounters + i), countPtr);
                 }
             }
         }
@@ -19136,7 +19136,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i)
                 {
-                    count_VkPerformanceCounterDescriptionKHR(sFeatureBits, (VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i), countPtr);
+                    count_VkPerformanceCounterDescriptionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i), countPtr);
                 }
             }
         }
@@ -19174,7 +19174,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i)
         {
-            reservedmarshal_VkPerformanceCounterKHR(stream, (VkPerformanceCounterKHR*)(pCounters + i), streamPtrPtr);
+            reservedmarshal_VkPerformanceCounterKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceCounterKHR*)(pCounters + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -19186,7 +19186,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i)
         {
-            reservedmarshal_VkPerformanceCounterDescriptionKHR(stream, (VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i), streamPtrPtr);
+            reservedmarshal_VkPerformanceCounterDescriptionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -19213,7 +19213,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i)
             {
-                unmarshal_VkPerformanceCounterKHR(stream, (VkPerformanceCounterKHR*)(pCounters + i));
+                unmarshal_VkPerformanceCounterKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceCounterKHR*)(pCounters + i));
             }
         }
     }
@@ -19240,7 +19240,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pCounterCount)); ++i)
             {
-                unmarshal_VkPerformanceCounterDescriptionKHR(stream, (VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i));
+                unmarshal_VkPerformanceCounterDescriptionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceCounterDescriptionKHR*)(pCounterDescriptions + i));
             }
         }
     }
@@ -19284,7 +19284,7 @@
     if (pPerformanceQueryCreateInfo)
     {
         local_pPerformanceQueryCreateInfo = (VkQueryPoolPerformanceCreateInfoKHR*)pool->alloc(sizeof(const VkQueryPoolPerformanceCreateInfoKHR));
-        deepcopy_VkQueryPoolPerformanceCreateInfoKHR(pool, pPerformanceQueryCreateInfo, (VkQueryPoolPerformanceCreateInfoKHR*)(local_pPerformanceQueryCreateInfo));
+        deepcopy_VkQueryPoolPerformanceCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPerformanceQueryCreateInfo, (VkQueryPoolPerformanceCreateInfoKHR*)(local_pPerformanceQueryCreateInfo));
     }
     if (local_pPerformanceQueryCreateInfo)
     {
@@ -19295,7 +19295,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkQueryPoolPerformanceCreateInfoKHR(sFeatureBits, (VkQueryPoolPerformanceCreateInfoKHR*)(local_pPerformanceQueryCreateInfo), countPtr);
+        count_VkQueryPoolPerformanceCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueryPoolPerformanceCreateInfoKHR*)(local_pPerformanceQueryCreateInfo), countPtr);
         *countPtr += sizeof(uint32_t);
     }
     uint32_t packetSize_vkGetPhysicalDeviceQueueFamilyPerformanceQueryPassesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -19310,7 +19310,7 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkQueryPoolPerformanceCreateInfoKHR(stream, (VkQueryPoolPerformanceCreateInfoKHR*)(local_pPerformanceQueryCreateInfo), streamPtrPtr);
+    reservedmarshal_VkQueryPoolPerformanceCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkQueryPoolPerformanceCreateInfoKHR*)(local_pPerformanceQueryCreateInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint32_t*)pNumPasses, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     stream->read((uint32_t*)pNumPasses, sizeof(uint32_t));
@@ -19340,7 +19340,7 @@
     if (pInfo)
     {
         local_pInfo = (VkAcquireProfilingLockInfoKHR*)pool->alloc(sizeof(const VkAcquireProfilingLockInfoKHR));
-        deepcopy_VkAcquireProfilingLockInfoKHR(pool, pInfo, (VkAcquireProfilingLockInfoKHR*)(local_pInfo));
+        deepcopy_VkAcquireProfilingLockInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkAcquireProfilingLockInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -19351,7 +19351,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAcquireProfilingLockInfoKHR(sFeatureBits, (VkAcquireProfilingLockInfoKHR*)(local_pInfo), countPtr);
+        count_VkAcquireProfilingLockInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAcquireProfilingLockInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkAcquireProfilingLockKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkAcquireProfilingLockKHR);
@@ -19365,7 +19365,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAcquireProfilingLockInfoKHR(stream, (VkAcquireProfilingLockInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkAcquireProfilingLockInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAcquireProfilingLockInfoKHR*)(local_pInfo), streamPtrPtr);
     VkResult vkAcquireProfilingLockKHR_VkResult_return = (VkResult)0;
     stream->read(&vkAcquireProfilingLockKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -19439,7 +19439,7 @@
     if (pSurfaceInfo)
     {
         local_pSurfaceInfo = (VkPhysicalDeviceSurfaceInfo2KHR*)pool->alloc(sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
-        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
+        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     }
     if (local_pSurfaceInfo)
     {
@@ -19450,8 +19450,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
-        count_VkSurfaceCapabilities2KHR(sFeatureBits, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities), countPtr);
+        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
+        count_VkSurfaceCapabilities2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceSurfaceCapabilities2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceSurfaceCapabilities2KHR);
@@ -19465,9 +19465,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
-    reservedmarshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities), streamPtrPtr);
-    unmarshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
+    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
+    reservedmarshal_VkSurfaceCapabilities2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities), streamPtrPtr);
+    unmarshal_VkSurfaceCapabilities2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
     if (pSurfaceCapabilities)
     {
         transform_fromhost_VkSurfaceCapabilities2KHR(sResourceTracker, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
@@ -19503,7 +19503,7 @@
     if (pSurfaceInfo)
     {
         local_pSurfaceInfo = (VkPhysicalDeviceSurfaceInfo2KHR*)pool->alloc(sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
-        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
+        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     }
     if (local_pSurfaceInfo)
     {
@@ -19514,7 +19514,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
+        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pSurfaceFormatCount)
@@ -19529,7 +19529,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
                 {
-                    count_VkSurfaceFormat2KHR(sFeatureBits, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i), countPtr);
+                    count_VkSurfaceFormat2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i), countPtr);
                 }
             }
         }
@@ -19546,7 +19546,7 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
+    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSurfaceFormatCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -19566,7 +19566,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
         {
-            reservedmarshal_VkSurfaceFormat2KHR(stream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i), streamPtrPtr);
+            reservedmarshal_VkSurfaceFormat2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -19593,7 +19593,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
             {
-                unmarshal_VkSurfaceFormat2KHR(stream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
+                unmarshal_VkSurfaceFormat2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
             }
         }
     }
@@ -19655,7 +19655,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkDisplayProperties2KHR(sFeatureBits, (VkDisplayProperties2KHR*)(pProperties + i), countPtr);
+                    count_VkDisplayProperties2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayProperties2KHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -19691,7 +19691,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkDisplayProperties2KHR(stream, (VkDisplayProperties2KHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkDisplayProperties2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayProperties2KHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -19718,7 +19718,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkDisplayProperties2KHR(stream, (VkDisplayProperties2KHR*)(pProperties + i));
+                unmarshal_VkDisplayProperties2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayProperties2KHR*)(pProperties + i));
             }
         }
     }
@@ -19776,7 +19776,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkDisplayPlaneProperties2KHR(sFeatureBits, (VkDisplayPlaneProperties2KHR*)(pProperties + i), countPtr);
+                    count_VkDisplayPlaneProperties2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneProperties2KHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -19812,7 +19812,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkDisplayPlaneProperties2KHR(stream, (VkDisplayPlaneProperties2KHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkDisplayPlaneProperties2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneProperties2KHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -19839,7 +19839,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkDisplayPlaneProperties2KHR(stream, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
+                unmarshal_VkDisplayPlaneProperties2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
             }
         }
     }
@@ -19902,7 +19902,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkDisplayModeProperties2KHR(sFeatureBits, (VkDisplayModeProperties2KHR*)(pProperties + i), countPtr);
+                    count_VkDisplayModeProperties2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModeProperties2KHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -19942,7 +19942,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkDisplayModeProperties2KHR(stream, (VkDisplayModeProperties2KHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkDisplayModeProperties2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModeProperties2KHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -19969,7 +19969,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkDisplayModeProperties2KHR(stream, (VkDisplayModeProperties2KHR*)(pProperties + i));
+                unmarshal_VkDisplayModeProperties2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayModeProperties2KHR*)(pProperties + i));
             }
         }
     }
@@ -20013,7 +20013,7 @@
     if (pDisplayPlaneInfo)
     {
         local_pDisplayPlaneInfo = (VkDisplayPlaneInfo2KHR*)pool->alloc(sizeof(const VkDisplayPlaneInfo2KHR));
-        deepcopy_VkDisplayPlaneInfo2KHR(pool, pDisplayPlaneInfo, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
+        deepcopy_VkDisplayPlaneInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDisplayPlaneInfo, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
     }
     if (local_pDisplayPlaneInfo)
     {
@@ -20024,8 +20024,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDisplayPlaneInfo2KHR(sFeatureBits, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo), countPtr);
-        count_VkDisplayPlaneCapabilities2KHR(sFeatureBits, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities), countPtr);
+        count_VkDisplayPlaneInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo), countPtr);
+        count_VkDisplayPlaneCapabilities2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities), countPtr);
     }
     uint32_t packetSize_vkGetDisplayPlaneCapabilities2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDisplayPlaneCapabilities2KHR);
@@ -20039,9 +20039,9 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDisplayPlaneInfo2KHR(stream, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo), streamPtrPtr);
-    reservedmarshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities), streamPtrPtr);
-    unmarshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
+    reservedmarshal_VkDisplayPlaneInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo), streamPtrPtr);
+    reservedmarshal_VkDisplayPlaneCapabilities2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities), streamPtrPtr);
+    unmarshal_VkDisplayPlaneCapabilities2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
     if (pCapabilities)
     {
         transform_fromhost_VkDisplayPlaneCapabilities2KHR(sResourceTracker, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
@@ -20084,7 +20084,7 @@
     if (pInfo)
     {
         local_pInfo = (VkImageMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageMemoryRequirementsInfo2));
-        deepcopy_VkImageMemoryRequirementsInfo2(pool, pInfo, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
+        deepcopy_VkImageMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -20095,8 +20095,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageMemoryRequirementsInfo2(sFeatureBits, (VkImageMemoryRequirementsInfo2*)(local_pInfo), countPtr);
-        count_VkMemoryRequirements2(sFeatureBits, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
+        count_VkImageMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryRequirementsInfo2*)(local_pInfo), countPtr);
+        count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetImageMemoryRequirements2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageMemoryRequirements2KHR);
@@ -20110,9 +20110,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
-    reservedmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    reservedmarshal_VkImageMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements2(sResourceTracker, (VkMemoryRequirements2*)(pMemoryRequirements));
@@ -20144,7 +20144,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkBufferMemoryRequirementsInfo2));
-        deepcopy_VkBufferMemoryRequirementsInfo2(pool, pInfo, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
+        deepcopy_VkBufferMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -20155,8 +20155,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferMemoryRequirementsInfo2(sFeatureBits, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), countPtr);
-        count_VkMemoryRequirements2(sFeatureBits, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
+        count_VkBufferMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), countPtr);
+        count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetBufferMemoryRequirements2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferMemoryRequirements2KHR);
@@ -20170,9 +20170,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
-    reservedmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    reservedmarshal_VkBufferMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements2(sResourceTracker, (VkMemoryRequirements2*)(pMemoryRequirements));
@@ -20205,7 +20205,7 @@
     if (pInfo)
     {
         local_pInfo = (VkImageSparseMemoryRequirementsInfo2*)pool->alloc(sizeof(const VkImageSparseMemoryRequirementsInfo2));
-        deepcopy_VkImageSparseMemoryRequirementsInfo2(pool, pInfo, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
+        deepcopy_VkImageSparseMemoryRequirementsInfo2(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -20216,7 +20216,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageSparseMemoryRequirementsInfo2(sFeatureBits, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
+        count_VkImageSparseMemoryRequirementsInfo2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pSparseMemoryRequirementCount)
@@ -20231,7 +20231,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
                 {
-                    count_VkSparseImageMemoryRequirements2(sFeatureBits, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), countPtr);
+                    count_VkSparseImageMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), countPtr);
                 }
             }
         }
@@ -20248,7 +20248,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageSparseMemoryRequirementsInfo2(stream, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkImageSparseMemoryRequirementsInfo2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pSparseMemoryRequirementCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -20268,7 +20268,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
         {
-            reservedmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
+            reservedmarshal_VkSparseImageMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -20295,7 +20295,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
             {
-                unmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
+                unmarshal_VkSparseImageMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
             }
         }
     }
@@ -20342,13 +20342,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkSamplerYcbcrConversionCreateInfo*)pool->alloc(sizeof(const VkSamplerYcbcrConversionCreateInfo));
-        deepcopy_VkSamplerYcbcrConversionCreateInfo(pool, pCreateInfo, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkSamplerYcbcrConversionCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -20364,12 +20364,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSamplerYcbcrConversionCreateInfo(sFeatureBits, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkSamplerYcbcrConversionCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -20386,7 +20386,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSamplerYcbcrConversionCreateInfo(stream, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkSamplerYcbcrConversionCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -20394,7 +20394,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -20439,7 +20439,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -20457,7 +20457,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroySamplerYcbcrConversionKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -20483,7 +20483,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkSamplerYcbcrConversion((VkSamplerYcbcrConversion*)&ycbcrConversion);
     stream->flush();
@@ -20520,7 +20520,7 @@
         local_pBindInfos = (VkBindBufferMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindBufferMemoryInfo));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindBufferMemoryInfo(pool, pBindInfos + i, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
+            deepcopy_VkBindBufferMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i, (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
         }
     }
     if (local_pBindInfos)
@@ -20538,7 +20538,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindBufferMemoryInfo(sFeatureBits, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
+            count_VkBindBufferMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), countPtr);
         }
     }
     uint32_t packetSize_vkBindBufferMemory2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -20557,7 +20557,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindBufferMemoryInfo(stream, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
+        reservedmarshal_VkBindBufferMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindBufferMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
     }
     VkResult vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkBindBufferMemory2KHR_VkResult_return, sizeof(VkResult));
@@ -20593,7 +20593,7 @@
         local_pBindInfos = (VkBindImageMemoryInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindImageMemoryInfo));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindImageMemoryInfo(pool, pBindInfos + i, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
+            deepcopy_VkBindImageMemoryInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i, (VkBindImageMemoryInfo*)(local_pBindInfos + i));
         }
     }
     if (local_pBindInfos)
@@ -20611,7 +20611,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindImageMemoryInfo(sFeatureBits, (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
+            count_VkBindImageMemoryInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindImageMemoryInfo*)(local_pBindInfos + i), countPtr);
         }
     }
     uint32_t packetSize_vkBindImageMemory2KHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -20630,7 +20630,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindImageMemoryInfo(stream, (VkBindImageMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
+        reservedmarshal_VkBindImageMemoryInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindImageMemoryInfo*)(local_pBindInfos + i), streamPtrPtr);
     }
     VkResult vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkBindImageMemory2KHR_VkResult_return, sizeof(VkResult));
@@ -20666,7 +20666,7 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDescriptorSetLayoutCreateInfo*)pool->alloc(sizeof(const VkDescriptorSetLayoutCreateInfo));
-        deepcopy_VkDescriptorSetLayoutCreateInfo(pool, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkDescriptorSetLayoutCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     }
     if (local_pCreateInfo)
     {
@@ -20677,8 +20677,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), countPtr);
-        count_VkDescriptorSetLayoutSupport(sFeatureBits, (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
+        count_VkDescriptorSetLayoutCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkDescriptorSetLayoutSupport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutSupport*)(pSupport), countPtr);
     }
     uint32_t packetSize_vkGetDescriptorSetLayoutSupportKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDescriptorSetLayoutSupportKHR);
@@ -20692,9 +20692,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
-    reservedmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport), streamPtrPtr);
-    unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
+    reservedmarshal_VkDescriptorSetLayoutCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutSupport*)(pSupport), streamPtrPtr);
+    unmarshal_VkDescriptorSetLayoutSupport(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorSetLayoutSupport*)(pSupport));
     if (pSupport)
     {
         transform_fromhost_VkDescriptorSetLayoutSupport(sResourceTracker, (VkDescriptorSetLayoutSupport*)(pSupport));
@@ -20966,7 +20966,7 @@
     if (pWaitInfo)
     {
         local_pWaitInfo = (VkSemaphoreWaitInfo*)pool->alloc(sizeof(const VkSemaphoreWaitInfo));
-        deepcopy_VkSemaphoreWaitInfo(pool, pWaitInfo, (VkSemaphoreWaitInfo*)(local_pWaitInfo));
+        deepcopy_VkSemaphoreWaitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pWaitInfo, (VkSemaphoreWaitInfo*)(local_pWaitInfo));
     }
     local_timeout = timeout;
     if (local_pWaitInfo)
@@ -20978,7 +20978,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreWaitInfo(sFeatureBits, (VkSemaphoreWaitInfo*)(local_pWaitInfo), countPtr);
+        count_VkSemaphoreWaitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreWaitInfo*)(local_pWaitInfo), countPtr);
         *countPtr += sizeof(uint64_t);
     }
     uint32_t packetSize_vkWaitSemaphoresKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -20993,7 +20993,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreWaitInfo(stream, (VkSemaphoreWaitInfo*)(local_pWaitInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreWaitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreWaitInfo*)(local_pWaitInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint64_t*)&local_timeout, sizeof(uint64_t));
     *streamPtrPtr += sizeof(uint64_t);
     VkResult vkWaitSemaphoresKHR_VkResult_return = (VkResult)0;
@@ -21025,7 +21025,7 @@
     if (pSignalInfo)
     {
         local_pSignalInfo = (VkSemaphoreSignalInfo*)pool->alloc(sizeof(const VkSemaphoreSignalInfo));
-        deepcopy_VkSemaphoreSignalInfo(pool, pSignalInfo, (VkSemaphoreSignalInfo*)(local_pSignalInfo));
+        deepcopy_VkSemaphoreSignalInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSignalInfo, (VkSemaphoreSignalInfo*)(local_pSignalInfo));
     }
     if (local_pSignalInfo)
     {
@@ -21036,7 +21036,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSemaphoreSignalInfo(sFeatureBits, (VkSemaphoreSignalInfo*)(local_pSignalInfo), countPtr);
+        count_VkSemaphoreSignalInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreSignalInfo*)(local_pSignalInfo), countPtr);
     }
     uint32_t packetSize_vkSignalSemaphoreKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkSignalSemaphoreKHR);
@@ -21050,7 +21050,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSemaphoreSignalInfo(stream, (VkSemaphoreSignalInfo*)(local_pSignalInfo), streamPtrPtr);
+    reservedmarshal_VkSemaphoreSignalInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSemaphoreSignalInfo*)(local_pSignalInfo), streamPtrPtr);
     VkResult vkSignalSemaphoreKHR_VkResult_return = (VkResult)0;
     stream->read(&vkSignalSemaphoreKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -21101,7 +21101,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i)
                 {
-                    count_VkPhysicalDeviceFragmentShadingRateKHR(sFeatureBits, (VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i), countPtr);
+                    count_VkPhysicalDeviceFragmentShadingRateKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i), countPtr);
                 }
             }
         }
@@ -21137,7 +21137,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i)
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShadingRateKHR(stream, (VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i), streamPtrPtr);
+            reservedmarshal_VkPhysicalDeviceFragmentShadingRateKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -21164,7 +21164,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pFragmentShadingRateCount)); ++i)
             {
-                unmarshal_VkPhysicalDeviceFragmentShadingRateKHR(stream, (VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i));
+                unmarshal_VkPhysicalDeviceFragmentShadingRateKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceFragmentShadingRateKHR*)(pFragmentShadingRates + i));
             }
         }
     }
@@ -21209,7 +21209,7 @@
     if (pFragmentSize)
     {
         local_pFragmentSize = (VkExtent2D*)pool->alloc(sizeof(const VkExtent2D));
-        deepcopy_VkExtent2D(pool, pFragmentSize, (VkExtent2D*)(local_pFragmentSize));
+        deepcopy_VkExtent2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pFragmentSize, (VkExtent2D*)(local_pFragmentSize));
     }
     memcpy(local_combinerOps, combinerOps, 2 * sizeof(const VkFragmentShadingRateCombinerOpKHR));
     if (local_pFragmentSize)
@@ -21221,7 +21221,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkExtent2D(sFeatureBits, (VkExtent2D*)(local_pFragmentSize), countPtr);
+        count_VkExtent2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(local_pFragmentSize), countPtr);
         *countPtr += 2 * sizeof(VkFragmentShadingRateCombinerOpKHR);
     }
     uint32_t packetSize_vkCmdSetFragmentShadingRateKHR = 4 + 4 + count;
@@ -21238,7 +21238,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkExtent2D(stream, (VkExtent2D*)(local_pFragmentSize), streamPtrPtr);
+    reservedmarshal_VkExtent2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExtent2D*)(local_pFragmentSize), streamPtrPtr);
     memcpy(*streamPtrPtr, (VkFragmentShadingRateCombinerOpKHR*)local_combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
     *streamPtrPtr += 2 * sizeof(VkFragmentShadingRateCombinerOpKHR);
     ++encodeCount;;
@@ -21277,7 +21277,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
-        deepcopy_VkBufferDeviceAddressInfo(pool, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
+        deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -21288,7 +21288,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferDeviceAddressInfo(sFeatureBits, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
+        count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetBufferDeviceAddressKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferDeviceAddressKHR);
@@ -21302,7 +21302,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferDeviceAddressInfo(stream, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
     VkDeviceAddress vkGetBufferDeviceAddressKHR_VkDeviceAddress_return = (VkDeviceAddress)0;
     stream->read(&vkGetBufferDeviceAddressKHR_VkDeviceAddress_return, sizeof(VkDeviceAddress));
     ++encodeCount;;
@@ -21332,7 +21332,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
-        deepcopy_VkBufferDeviceAddressInfo(pool, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
+        deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -21343,7 +21343,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferDeviceAddressInfo(sFeatureBits, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
+        count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetBufferOpaqueCaptureAddressKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferOpaqueCaptureAddressKHR);
@@ -21357,7 +21357,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferDeviceAddressInfo(stream, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
     uint64_t vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
     stream->read(&vkGetBufferOpaqueCaptureAddressKHR_uint64_t_return, sizeof(uint64_t));
     ++encodeCount;;
@@ -21387,7 +21387,7 @@
     if (pInfo)
     {
         local_pInfo = (VkDeviceMemoryOpaqueCaptureAddressInfo*)pool->alloc(sizeof(const VkDeviceMemoryOpaqueCaptureAddressInfo));
-        deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(pool, pInfo, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
+        deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -21398,7 +21398,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDeviceMemoryOpaqueCaptureAddressInfo(sFeatureBits, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
+        count_VkDeviceMemoryOpaqueCaptureAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetDeviceMemoryOpaqueCaptureAddressKHR);
@@ -21412,7 +21412,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(stream, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceMemoryOpaqueCaptureAddressInfo*)(local_pInfo), streamPtrPtr);
     uint64_t vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return = (uint64_t)0;
     stream->read(&vkGetDeviceMemoryOpaqueCaptureAddressKHR_uint64_t_return, sizeof(uint64_t));
     ++encodeCount;;
@@ -21445,7 +21445,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -21461,7 +21461,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         *countPtr += 8;
     }
@@ -21484,7 +21484,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     uint64_t cgen_var_2 = (uint64_t)(*pDeferredOperation);
     memcpy((*streamPtrPtr), &cgen_var_2, 8);
@@ -21523,7 +21523,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -21540,7 +21540,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDeferredOperationKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -21566,7 +21566,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     stream->flush();
     ++encodeCount;;
@@ -21746,7 +21746,7 @@
     if (pPipelineInfo)
     {
         local_pPipelineInfo = (VkPipelineInfoKHR*)pool->alloc(sizeof(const VkPipelineInfoKHR));
-        deepcopy_VkPipelineInfoKHR(pool, pPipelineInfo, (VkPipelineInfoKHR*)(local_pPipelineInfo));
+        deepcopy_VkPipelineInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPipelineInfo, (VkPipelineInfoKHR*)(local_pPipelineInfo));
     }
     if (local_pPipelineInfo)
     {
@@ -21757,7 +21757,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPipelineInfoKHR(sFeatureBits, (VkPipelineInfoKHR*)(local_pPipelineInfo), countPtr);
+        count_VkPipelineInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineInfoKHR*)(local_pPipelineInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pExecutableCount)
@@ -21772,7 +21772,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i)
                 {
-                    count_VkPipelineExecutablePropertiesKHR(sFeatureBits, (VkPipelineExecutablePropertiesKHR*)(pProperties + i), countPtr);
+                    count_VkPipelineExecutablePropertiesKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutablePropertiesKHR*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -21789,7 +21789,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPipelineInfoKHR(stream, (VkPipelineInfoKHR*)(local_pPipelineInfo), streamPtrPtr);
+    reservedmarshal_VkPipelineInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineInfoKHR*)(local_pPipelineInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pExecutableCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -21809,7 +21809,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i)
         {
-            reservedmarshal_VkPipelineExecutablePropertiesKHR(stream, (VkPipelineExecutablePropertiesKHR*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkPipelineExecutablePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutablePropertiesKHR*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -21836,7 +21836,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pExecutableCount)); ++i)
             {
-                unmarshal_VkPipelineExecutablePropertiesKHR(stream, (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
+                unmarshal_VkPipelineExecutablePropertiesKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutablePropertiesKHR*)(pProperties + i));
             }
         }
     }
@@ -21881,7 +21881,7 @@
     if (pExecutableInfo)
     {
         local_pExecutableInfo = (VkPipelineExecutableInfoKHR*)pool->alloc(sizeof(const VkPipelineExecutableInfoKHR));
-        deepcopy_VkPipelineExecutableInfoKHR(pool, pExecutableInfo, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
+        deepcopy_VkPipelineExecutableInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExecutableInfo, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
     }
     if (local_pExecutableInfo)
     {
@@ -21892,7 +21892,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPipelineExecutableInfoKHR(sFeatureBits, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), countPtr);
+        count_VkPipelineExecutableInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pStatisticCount)
@@ -21907,7 +21907,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i)
                 {
-                    count_VkPipelineExecutableStatisticKHR(sFeatureBits, (VkPipelineExecutableStatisticKHR*)(pStatistics + i), countPtr);
+                    count_VkPipelineExecutableStatisticKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableStatisticKHR*)(pStatistics + i), countPtr);
                 }
             }
         }
@@ -21924,7 +21924,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPipelineExecutableInfoKHR(stream, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), streamPtrPtr);
+    reservedmarshal_VkPipelineExecutableInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pStatisticCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -21944,7 +21944,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i)
         {
-            reservedmarshal_VkPipelineExecutableStatisticKHR(stream, (VkPipelineExecutableStatisticKHR*)(pStatistics + i), streamPtrPtr);
+            reservedmarshal_VkPipelineExecutableStatisticKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableStatisticKHR*)(pStatistics + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -21971,7 +21971,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pStatisticCount)); ++i)
             {
-                unmarshal_VkPipelineExecutableStatisticKHR(stream, (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
+                unmarshal_VkPipelineExecutableStatisticKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableStatisticKHR*)(pStatistics + i));
             }
         }
     }
@@ -22016,7 +22016,7 @@
     if (pExecutableInfo)
     {
         local_pExecutableInfo = (VkPipelineExecutableInfoKHR*)pool->alloc(sizeof(const VkPipelineExecutableInfoKHR));
-        deepcopy_VkPipelineExecutableInfoKHR(pool, pExecutableInfo, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
+        deepcopy_VkPipelineExecutableInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExecutableInfo, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo));
     }
     if (local_pExecutableInfo)
     {
@@ -22027,7 +22027,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPipelineExecutableInfoKHR(sFeatureBits, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), countPtr);
+        count_VkPipelineExecutableInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pInternalRepresentationCount)
@@ -22042,7 +22042,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i)
                 {
-                    count_VkPipelineExecutableInternalRepresentationKHR(sFeatureBits, (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i), countPtr);
+                    count_VkPipelineExecutableInternalRepresentationKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i), countPtr);
                 }
             }
         }
@@ -22059,7 +22059,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPipelineExecutableInfoKHR(stream, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), streamPtrPtr);
+    reservedmarshal_VkPipelineExecutableInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInfoKHR*)(local_pExecutableInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pInternalRepresentationCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -22079,7 +22079,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i)
         {
-            reservedmarshal_VkPipelineExecutableInternalRepresentationKHR(stream, (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i), streamPtrPtr);
+            reservedmarshal_VkPipelineExecutableInternalRepresentationKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -22106,7 +22106,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pInternalRepresentationCount)); ++i)
             {
-                unmarshal_VkPipelineExecutableInternalRepresentationKHR(stream, (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i));
+                unmarshal_VkPipelineExecutableInternalRepresentationKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPipelineExecutableInternalRepresentationKHR*)(pInternalRepresentations + i));
             }
         }
     }
@@ -22155,7 +22155,7 @@
     if (pCopyBufferInfo)
     {
         local_pCopyBufferInfo = (VkCopyBufferInfo2KHR*)pool->alloc(sizeof(const VkCopyBufferInfo2KHR));
-        deepcopy_VkCopyBufferInfo2KHR(pool, pCopyBufferInfo, (VkCopyBufferInfo2KHR*)(local_pCopyBufferInfo));
+        deepcopy_VkCopyBufferInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferInfo, (VkCopyBufferInfo2KHR*)(local_pCopyBufferInfo));
     }
     if (local_pCopyBufferInfo)
     {
@@ -22166,7 +22166,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyBufferInfo2KHR(sFeatureBits, (VkCopyBufferInfo2KHR*)(local_pCopyBufferInfo), countPtr);
+        count_VkCopyBufferInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferInfo2KHR*)(local_pCopyBufferInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyBuffer2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBuffer2KHR -= 8;
@@ -22182,7 +22182,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyBufferInfo2KHR(stream, (VkCopyBufferInfo2KHR*)(local_pCopyBufferInfo), streamPtrPtr);
+    reservedmarshal_VkCopyBufferInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferInfo2KHR*)(local_pCopyBufferInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -22209,7 +22209,7 @@
     if (pCopyImageInfo)
     {
         local_pCopyImageInfo = (VkCopyImageInfo2KHR*)pool->alloc(sizeof(const VkCopyImageInfo2KHR));
-        deepcopy_VkCopyImageInfo2KHR(pool, pCopyImageInfo, (VkCopyImageInfo2KHR*)(local_pCopyImageInfo));
+        deepcopy_VkCopyImageInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageInfo, (VkCopyImageInfo2KHR*)(local_pCopyImageInfo));
     }
     if (local_pCopyImageInfo)
     {
@@ -22220,7 +22220,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyImageInfo2KHR(sFeatureBits, (VkCopyImageInfo2KHR*)(local_pCopyImageInfo), countPtr);
+        count_VkCopyImageInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageInfo2KHR*)(local_pCopyImageInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyImage2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImage2KHR -= 8;
@@ -22236,7 +22236,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyImageInfo2KHR(stream, (VkCopyImageInfo2KHR*)(local_pCopyImageInfo), streamPtrPtr);
+    reservedmarshal_VkCopyImageInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageInfo2KHR*)(local_pCopyImageInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -22263,7 +22263,7 @@
     if (pCopyBufferToImageInfo)
     {
         local_pCopyBufferToImageInfo = (VkCopyBufferToImageInfo2KHR*)pool->alloc(sizeof(const VkCopyBufferToImageInfo2KHR));
-        deepcopy_VkCopyBufferToImageInfo2KHR(pool, pCopyBufferToImageInfo, (VkCopyBufferToImageInfo2KHR*)(local_pCopyBufferToImageInfo));
+        deepcopy_VkCopyBufferToImageInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyBufferToImageInfo, (VkCopyBufferToImageInfo2KHR*)(local_pCopyBufferToImageInfo));
     }
     if (local_pCopyBufferToImageInfo)
     {
@@ -22274,7 +22274,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyBufferToImageInfo2KHR(sFeatureBits, (VkCopyBufferToImageInfo2KHR*)(local_pCopyBufferToImageInfo), countPtr);
+        count_VkCopyBufferToImageInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferToImageInfo2KHR*)(local_pCopyBufferToImageInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyBufferToImage2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyBufferToImage2KHR -= 8;
@@ -22290,7 +22290,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyBufferToImageInfo2KHR(stream, (VkCopyBufferToImageInfo2KHR*)(local_pCopyBufferToImageInfo), streamPtrPtr);
+    reservedmarshal_VkCopyBufferToImageInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyBufferToImageInfo2KHR*)(local_pCopyBufferToImageInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -22317,7 +22317,7 @@
     if (pCopyImageToBufferInfo)
     {
         local_pCopyImageToBufferInfo = (VkCopyImageToBufferInfo2KHR*)pool->alloc(sizeof(const VkCopyImageToBufferInfo2KHR));
-        deepcopy_VkCopyImageToBufferInfo2KHR(pool, pCopyImageToBufferInfo, (VkCopyImageToBufferInfo2KHR*)(local_pCopyImageToBufferInfo));
+        deepcopy_VkCopyImageToBufferInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCopyImageToBufferInfo, (VkCopyImageToBufferInfo2KHR*)(local_pCopyImageToBufferInfo));
     }
     if (local_pCopyImageToBufferInfo)
     {
@@ -22328,7 +22328,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyImageToBufferInfo2KHR(sFeatureBits, (VkCopyImageToBufferInfo2KHR*)(local_pCopyImageToBufferInfo), countPtr);
+        count_VkCopyImageToBufferInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageToBufferInfo2KHR*)(local_pCopyImageToBufferInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyImageToBuffer2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyImageToBuffer2KHR -= 8;
@@ -22344,7 +22344,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyImageToBufferInfo2KHR(stream, (VkCopyImageToBufferInfo2KHR*)(local_pCopyImageToBufferInfo), streamPtrPtr);
+    reservedmarshal_VkCopyImageToBufferInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyImageToBufferInfo2KHR*)(local_pCopyImageToBufferInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -22371,7 +22371,7 @@
     if (pBlitImageInfo)
     {
         local_pBlitImageInfo = (VkBlitImageInfo2KHR*)pool->alloc(sizeof(const VkBlitImageInfo2KHR));
-        deepcopy_VkBlitImageInfo2KHR(pool, pBlitImageInfo, (VkBlitImageInfo2KHR*)(local_pBlitImageInfo));
+        deepcopy_VkBlitImageInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBlitImageInfo, (VkBlitImageInfo2KHR*)(local_pBlitImageInfo));
     }
     if (local_pBlitImageInfo)
     {
@@ -22382,7 +22382,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBlitImageInfo2KHR(sFeatureBits, (VkBlitImageInfo2KHR*)(local_pBlitImageInfo), countPtr);
+        count_VkBlitImageInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBlitImageInfo2KHR*)(local_pBlitImageInfo), countPtr);
     }
     uint32_t packetSize_vkCmdBlitImage2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBlitImage2KHR -= 8;
@@ -22398,7 +22398,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkBlitImageInfo2KHR(stream, (VkBlitImageInfo2KHR*)(local_pBlitImageInfo), streamPtrPtr);
+    reservedmarshal_VkBlitImageInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBlitImageInfo2KHR*)(local_pBlitImageInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -22425,7 +22425,7 @@
     if (pResolveImageInfo)
     {
         local_pResolveImageInfo = (VkResolveImageInfo2KHR*)pool->alloc(sizeof(const VkResolveImageInfo2KHR));
-        deepcopy_VkResolveImageInfo2KHR(pool, pResolveImageInfo, (VkResolveImageInfo2KHR*)(local_pResolveImageInfo));
+        deepcopy_VkResolveImageInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pResolveImageInfo, (VkResolveImageInfo2KHR*)(local_pResolveImageInfo));
     }
     if (local_pResolveImageInfo)
     {
@@ -22436,7 +22436,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkResolveImageInfo2KHR(sFeatureBits, (VkResolveImageInfo2KHR*)(local_pResolveImageInfo), countPtr);
+        count_VkResolveImageInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkResolveImageInfo2KHR*)(local_pResolveImageInfo), countPtr);
     }
     uint32_t packetSize_vkCmdResolveImage2KHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdResolveImage2KHR -= 8;
@@ -22452,7 +22452,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkResolveImageInfo2KHR(stream, (VkResolveImageInfo2KHR*)(local_pResolveImageInfo), streamPtrPtr);
+    reservedmarshal_VkResolveImageInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkResolveImageInfo2KHR*)(local_pResolveImageInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -22712,13 +22712,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDebugReportCallbackCreateInfoEXT*)pool->alloc(sizeof(const VkDebugReportCallbackCreateInfoEXT));
-        deepcopy_VkDebugReportCallbackCreateInfoEXT(pool, pCreateInfo, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkDebugReportCallbackCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -22734,12 +22734,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugReportCallbackCreateInfoEXT(sFeatureBits, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkDebugReportCallbackCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -22756,7 +22756,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugReportCallbackCreateInfoEXT(stream, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDebugReportCallbackCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -22764,7 +22764,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -22809,7 +22809,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -22827,7 +22827,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDebugReportCallbackEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -22853,7 +22853,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDebugReportCallbackEXT((VkDebugReportCallbackEXT*)&callback);
     stream->flush();
@@ -22994,7 +22994,7 @@
     if (pTagInfo)
     {
         local_pTagInfo = (VkDebugMarkerObjectTagInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerObjectTagInfoEXT));
-        deepcopy_VkDebugMarkerObjectTagInfoEXT(pool, pTagInfo, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
+        deepcopy_VkDebugMarkerObjectTagInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pTagInfo, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
     }
     if (local_pTagInfo)
     {
@@ -23005,7 +23005,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugMarkerObjectTagInfoEXT(sFeatureBits, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo), countPtr);
+        count_VkDebugMarkerObjectTagInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo), countPtr);
     }
     uint32_t packetSize_vkDebugMarkerSetObjectTagEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkDebugMarkerSetObjectTagEXT);
@@ -23019,7 +23019,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugMarkerObjectTagInfoEXT(stream, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo), streamPtrPtr);
+    reservedmarshal_VkDebugMarkerObjectTagInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo), streamPtrPtr);
     VkResult vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
     stream->read(&vkDebugMarkerSetObjectTagEXT_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -23049,7 +23049,7 @@
     if (pNameInfo)
     {
         local_pNameInfo = (VkDebugMarkerObjectNameInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerObjectNameInfoEXT));
-        deepcopy_VkDebugMarkerObjectNameInfoEXT(pool, pNameInfo, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
+        deepcopy_VkDebugMarkerObjectNameInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pNameInfo, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
     }
     if (local_pNameInfo)
     {
@@ -23060,7 +23060,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugMarkerObjectNameInfoEXT(sFeatureBits, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo), countPtr);
+        count_VkDebugMarkerObjectNameInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo), countPtr);
     }
     uint32_t packetSize_vkDebugMarkerSetObjectNameEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkDebugMarkerSetObjectNameEXT);
@@ -23074,7 +23074,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugMarkerObjectNameInfoEXT(stream, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo), streamPtrPtr);
+    reservedmarshal_VkDebugMarkerObjectNameInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo), streamPtrPtr);
     VkResult vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
     stream->read(&vkDebugMarkerSetObjectNameEXT_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -23104,7 +23104,7 @@
     if (pMarkerInfo)
     {
         local_pMarkerInfo = (VkDebugMarkerMarkerInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerMarkerInfoEXT));
-        deepcopy_VkDebugMarkerMarkerInfoEXT(pool, pMarkerInfo, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
+        deepcopy_VkDebugMarkerMarkerInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMarkerInfo, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
     }
     if (local_pMarkerInfo)
     {
@@ -23115,7 +23115,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugMarkerMarkerInfoEXT(sFeatureBits, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), countPtr);
+        count_VkDebugMarkerMarkerInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), countPtr);
     }
     uint32_t packetSize_vkCmdDebugMarkerBeginEXT = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDebugMarkerBeginEXT -= 8;
@@ -23131,7 +23131,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), streamPtrPtr);
+    reservedmarshal_VkDebugMarkerMarkerInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -23198,7 +23198,7 @@
     if (pMarkerInfo)
     {
         local_pMarkerInfo = (VkDebugMarkerMarkerInfoEXT*)pool->alloc(sizeof(const VkDebugMarkerMarkerInfoEXT));
-        deepcopy_VkDebugMarkerMarkerInfoEXT(pool, pMarkerInfo, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
+        deepcopy_VkDebugMarkerMarkerInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMarkerInfo, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
     }
     if (local_pMarkerInfo)
     {
@@ -23209,7 +23209,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugMarkerMarkerInfoEXT(sFeatureBits, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), countPtr);
+        count_VkDebugMarkerMarkerInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), countPtr);
     }
     uint32_t packetSize_vkCmdDebugMarkerInsertEXT = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdDebugMarkerInsertEXT -= 8;
@@ -23225,7 +23225,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkDebugMarkerMarkerInfoEXT(stream, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), streamPtrPtr);
+    reservedmarshal_VkDebugMarkerMarkerInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -23770,7 +23770,7 @@
     if (pInfo)
     {
         local_pInfo = (VkImageViewHandleInfoNVX*)pool->alloc(sizeof(const VkImageViewHandleInfoNVX));
-        deepcopy_VkImageViewHandleInfoNVX(pool, pInfo, (VkImageViewHandleInfoNVX*)(local_pInfo));
+        deepcopy_VkImageViewHandleInfoNVX(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkImageViewHandleInfoNVX*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -23781,7 +23781,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageViewHandleInfoNVX(sFeatureBits, (VkImageViewHandleInfoNVX*)(local_pInfo), countPtr);
+        count_VkImageViewHandleInfoNVX(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewHandleInfoNVX*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetImageViewHandleNVX = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageViewHandleNVX);
@@ -23795,7 +23795,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageViewHandleInfoNVX(stream, (VkImageViewHandleInfoNVX*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkImageViewHandleInfoNVX(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewHandleInfoNVX*)(local_pInfo), streamPtrPtr);
     uint32_t vkGetImageViewHandleNVX_uint32_t_return = (uint32_t)0;
     stream->read(&vkGetImageViewHandleNVX_uint32_t_return, sizeof(uint32_t));
     ++encodeCount;;
@@ -23830,7 +23830,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkImageViewAddressPropertiesNVX(sFeatureBits, (VkImageViewAddressPropertiesNVX*)(pProperties), countPtr);
+        count_VkImageViewAddressPropertiesNVX(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewAddressPropertiesNVX*)(pProperties), countPtr);
     }
     uint32_t packetSize_vkGetImageViewAddressNVX = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageViewAddressNVX);
@@ -23848,8 +23848,8 @@
     *&cgen_var_1 = get_host_u64_VkImageView((*&local_imageView));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageViewAddressPropertiesNVX(stream, (VkImageViewAddressPropertiesNVX*)(pProperties), streamPtrPtr);
-    unmarshal_VkImageViewAddressPropertiesNVX(stream, (VkImageViewAddressPropertiesNVX*)(pProperties));
+    reservedmarshal_VkImageViewAddressPropertiesNVX(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewAddressPropertiesNVX*)(pProperties), streamPtrPtr);
+    unmarshal_VkImageViewAddressPropertiesNVX(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageViewAddressPropertiesNVX*)(pProperties));
     if (pProperties)
     {
         transform_fromhost_VkImageViewAddressPropertiesNVX(sResourceTracker, (VkImageViewAddressPropertiesNVX*)(pProperties));
@@ -24189,13 +24189,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkStreamDescriptorSurfaceCreateInfoGGP*)pool->alloc(sizeof(const VkStreamDescriptorSurfaceCreateInfoGGP));
-        deepcopy_VkStreamDescriptorSurfaceCreateInfoGGP(pool, pCreateInfo, (VkStreamDescriptorSurfaceCreateInfoGGP*)(local_pCreateInfo));
+        deepcopy_VkStreamDescriptorSurfaceCreateInfoGGP(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkStreamDescriptorSurfaceCreateInfoGGP*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -24211,12 +24211,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkStreamDescriptorSurfaceCreateInfoGGP(sFeatureBits, (VkStreamDescriptorSurfaceCreateInfoGGP*)(local_pCreateInfo), countPtr);
+        count_VkStreamDescriptorSurfaceCreateInfoGGP(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStreamDescriptorSurfaceCreateInfoGGP*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -24233,7 +24233,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(stream, (VkStreamDescriptorSurfaceCreateInfoGGP*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStreamDescriptorSurfaceCreateInfoGGP*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -24241,7 +24241,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -24311,7 +24311,7 @@
         *countPtr += sizeof(VkImageUsageFlags);
         *countPtr += sizeof(VkImageCreateFlags);
         *countPtr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
-        count_VkExternalImageFormatPropertiesNV(sFeatureBits, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties), countPtr);
+        count_VkExternalImageFormatPropertiesNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceExternalImageFormatPropertiesNV = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceExternalImageFormatPropertiesNV);
@@ -24337,8 +24337,8 @@
     *streamPtrPtr += sizeof(VkImageCreateFlags);
     memcpy(*streamPtrPtr, (VkExternalMemoryHandleTypeFlagsNV*)&local_externalHandleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     *streamPtrPtr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
-    reservedmarshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties), streamPtrPtr);
-    unmarshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
+    reservedmarshal_VkExternalImageFormatPropertiesNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties), streamPtrPtr);
+    unmarshal_VkExternalImageFormatPropertiesNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
     if (pExternalImageFormatProperties)
     {
         transform_fromhost_VkExternalImageFormatPropertiesNV(sResourceTracker, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
@@ -24447,13 +24447,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkViSurfaceCreateInfoNN*)pool->alloc(sizeof(const VkViSurfaceCreateInfoNN));
-        deepcopy_VkViSurfaceCreateInfoNN(pool, pCreateInfo, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
+        deepcopy_VkViSurfaceCreateInfoNN(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -24469,12 +24469,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkViSurfaceCreateInfoNN(sFeatureBits, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo), countPtr);
+        count_VkViSurfaceCreateInfoNN(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -24491,7 +24491,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkViSurfaceCreateInfoNN(stream, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkViSurfaceCreateInfoNN(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViSurfaceCreateInfoNN*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -24499,7 +24499,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -24549,7 +24549,7 @@
     if (pConditionalRenderingBegin)
     {
         local_pConditionalRenderingBegin = (VkConditionalRenderingBeginInfoEXT*)pool->alloc(sizeof(const VkConditionalRenderingBeginInfoEXT));
-        deepcopy_VkConditionalRenderingBeginInfoEXT(pool, pConditionalRenderingBegin, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
+        deepcopy_VkConditionalRenderingBeginInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pConditionalRenderingBegin, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
     }
     if (local_pConditionalRenderingBegin)
     {
@@ -24560,7 +24560,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkConditionalRenderingBeginInfoEXT(sFeatureBits, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin), countPtr);
+        count_VkConditionalRenderingBeginInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin), countPtr);
     }
     uint32_t packetSize_vkCmdBeginConditionalRenderingEXT = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginConditionalRenderingEXT -= 8;
@@ -24576,7 +24576,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkConditionalRenderingBeginInfoEXT(stream, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin), streamPtrPtr);
+    reservedmarshal_VkConditionalRenderingBeginInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -24653,7 +24653,7 @@
         local_pViewportWScalings = (VkViewportWScalingNV*)pool->alloc(((viewportCount)) * sizeof(const VkViewportWScalingNV));
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            deepcopy_VkViewportWScalingNV(pool, pViewportWScalings + i, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
+            deepcopy_VkViewportWScalingNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewportWScalings + i, (VkViewportWScalingNV*)(local_pViewportWScalings + i));
         }
     }
     if (local_pViewportWScalings)
@@ -24672,7 +24672,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            count_VkViewportWScalingNV(sFeatureBits, (VkViewportWScalingNV*)(local_pViewportWScalings + i), countPtr);
+            count_VkViewportWScalingNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViewportWScalingNV*)(local_pViewportWScalings + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetViewportWScalingNV = 4 + 4 + count;
@@ -24695,7 +24695,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
     {
-        reservedmarshal_VkViewportWScalingNV(stream, (VkViewportWScalingNV*)(local_pViewportWScalings + i), streamPtrPtr);
+        reservedmarshal_VkViewportWScalingNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViewportWScalingNV*)(local_pViewportWScalings + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -24903,7 +24903,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkSurfaceCapabilities2EXT(sFeatureBits, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities), countPtr);
+        count_VkSurfaceCapabilities2EXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceSurfaceCapabilities2EXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceSurfaceCapabilities2EXT);
@@ -24921,8 +24921,8 @@
     *&cgen_var_1 = get_host_u64_VkSurfaceKHR((*&local_surface));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities), streamPtrPtr);
-    unmarshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
+    reservedmarshal_VkSurfaceCapabilities2EXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities), streamPtrPtr);
+    unmarshal_VkSurfaceCapabilities2EXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
     if (pSurfaceCapabilities)
     {
         transform_fromhost_VkSurfaceCapabilities2EXT(sResourceTracker, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
@@ -24961,7 +24961,7 @@
     if (pDisplayPowerInfo)
     {
         local_pDisplayPowerInfo = (VkDisplayPowerInfoEXT*)pool->alloc(sizeof(const VkDisplayPowerInfoEXT));
-        deepcopy_VkDisplayPowerInfoEXT(pool, pDisplayPowerInfo, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
+        deepcopy_VkDisplayPowerInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDisplayPowerInfo, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
     }
     if (local_pDisplayPowerInfo)
     {
@@ -24974,7 +24974,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkDisplayPowerInfoEXT(sFeatureBits, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo), countPtr);
+        count_VkDisplayPowerInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo), countPtr);
     }
     uint32_t packetSize_vkDisplayPowerControlEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkDisplayPowerControlEXT);
@@ -24992,7 +24992,7 @@
     *&cgen_var_1 = get_host_u64_VkDisplayKHR((*&local_display));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDisplayPowerInfoEXT(stream, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo), streamPtrPtr);
+    reservedmarshal_VkDisplayPowerInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo), streamPtrPtr);
     VkResult vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
     stream->read(&vkDisplayPowerControlEXT_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -25025,13 +25025,13 @@
     if (pDeviceEventInfo)
     {
         local_pDeviceEventInfo = (VkDeviceEventInfoEXT*)pool->alloc(sizeof(const VkDeviceEventInfoEXT));
-        deepcopy_VkDeviceEventInfoEXT(pool, pDeviceEventInfo, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
+        deepcopy_VkDeviceEventInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDeviceEventInfo, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pDeviceEventInfo)
@@ -25047,12 +25047,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDeviceEventInfoEXT(sFeatureBits, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo), countPtr);
+        count_VkDeviceEventInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -25069,7 +25069,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDeviceEventInfoEXT(stream, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo), streamPtrPtr);
+    reservedmarshal_VkDeviceEventInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -25077,7 +25077,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -25123,13 +25123,13 @@
     if (pDisplayEventInfo)
     {
         local_pDisplayEventInfo = (VkDisplayEventInfoEXT*)pool->alloc(sizeof(const VkDisplayEventInfoEXT));
-        deepcopy_VkDisplayEventInfoEXT(pool, pDisplayEventInfo, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
+        deepcopy_VkDisplayEventInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDisplayEventInfo, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pDisplayEventInfo)
@@ -25147,12 +25147,12 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkDisplayEventInfoEXT(sFeatureBits, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo), countPtr);
+        count_VkDisplayEventInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_2;
         *countPtr += 8;
@@ -25173,7 +25173,7 @@
     *&cgen_var_1 = get_host_u64_VkDisplayKHR((*&local_display));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDisplayEventInfoEXT(stream, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo), streamPtrPtr);
+    reservedmarshal_VkDisplayEventInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_2, 8);
@@ -25181,7 +25181,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_3;
@@ -25289,7 +25289,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkRefreshCycleDurationGOOGLE(sFeatureBits, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties), countPtr);
+        count_VkRefreshCycleDurationGOOGLE(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties), countPtr);
     }
     uint32_t packetSize_vkGetRefreshCycleDurationGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetRefreshCycleDurationGOOGLE);
@@ -25307,8 +25307,8 @@
     *&cgen_var_1 = get_host_u64_VkSwapchainKHR((*&local_swapchain));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties), streamPtrPtr);
-    unmarshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
+    reservedmarshal_VkRefreshCycleDurationGOOGLE(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties), streamPtrPtr);
+    unmarshal_VkRefreshCycleDurationGOOGLE(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
     if (pDisplayTimingProperties)
     {
         transform_fromhost_VkRefreshCycleDurationGOOGLE(sResourceTracker, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
@@ -25362,7 +25362,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
                 {
-                    count_VkPastPresentationTimingGOOGLE(sFeatureBits, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i), countPtr);
+                    count_VkPastPresentationTimingGOOGLE(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i), countPtr);
                 }
             }
         }
@@ -25402,7 +25402,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
         {
-            reservedmarshal_VkPastPresentationTimingGOOGLE(stream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i), streamPtrPtr);
+            reservedmarshal_VkPastPresentationTimingGOOGLE(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -25429,7 +25429,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
             {
-                unmarshal_VkPastPresentationTimingGOOGLE(stream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
+                unmarshal_VkPastPresentationTimingGOOGLE(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
             }
         }
     }
@@ -25492,7 +25492,7 @@
         local_pDiscardRectangles = (VkRect2D*)pool->alloc(((discardRectangleCount)) * sizeof(const VkRect2D));
         for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
         {
-            deepcopy_VkRect2D(pool, pDiscardRectangles + i, (VkRect2D*)(local_pDiscardRectangles + i));
+            deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pDiscardRectangles + i, (VkRect2D*)(local_pDiscardRectangles + i));
         }
     }
     if (local_pDiscardRectangles)
@@ -25511,7 +25511,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
         {
-            count_VkRect2D(sFeatureBits, (VkRect2D*)(local_pDiscardRectangles + i), countPtr);
+            count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pDiscardRectangles + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetDiscardRectangleEXT = 4 + 4 + count;
@@ -25534,7 +25534,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
     {
-        reservedmarshal_VkRect2D(stream, (VkRect2D*)(local_pDiscardRectangles + i), streamPtrPtr);
+        reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pDiscardRectangles + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -25579,7 +25579,7 @@
         local_pMetadata = (VkHdrMetadataEXT*)pool->alloc(((swapchainCount)) * sizeof(const VkHdrMetadataEXT));
         for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
         {
-            deepcopy_VkHdrMetadataEXT(pool, pMetadata + i, (VkHdrMetadataEXT*)(local_pMetadata + i));
+            deepcopy_VkHdrMetadataEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMetadata + i, (VkHdrMetadataEXT*)(local_pMetadata + i));
         }
     }
     if (local_pMetadata)
@@ -25601,7 +25601,7 @@
         }
         for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
         {
-            count_VkHdrMetadataEXT(sFeatureBits, (VkHdrMetadataEXT*)(local_pMetadata + i), countPtr);
+            count_VkHdrMetadataEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkHdrMetadataEXT*)(local_pMetadata + i), countPtr);
         }
     }
     uint32_t packetSize_vkSetHdrMetadataEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -25630,7 +25630,7 @@
     }
     for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
     {
-        reservedmarshal_VkHdrMetadataEXT(stream, (VkHdrMetadataEXT*)(local_pMetadata + i), streamPtrPtr);
+        reservedmarshal_VkHdrMetadataEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkHdrMetadataEXT*)(local_pMetadata + i), streamPtrPtr);
     }
     stream->flush();
     ++encodeCount;;
@@ -25664,13 +25664,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkIOSSurfaceCreateInfoMVK*)pool->alloc(sizeof(const VkIOSSurfaceCreateInfoMVK));
-        deepcopy_VkIOSSurfaceCreateInfoMVK(pool, pCreateInfo, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
+        deepcopy_VkIOSSurfaceCreateInfoMVK(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -25686,12 +25686,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkIOSSurfaceCreateInfoMVK(sFeatureBits, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo), countPtr);
+        count_VkIOSSurfaceCreateInfoMVK(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -25708,7 +25708,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkIOSSurfaceCreateInfoMVK(stream, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkIOSSurfaceCreateInfoMVK(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -25716,7 +25716,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -25761,13 +25761,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkMacOSSurfaceCreateInfoMVK*)pool->alloc(sizeof(const VkMacOSSurfaceCreateInfoMVK));
-        deepcopy_VkMacOSSurfaceCreateInfoMVK(pool, pCreateInfo, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
+        deepcopy_VkMacOSSurfaceCreateInfoMVK(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -25783,12 +25783,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkMacOSSurfaceCreateInfoMVK(sFeatureBits, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo), countPtr);
+        count_VkMacOSSurfaceCreateInfoMVK(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -25805,7 +25805,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMacOSSurfaceCreateInfoMVK(stream, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkMacOSSurfaceCreateInfoMVK(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -25813,7 +25813,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -26125,7 +26125,7 @@
     if (pNameInfo)
     {
         local_pNameInfo = (VkDebugUtilsObjectNameInfoEXT*)pool->alloc(sizeof(const VkDebugUtilsObjectNameInfoEXT));
-        deepcopy_VkDebugUtilsObjectNameInfoEXT(pool, pNameInfo, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
+        deepcopy_VkDebugUtilsObjectNameInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pNameInfo, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
     }
     if (local_pNameInfo)
     {
@@ -26136,7 +26136,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsObjectNameInfoEXT(sFeatureBits, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo), countPtr);
+        count_VkDebugUtilsObjectNameInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo), countPtr);
     }
     uint32_t packetSize_vkSetDebugUtilsObjectNameEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkSetDebugUtilsObjectNameEXT);
@@ -26150,7 +26150,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugUtilsObjectNameInfoEXT(stream, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsObjectNameInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo), streamPtrPtr);
     VkResult vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
     stream->read(&vkSetDebugUtilsObjectNameEXT_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -26180,7 +26180,7 @@
     if (pTagInfo)
     {
         local_pTagInfo = (VkDebugUtilsObjectTagInfoEXT*)pool->alloc(sizeof(const VkDebugUtilsObjectTagInfoEXT));
-        deepcopy_VkDebugUtilsObjectTagInfoEXT(pool, pTagInfo, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
+        deepcopy_VkDebugUtilsObjectTagInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pTagInfo, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
     }
     if (local_pTagInfo)
     {
@@ -26191,7 +26191,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsObjectTagInfoEXT(sFeatureBits, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo), countPtr);
+        count_VkDebugUtilsObjectTagInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo), countPtr);
     }
     uint32_t packetSize_vkSetDebugUtilsObjectTagEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkSetDebugUtilsObjectTagEXT);
@@ -26205,7 +26205,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugUtilsObjectTagInfoEXT(stream, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsObjectTagInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo), streamPtrPtr);
     VkResult vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
     stream->read(&vkSetDebugUtilsObjectTagEXT_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -26235,7 +26235,7 @@
     if (pLabelInfo)
     {
         local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
-        deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        deepcopy_VkDebugUtilsLabelEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     if (local_pLabelInfo)
     {
@@ -26246,7 +26246,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsLabelEXT(sFeatureBits, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
+        count_VkDebugUtilsLabelEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
     }
     uint32_t packetSize_vkQueueBeginDebugUtilsLabelEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkQueueBeginDebugUtilsLabelEXT);
@@ -26260,7 +26260,7 @@
     *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsLabelEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
     stream->flush();
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -26327,7 +26327,7 @@
     if (pLabelInfo)
     {
         local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
-        deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        deepcopy_VkDebugUtilsLabelEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     if (local_pLabelInfo)
     {
@@ -26338,7 +26338,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsLabelEXT(sFeatureBits, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
+        count_VkDebugUtilsLabelEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
     }
     uint32_t packetSize_vkQueueInsertDebugUtilsLabelEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkQueueInsertDebugUtilsLabelEXT);
@@ -26352,7 +26352,7 @@
     *&cgen_var_0 = get_host_u64_VkQueue((*&local_queue));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsLabelEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
     stream->flush();
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -26380,7 +26380,7 @@
     if (pLabelInfo)
     {
         local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
-        deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        deepcopy_VkDebugUtilsLabelEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     if (local_pLabelInfo)
     {
@@ -26391,7 +26391,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsLabelEXT(sFeatureBits, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
+        count_VkDebugUtilsLabelEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
     }
     uint32_t packetSize_vkCmdBeginDebugUtilsLabelEXT = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdBeginDebugUtilsLabelEXT -= 8;
@@ -26407,7 +26407,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsLabelEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -26474,7 +26474,7 @@
     if (pLabelInfo)
     {
         local_pLabelInfo = (VkDebugUtilsLabelEXT*)pool->alloc(sizeof(const VkDebugUtilsLabelEXT));
-        deepcopy_VkDebugUtilsLabelEXT(pool, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        deepcopy_VkDebugUtilsLabelEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pLabelInfo, (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     if (local_pLabelInfo)
     {
@@ -26485,7 +26485,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsLabelEXT(sFeatureBits, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
+        count_VkDebugUtilsLabelEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), countPtr);
     }
     uint32_t packetSize_vkCmdInsertDebugUtilsLabelEXT = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdInsertDebugUtilsLabelEXT -= 8;
@@ -26501,7 +26501,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkDebugUtilsLabelEXT(stream, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsLabelEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsLabelEXT*)(local_pLabelInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -26531,13 +26531,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDebugUtilsMessengerCreateInfoEXT*)pool->alloc(sizeof(const VkDebugUtilsMessengerCreateInfoEXT));
-        deepcopy_VkDebugUtilsMessengerCreateInfoEXT(pool, pCreateInfo, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkDebugUtilsMessengerCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -26553,12 +26553,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDebugUtilsMessengerCreateInfoEXT(sFeatureBits, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkDebugUtilsMessengerCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -26575,7 +26575,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDebugUtilsMessengerCreateInfoEXT(stream, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsMessengerCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -26583,7 +26583,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -26628,7 +26628,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -26646,7 +26646,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyDebugUtilsMessengerEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -26672,7 +26672,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkDebugUtilsMessengerEXT((VkDebugUtilsMessengerEXT*)&messenger);
     stream->flush();
@@ -26708,7 +26708,7 @@
     if (pCallbackData)
     {
         local_pCallbackData = (VkDebugUtilsMessengerCallbackDataEXT*)pool->alloc(sizeof(const VkDebugUtilsMessengerCallbackDataEXT));
-        deepcopy_VkDebugUtilsMessengerCallbackDataEXT(pool, pCallbackData, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
+        deepcopy_VkDebugUtilsMessengerCallbackDataEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCallbackData, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
     }
     if (local_pCallbackData)
     {
@@ -26721,7 +26721,7 @@
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT);
         *countPtr += sizeof(VkDebugUtilsMessageTypeFlagsEXT);
-        count_VkDebugUtilsMessengerCallbackDataEXT(sFeatureBits, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData), countPtr);
+        count_VkDebugUtilsMessengerCallbackDataEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData), countPtr);
     }
     uint32_t packetSize_vkSubmitDebugUtilsMessageEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkSubmitDebugUtilsMessageEXT);
@@ -26739,7 +26739,7 @@
     *streamPtrPtr += sizeof(VkDebugUtilsMessageSeverityFlagBitsEXT);
     memcpy(*streamPtrPtr, (VkDebugUtilsMessageTypeFlagsEXT*)&local_messageTypes, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
     *streamPtrPtr += sizeof(VkDebugUtilsMessageTypeFlagsEXT);
-    reservedmarshal_VkDebugUtilsMessengerCallbackDataEXT(stream, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData), streamPtrPtr);
+    reservedmarshal_VkDebugUtilsMessengerCallbackDataEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData), streamPtrPtr);
     stream->flush();
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -26774,7 +26774,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(AHardwareBuffer);
-        count_VkAndroidHardwareBufferPropertiesANDROID(sFeatureBits, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties), countPtr);
+        count_VkAndroidHardwareBufferPropertiesANDROID(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties), countPtr);
     }
     uint32_t packetSize_vkGetAndroidHardwareBufferPropertiesANDROID = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetAndroidHardwareBufferPropertiesANDROID);
@@ -26790,8 +26790,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (AHardwareBuffer*)local_buffer, sizeof(AHardwareBuffer));
     *streamPtrPtr += sizeof(AHardwareBuffer);
-    reservedmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties), streamPtrPtr);
-    unmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
+    reservedmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties), streamPtrPtr);
+    unmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
     if (pProperties)
     {
         transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(sResourceTracker, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
@@ -26826,7 +26826,7 @@
     if (pInfo)
     {
         local_pInfo = (VkMemoryGetAndroidHardwareBufferInfoANDROID*)pool->alloc(sizeof(const VkMemoryGetAndroidHardwareBufferInfoANDROID));
-        deepcopy_VkMemoryGetAndroidHardwareBufferInfoANDROID(pool, pInfo, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
+        deepcopy_VkMemoryGetAndroidHardwareBufferInfoANDROID(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -26837,7 +26837,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkMemoryGetAndroidHardwareBufferInfoANDROID(sFeatureBits, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo), countPtr);
+        count_VkMemoryGetAndroidHardwareBufferInfoANDROID(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo), countPtr);
         *countPtr += sizeof(AHardwareBuffer*);
     }
     uint32_t packetSize_vkGetMemoryAndroidHardwareBufferANDROID = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -26852,7 +26852,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(stream, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
     *streamPtrPtr += sizeof(AHardwareBuffer*);
     stream->read((AHardwareBuffer**)pBuffer, sizeof(AHardwareBuffer*));
@@ -26899,7 +26899,7 @@
     if (pSampleLocationsInfo)
     {
         local_pSampleLocationsInfo = (VkSampleLocationsInfoEXT*)pool->alloc(sizeof(const VkSampleLocationsInfoEXT));
-        deepcopy_VkSampleLocationsInfoEXT(pool, pSampleLocationsInfo, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
+        deepcopy_VkSampleLocationsInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSampleLocationsInfo, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
     }
     if (local_pSampleLocationsInfo)
     {
@@ -26910,7 +26910,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkSampleLocationsInfoEXT(sFeatureBits, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo), countPtr);
+        count_VkSampleLocationsInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo), countPtr);
     }
     uint32_t packetSize_vkCmdSetSampleLocationsEXT = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetSampleLocationsEXT -= 8;
@@ -26926,7 +26926,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkSampleLocationsInfoEXT(stream, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo), streamPtrPtr);
+    reservedmarshal_VkSampleLocationsInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -26957,7 +26957,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkSampleCountFlagBits);
-        count_VkMultisamplePropertiesEXT(sFeatureBits, (VkMultisamplePropertiesEXT*)(pMultisampleProperties), countPtr);
+        count_VkMultisamplePropertiesEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMultisamplePropertiesEXT*)(pMultisampleProperties), countPtr);
     }
     uint32_t packetSize_vkGetPhysicalDeviceMultisamplePropertiesEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPhysicalDeviceMultisamplePropertiesEXT);
@@ -26973,8 +26973,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
     *streamPtrPtr += sizeof(VkSampleCountFlagBits);
-    reservedmarshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties), streamPtrPtr);
-    unmarshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
+    reservedmarshal_VkMultisamplePropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMultisamplePropertiesEXT*)(pMultisampleProperties), streamPtrPtr);
+    unmarshal_VkMultisamplePropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
     if (pMultisampleProperties)
     {
         transform_fromhost_VkMultisamplePropertiesEXT(sResourceTracker, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
@@ -27024,7 +27024,7 @@
         *countPtr += 1 * 8;
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
-        count_VkImageDrmFormatModifierPropertiesEXT(sFeatureBits, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties), countPtr);
+        count_VkImageDrmFormatModifierPropertiesEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties), countPtr);
     }
     uint32_t packetSize_vkGetImageDrmFormatModifierPropertiesEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetImageDrmFormatModifierPropertiesEXT);
@@ -27042,8 +27042,8 @@
     *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageDrmFormatModifierPropertiesEXT(stream, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties), streamPtrPtr);
-    unmarshal_VkImageDrmFormatModifierPropertiesEXT(stream, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
+    reservedmarshal_VkImageDrmFormatModifierPropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties), streamPtrPtr);
+    unmarshal_VkImageDrmFormatModifierPropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
     if (pProperties)
     {
         transform_fromhost_VkImageDrmFormatModifierPropertiesEXT(sResourceTracker, (VkImageDrmFormatModifierPropertiesEXT*)(pProperties));
@@ -27082,13 +27082,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkValidationCacheCreateInfoEXT*)pool->alloc(sizeof(const VkValidationCacheCreateInfoEXT));
-        deepcopy_VkValidationCacheCreateInfoEXT(pool, pCreateInfo, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkValidationCacheCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -27104,12 +27104,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkValidationCacheCreateInfoEXT(sFeatureBits, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkValidationCacheCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -27126,7 +27126,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkValidationCacheCreateInfoEXT(stream, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkValidationCacheCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -27134,7 +27134,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -27179,7 +27179,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -27197,7 +27197,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyValidationCacheEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -27223,7 +27223,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkValidationCacheEXT((VkValidationCacheEXT*)&validationCache);
     stream->flush();
@@ -27507,7 +27507,7 @@
         local_pShadingRatePalettes = (VkShadingRatePaletteNV*)pool->alloc(((viewportCount)) * sizeof(const VkShadingRatePaletteNV));
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            deepcopy_VkShadingRatePaletteNV(pool, pShadingRatePalettes + i, (VkShadingRatePaletteNV*)(local_pShadingRatePalettes + i));
+            deepcopy_VkShadingRatePaletteNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pShadingRatePalettes + i, (VkShadingRatePaletteNV*)(local_pShadingRatePalettes + i));
         }
     }
     if (local_pShadingRatePalettes)
@@ -27526,7 +27526,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            count_VkShadingRatePaletteNV(sFeatureBits, (VkShadingRatePaletteNV*)(local_pShadingRatePalettes + i), countPtr);
+            count_VkShadingRatePaletteNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkShadingRatePaletteNV*)(local_pShadingRatePalettes + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetViewportShadingRatePaletteNV = 4 + 4 + count;
@@ -27549,7 +27549,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
     {
-        reservedmarshal_VkShadingRatePaletteNV(stream, (VkShadingRatePaletteNV*)(local_pShadingRatePalettes + i), streamPtrPtr);
+        reservedmarshal_VkShadingRatePaletteNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkShadingRatePaletteNV*)(local_pShadingRatePalettes + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -27585,7 +27585,7 @@
         local_pCustomSampleOrders = (VkCoarseSampleOrderCustomNV*)pool->alloc(((customSampleOrderCount)) * sizeof(const VkCoarseSampleOrderCustomNV));
         for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i)
         {
-            deepcopy_VkCoarseSampleOrderCustomNV(pool, pCustomSampleOrders + i, (VkCoarseSampleOrderCustomNV*)(local_pCustomSampleOrders + i));
+            deepcopy_VkCoarseSampleOrderCustomNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCustomSampleOrders + i, (VkCoarseSampleOrderCustomNV*)(local_pCustomSampleOrders + i));
         }
     }
     if (local_pCustomSampleOrders)
@@ -27604,7 +27604,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i)
         {
-            count_VkCoarseSampleOrderCustomNV(sFeatureBits, (VkCoarseSampleOrderCustomNV*)(local_pCustomSampleOrders + i), countPtr);
+            count_VkCoarseSampleOrderCustomNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCoarseSampleOrderCustomNV*)(local_pCustomSampleOrders + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetCoarseSampleOrderNV = 4 + 4 + count;
@@ -27627,7 +27627,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((customSampleOrderCount)); ++i)
     {
-        reservedmarshal_VkCoarseSampleOrderCustomNV(stream, (VkCoarseSampleOrderCustomNV*)(local_pCustomSampleOrders + i), streamPtrPtr);
+        reservedmarshal_VkCoarseSampleOrderCustomNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCoarseSampleOrderCustomNV*)(local_pCustomSampleOrders + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -27660,13 +27660,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkAccelerationStructureCreateInfoNV*)pool->alloc(sizeof(const VkAccelerationStructureCreateInfoNV));
-        deepcopy_VkAccelerationStructureCreateInfoNV(pool, pCreateInfo, (VkAccelerationStructureCreateInfoNV*)(local_pCreateInfo));
+        deepcopy_VkAccelerationStructureCreateInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkAccelerationStructureCreateInfoNV*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -27682,12 +27682,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAccelerationStructureCreateInfoNV(sFeatureBits, (VkAccelerationStructureCreateInfoNV*)(local_pCreateInfo), countPtr);
+        count_VkAccelerationStructureCreateInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureCreateInfoNV*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -27704,7 +27704,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAccelerationStructureCreateInfoNV(stream, (VkAccelerationStructureCreateInfoNV*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkAccelerationStructureCreateInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureCreateInfoNV*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -27712,7 +27712,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -27757,7 +27757,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -27775,7 +27775,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyAccelerationStructureNV = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -27801,7 +27801,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkAccelerationStructureNV((VkAccelerationStructureNV*)&accelerationStructure);
     stream->flush();
@@ -27832,7 +27832,7 @@
     if (pInfo)
     {
         local_pInfo = (VkAccelerationStructureMemoryRequirementsInfoNV*)pool->alloc(sizeof(const VkAccelerationStructureMemoryRequirementsInfoNV));
-        deepcopy_VkAccelerationStructureMemoryRequirementsInfoNV(pool, pInfo, (VkAccelerationStructureMemoryRequirementsInfoNV*)(local_pInfo));
+        deepcopy_VkAccelerationStructureMemoryRequirementsInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkAccelerationStructureMemoryRequirementsInfoNV*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -27843,8 +27843,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAccelerationStructureMemoryRequirementsInfoNV(sFeatureBits, (VkAccelerationStructureMemoryRequirementsInfoNV*)(local_pInfo), countPtr);
-        count_VkMemoryRequirements2KHR(sFeatureBits, (VkMemoryRequirements2KHR*)(pMemoryRequirements), countPtr);
+        count_VkAccelerationStructureMemoryRequirementsInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureMemoryRequirementsInfoNV*)(local_pInfo), countPtr);
+        count_VkMemoryRequirements2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2KHR*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetAccelerationStructureMemoryRequirementsNV = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetAccelerationStructureMemoryRequirementsNV);
@@ -27858,9 +27858,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(stream, (VkAccelerationStructureMemoryRequirementsInfoNV*)(local_pInfo), streamPtrPtr);
-    reservedmarshal_VkMemoryRequirements2KHR(stream, (VkMemoryRequirements2KHR*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements2KHR(stream, (VkMemoryRequirements2KHR*)(pMemoryRequirements));
+    reservedmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureMemoryRequirementsInfoNV*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2KHR*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2KHR*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements2KHR(sResourceTracker, (VkMemoryRequirements2KHR*)(pMemoryRequirements));
@@ -27896,7 +27896,7 @@
         local_pBindInfos = (VkBindAccelerationStructureMemoryInfoNV*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindAccelerationStructureMemoryInfoNV));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindAccelerationStructureMemoryInfoNV(pool, pBindInfos + i, (VkBindAccelerationStructureMemoryInfoNV*)(local_pBindInfos + i));
+            deepcopy_VkBindAccelerationStructureMemoryInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfos + i, (VkBindAccelerationStructureMemoryInfoNV*)(local_pBindInfos + i));
         }
     }
     if (local_pBindInfos)
@@ -27914,7 +27914,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindAccelerationStructureMemoryInfoNV(sFeatureBits, (VkBindAccelerationStructureMemoryInfoNV*)(local_pBindInfos + i), countPtr);
+            count_VkBindAccelerationStructureMemoryInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindAccelerationStructureMemoryInfoNV*)(local_pBindInfos + i), countPtr);
         }
     }
     uint32_t packetSize_vkBindAccelerationStructureMemoryNV = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -27933,7 +27933,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindAccelerationStructureMemoryInfoNV(stream, (VkBindAccelerationStructureMemoryInfoNV*)(local_pBindInfos + i), streamPtrPtr);
+        reservedmarshal_VkBindAccelerationStructureMemoryInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindAccelerationStructureMemoryInfoNV*)(local_pBindInfos + i), streamPtrPtr);
     }
     VkResult vkBindAccelerationStructureMemoryNV_VkResult_return = (VkResult)0;
     stream->read(&vkBindAccelerationStructureMemoryNV_VkResult_return, sizeof(VkResult));
@@ -27978,7 +27978,7 @@
     if (pInfo)
     {
         local_pInfo = (VkAccelerationStructureInfoNV*)pool->alloc(sizeof(const VkAccelerationStructureInfoNV));
-        deepcopy_VkAccelerationStructureInfoNV(pool, pInfo, (VkAccelerationStructureInfoNV*)(local_pInfo));
+        deepcopy_VkAccelerationStructureInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkAccelerationStructureInfoNV*)(local_pInfo));
     }
     local_instanceData = instanceData;
     local_instanceOffset = instanceOffset;
@@ -27996,7 +27996,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAccelerationStructureInfoNV(sFeatureBits, (VkAccelerationStructureInfoNV*)(local_pInfo), countPtr);
+        count_VkAccelerationStructureInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureInfoNV*)(local_pInfo), countPtr);
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkDeviceSize);
@@ -28023,7 +28023,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkAccelerationStructureInfoNV(stream, (VkAccelerationStructureInfoNV*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkAccelerationStructureInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureInfoNV*)(local_pInfo), streamPtrPtr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&local_instanceData));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -28283,14 +28283,14 @@
         local_pCreateInfos = (VkRayTracingPipelineCreateInfoNV*)pool->alloc(((createInfoCount)) * sizeof(const VkRayTracingPipelineCreateInfoNV));
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            deepcopy_VkRayTracingPipelineCreateInfoNV(pool, pCreateInfos + i, (VkRayTracingPipelineCreateInfoNV*)(local_pCreateInfos + i));
+            deepcopy_VkRayTracingPipelineCreateInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i, (VkRayTracingPipelineCreateInfoNV*)(local_pCreateInfos + i));
         }
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfos)
@@ -28314,13 +28314,13 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            count_VkRayTracingPipelineCreateInfoNV(sFeatureBits, (VkRayTracingPipelineCreateInfoNV*)(local_pCreateInfos + i), countPtr);
+            count_VkRayTracingPipelineCreateInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRayTracingPipelineCreateInfoNV*)(local_pCreateInfos + i), countPtr);
         }
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         if (((createInfoCount)))
         {
@@ -28347,7 +28347,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
     {
-        reservedmarshal_VkRayTracingPipelineCreateInfoNV(stream, (VkRayTracingPipelineCreateInfoNV*)(local_pCreateInfos + i), streamPtrPtr);
+        reservedmarshal_VkRayTracingPipelineCreateInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRayTracingPipelineCreateInfoNV*)(local_pCreateInfos + i), streamPtrPtr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)local_pAllocator;
@@ -28356,7 +28356,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     if (((createInfoCount)))
@@ -28784,7 +28784,7 @@
         {
             *countPtr += sizeof(uint8_t);
         }
-        count_VkMemoryHostPointerPropertiesEXT(sFeatureBits, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties), countPtr);
+        count_VkMemoryHostPointerPropertiesEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties), countPtr);
     }
     uint32_t packetSize_vkGetMemoryHostPointerPropertiesEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetMemoryHostPointerPropertiesEXT);
@@ -28810,8 +28810,8 @@
         memcpy(*streamPtrPtr, (void*)local_pHostPointer, sizeof(uint8_t));
         *streamPtrPtr += sizeof(uint8_t);
     }
-    reservedmarshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties), streamPtrPtr);
-    unmarshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
+    reservedmarshal_VkMemoryHostPointerPropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties), streamPtrPtr);
+    unmarshal_VkMemoryHostPointerPropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
     if (pMemoryHostPointerProperties)
     {
         transform_fromhost_VkMemoryHostPointerPropertiesEXT(sResourceTracker, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
@@ -29025,7 +29025,7 @@
         local_pTimestampInfos = (VkCalibratedTimestampInfoEXT*)pool->alloc(((timestampCount)) * sizeof(const VkCalibratedTimestampInfoEXT));
         for (uint32_t i = 0; i < (uint32_t)((timestampCount)); ++i)
         {
-            deepcopy_VkCalibratedTimestampInfoEXT(pool, pTimestampInfos + i, (VkCalibratedTimestampInfoEXT*)(local_pTimestampInfos + i));
+            deepcopy_VkCalibratedTimestampInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pTimestampInfos + i, (VkCalibratedTimestampInfoEXT*)(local_pTimestampInfos + i));
         }
     }
     if (local_pTimestampInfos)
@@ -29043,7 +29043,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((timestampCount)); ++i)
         {
-            count_VkCalibratedTimestampInfoEXT(sFeatureBits, (VkCalibratedTimestampInfoEXT*)(local_pTimestampInfos + i), countPtr);
+            count_VkCalibratedTimestampInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCalibratedTimestampInfoEXT*)(local_pTimestampInfos + i), countPtr);
         }
         *countPtr += ((timestampCount)) * sizeof(uint64_t);
         *countPtr += sizeof(uint64_t);
@@ -29064,7 +29064,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((timestampCount)); ++i)
     {
-        reservedmarshal_VkCalibratedTimestampInfoEXT(stream, (VkCalibratedTimestampInfoEXT*)(local_pTimestampInfos + i), streamPtrPtr);
+        reservedmarshal_VkCalibratedTimestampInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCalibratedTimestampInfoEXT*)(local_pTimestampInfos + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (uint64_t*)pTimestamps, ((timestampCount)) * sizeof(uint64_t));
     *streamPtrPtr += ((timestampCount)) * sizeof(uint64_t);
@@ -29332,7 +29332,7 @@
         local_pExclusiveScissors = (VkRect2D*)pool->alloc(((exclusiveScissorCount)) * sizeof(const VkRect2D));
         for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i)
         {
-            deepcopy_VkRect2D(pool, pExclusiveScissors + i, (VkRect2D*)(local_pExclusiveScissors + i));
+            deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pExclusiveScissors + i, (VkRect2D*)(local_pExclusiveScissors + i));
         }
     }
     if (local_pExclusiveScissors)
@@ -29351,7 +29351,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i)
         {
-            count_VkRect2D(sFeatureBits, (VkRect2D*)(local_pExclusiveScissors + i), countPtr);
+            count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pExclusiveScissors + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetExclusiveScissorNV = 4 + 4 + count;
@@ -29374,7 +29374,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((exclusiveScissorCount)); ++i)
     {
-        reservedmarshal_VkRect2D(stream, (VkRect2D*)(local_pExclusiveScissors + i), streamPtrPtr);
+        reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pExclusiveScissors + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -29479,7 +29479,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
                 {
-                    count_VkCheckpointDataNV(sFeatureBits, (VkCheckpointDataNV*)(pCheckpointData + i), countPtr);
+                    count_VkCheckpointDataNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCheckpointDataNV*)(pCheckpointData + i), countPtr);
                 }
             }
         }
@@ -29515,7 +29515,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
         {
-            reservedmarshal_VkCheckpointDataNV(stream, (VkCheckpointDataNV*)(pCheckpointData + i), streamPtrPtr);
+            reservedmarshal_VkCheckpointDataNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCheckpointDataNV*)(pCheckpointData + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -29542,7 +29542,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
             {
-                unmarshal_VkCheckpointDataNV(stream, (VkCheckpointDataNV*)(pCheckpointData + i));
+                unmarshal_VkCheckpointDataNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCheckpointDataNV*)(pCheckpointData + i));
             }
         }
     }
@@ -29586,7 +29586,7 @@
     if (pInitializeInfo)
     {
         local_pInitializeInfo = (VkInitializePerformanceApiInfoINTEL*)pool->alloc(sizeof(const VkInitializePerformanceApiInfoINTEL));
-        deepcopy_VkInitializePerformanceApiInfoINTEL(pool, pInitializeInfo, (VkInitializePerformanceApiInfoINTEL*)(local_pInitializeInfo));
+        deepcopy_VkInitializePerformanceApiInfoINTEL(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInitializeInfo, (VkInitializePerformanceApiInfoINTEL*)(local_pInitializeInfo));
     }
     if (local_pInitializeInfo)
     {
@@ -29597,7 +29597,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkInitializePerformanceApiInfoINTEL(sFeatureBits, (VkInitializePerformanceApiInfoINTEL*)(local_pInitializeInfo), countPtr);
+        count_VkInitializePerformanceApiInfoINTEL(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkInitializePerformanceApiInfoINTEL*)(local_pInitializeInfo), countPtr);
     }
     uint32_t packetSize_vkInitializePerformanceApiINTEL = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkInitializePerformanceApiINTEL);
@@ -29611,7 +29611,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkInitializePerformanceApiInfoINTEL(stream, (VkInitializePerformanceApiInfoINTEL*)(local_pInitializeInfo), streamPtrPtr);
+    reservedmarshal_VkInitializePerformanceApiInfoINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkInitializePerformanceApiInfoINTEL*)(local_pInitializeInfo), streamPtrPtr);
     VkResult vkInitializePerformanceApiINTEL_VkResult_return = (VkResult)0;
     stream->read(&vkInitializePerformanceApiINTEL_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -29680,7 +29680,7 @@
     if (pMarkerInfo)
     {
         local_pMarkerInfo = (VkPerformanceMarkerInfoINTEL*)pool->alloc(sizeof(const VkPerformanceMarkerInfoINTEL));
-        deepcopy_VkPerformanceMarkerInfoINTEL(pool, pMarkerInfo, (VkPerformanceMarkerInfoINTEL*)(local_pMarkerInfo));
+        deepcopy_VkPerformanceMarkerInfoINTEL(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMarkerInfo, (VkPerformanceMarkerInfoINTEL*)(local_pMarkerInfo));
     }
     if (local_pMarkerInfo)
     {
@@ -29691,7 +29691,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPerformanceMarkerInfoINTEL(sFeatureBits, (VkPerformanceMarkerInfoINTEL*)(local_pMarkerInfo), countPtr);
+        count_VkPerformanceMarkerInfoINTEL(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceMarkerInfoINTEL*)(local_pMarkerInfo), countPtr);
     }
     uint32_t packetSize_vkCmdSetPerformanceMarkerINTEL = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPerformanceMarkerINTEL -= 8;
@@ -29707,7 +29707,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkPerformanceMarkerInfoINTEL(stream, (VkPerformanceMarkerInfoINTEL*)(local_pMarkerInfo), streamPtrPtr);
+    reservedmarshal_VkPerformanceMarkerInfoINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceMarkerInfoINTEL*)(local_pMarkerInfo), streamPtrPtr);
     VkResult vkCmdSetPerformanceMarkerINTEL_VkResult_return = (VkResult)0;
     stream->read(&vkCmdSetPerformanceMarkerINTEL_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -29737,7 +29737,7 @@
     if (pMarkerInfo)
     {
         local_pMarkerInfo = (VkPerformanceStreamMarkerInfoINTEL*)pool->alloc(sizeof(const VkPerformanceStreamMarkerInfoINTEL));
-        deepcopy_VkPerformanceStreamMarkerInfoINTEL(pool, pMarkerInfo, (VkPerformanceStreamMarkerInfoINTEL*)(local_pMarkerInfo));
+        deepcopy_VkPerformanceStreamMarkerInfoINTEL(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMarkerInfo, (VkPerformanceStreamMarkerInfoINTEL*)(local_pMarkerInfo));
     }
     if (local_pMarkerInfo)
     {
@@ -29748,7 +29748,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPerformanceStreamMarkerInfoINTEL(sFeatureBits, (VkPerformanceStreamMarkerInfoINTEL*)(local_pMarkerInfo), countPtr);
+        count_VkPerformanceStreamMarkerInfoINTEL(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceStreamMarkerInfoINTEL*)(local_pMarkerInfo), countPtr);
     }
     uint32_t packetSize_vkCmdSetPerformanceStreamMarkerINTEL = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPerformanceStreamMarkerINTEL -= 8;
@@ -29764,7 +29764,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkPerformanceStreamMarkerInfoINTEL(stream, (VkPerformanceStreamMarkerInfoINTEL*)(local_pMarkerInfo), streamPtrPtr);
+    reservedmarshal_VkPerformanceStreamMarkerInfoINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceStreamMarkerInfoINTEL*)(local_pMarkerInfo), streamPtrPtr);
     VkResult vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return = (VkResult)0;
     stream->read(&vkCmdSetPerformanceStreamMarkerINTEL_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -29794,7 +29794,7 @@
     if (pOverrideInfo)
     {
         local_pOverrideInfo = (VkPerformanceOverrideInfoINTEL*)pool->alloc(sizeof(const VkPerformanceOverrideInfoINTEL));
-        deepcopy_VkPerformanceOverrideInfoINTEL(pool, pOverrideInfo, (VkPerformanceOverrideInfoINTEL*)(local_pOverrideInfo));
+        deepcopy_VkPerformanceOverrideInfoINTEL(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pOverrideInfo, (VkPerformanceOverrideInfoINTEL*)(local_pOverrideInfo));
     }
     if (local_pOverrideInfo)
     {
@@ -29805,7 +29805,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPerformanceOverrideInfoINTEL(sFeatureBits, (VkPerformanceOverrideInfoINTEL*)(local_pOverrideInfo), countPtr);
+        count_VkPerformanceOverrideInfoINTEL(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceOverrideInfoINTEL*)(local_pOverrideInfo), countPtr);
     }
     uint32_t packetSize_vkCmdSetPerformanceOverrideINTEL = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdSetPerformanceOverrideINTEL -= 8;
@@ -29821,7 +29821,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkPerformanceOverrideInfoINTEL(stream, (VkPerformanceOverrideInfoINTEL*)(local_pOverrideInfo), streamPtrPtr);
+    reservedmarshal_VkPerformanceOverrideInfoINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceOverrideInfoINTEL*)(local_pOverrideInfo), streamPtrPtr);
     VkResult vkCmdSetPerformanceOverrideINTEL_VkResult_return = (VkResult)0;
     stream->read(&vkCmdSetPerformanceOverrideINTEL_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -29852,7 +29852,7 @@
     if (pAcquireInfo)
     {
         local_pAcquireInfo = (VkPerformanceConfigurationAcquireInfoINTEL*)pool->alloc(sizeof(const VkPerformanceConfigurationAcquireInfoINTEL));
-        deepcopy_VkPerformanceConfigurationAcquireInfoINTEL(pool, pAcquireInfo, (VkPerformanceConfigurationAcquireInfoINTEL*)(local_pAcquireInfo));
+        deepcopy_VkPerformanceConfigurationAcquireInfoINTEL(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAcquireInfo, (VkPerformanceConfigurationAcquireInfoINTEL*)(local_pAcquireInfo));
     }
     if (local_pAcquireInfo)
     {
@@ -29863,7 +29863,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPerformanceConfigurationAcquireInfoINTEL(sFeatureBits, (VkPerformanceConfigurationAcquireInfoINTEL*)(local_pAcquireInfo), countPtr);
+        count_VkPerformanceConfigurationAcquireInfoINTEL(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceConfigurationAcquireInfoINTEL*)(local_pAcquireInfo), countPtr);
         *countPtr += 8;
     }
     uint32_t packetSize_vkAcquirePerformanceConfigurationINTEL = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -29878,7 +29878,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPerformanceConfigurationAcquireInfoINTEL(stream, (VkPerformanceConfigurationAcquireInfoINTEL*)(local_pAcquireInfo), streamPtrPtr);
+    reservedmarshal_VkPerformanceConfigurationAcquireInfoINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceConfigurationAcquireInfoINTEL*)(local_pAcquireInfo), streamPtrPtr);
     uint64_t cgen_var_1 = (uint64_t)(*pConfiguration);
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
     android::base::Stream::toBe64((uint8_t*)(*streamPtrPtr));
@@ -30015,7 +30015,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkPerformanceParameterTypeINTEL);
-        count_VkPerformanceValueINTEL(sFeatureBits, (VkPerformanceValueINTEL*)(pValue), countPtr);
+        count_VkPerformanceValueINTEL(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceValueINTEL*)(pValue), countPtr);
     }
     uint32_t packetSize_vkGetPerformanceParameterINTEL = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetPerformanceParameterINTEL);
@@ -30031,8 +30031,8 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkPerformanceParameterTypeINTEL*)&local_parameter, sizeof(VkPerformanceParameterTypeINTEL));
     *streamPtrPtr += sizeof(VkPerformanceParameterTypeINTEL);
-    reservedmarshal_VkPerformanceValueINTEL(stream, (VkPerformanceValueINTEL*)(pValue), streamPtrPtr);
-    unmarshal_VkPerformanceValueINTEL(stream, (VkPerformanceValueINTEL*)(pValue));
+    reservedmarshal_VkPerformanceValueINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceValueINTEL*)(pValue), streamPtrPtr);
+    unmarshal_VkPerformanceValueINTEL(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPerformanceValueINTEL*)(pValue));
     if (pValue)
     {
         transform_fromhost_VkPerformanceValueINTEL(sResourceTracker, (VkPerformanceValueINTEL*)(pValue));
@@ -30129,13 +30129,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkImagePipeSurfaceCreateInfoFUCHSIA*)pool->alloc(sizeof(const VkImagePipeSurfaceCreateInfoFUCHSIA));
-        deepcopy_VkImagePipeSurfaceCreateInfoFUCHSIA(pool, pCreateInfo, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(local_pCreateInfo));
+        deepcopy_VkImagePipeSurfaceCreateInfoFUCHSIA(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -30151,12 +30151,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImagePipeSurfaceCreateInfoFUCHSIA(sFeatureBits, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(local_pCreateInfo), countPtr);
+        count_VkImagePipeSurfaceCreateInfoFUCHSIA(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -30173,7 +30173,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(stream, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImagePipeSurfaceCreateInfoFUCHSIA*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -30181,7 +30181,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -30226,13 +30226,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkMetalSurfaceCreateInfoEXT*)pool->alloc(sizeof(const VkMetalSurfaceCreateInfoEXT));
-        deepcopy_VkMetalSurfaceCreateInfoEXT(pool, pCreateInfo, (VkMetalSurfaceCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkMetalSurfaceCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkMetalSurfaceCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -30248,12 +30248,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkMetalSurfaceCreateInfoEXT(sFeatureBits, (VkMetalSurfaceCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkMetalSurfaceCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMetalSurfaceCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -30270,7 +30270,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkMetalSurfaceCreateInfoEXT(stream, (VkMetalSurfaceCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkMetalSurfaceCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMetalSurfaceCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -30278,7 +30278,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -30302,119 +30302,7 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-VkResult VkEncoder::vkRegisterImageColorBufferGOOGLE(
-    VkDevice device,
-    VkImage image,
-    uint32_t colorBuffer,
-    uint32_t doLock)
-{
-    (void)doLock;
-    bool queueSubmitWithCommandsEnabled = sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
-    if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
-    auto stream = mImpl->stream();
-    auto pool = mImpl->pool();
-    VkDevice local_device;
-    VkImage local_image;
-    uint32_t local_colorBuffer;
-    local_device = device;
-    local_image = image;
-    local_colorBuffer = colorBuffer;
-    size_t count = 0;
-    size_t* countPtr = &count;
-    {
-        uint64_t cgen_var_0;
-        *countPtr += 1 * 8;
-        uint64_t cgen_var_1;
-        *countPtr += 1 * 8;
-        *countPtr += sizeof(uint32_t);
-    }
-    uint32_t packetSize_vkRegisterImageColorBufferGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
-    uint8_t* streamPtr = stream->reserve(packetSize_vkRegisterImageColorBufferGOOGLE);
-    uint8_t** streamPtrPtr = &streamPtr;
-    uint32_t opcode_vkRegisterImageColorBufferGOOGLE = OP_vkRegisterImageColorBufferGOOGLE;
-    uint32_t seqno; if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
-    memcpy(streamPtr, &opcode_vkRegisterImageColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
-    memcpy(streamPtr, &packetSize_vkRegisterImageColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
-    if (queueSubmitWithCommandsEnabled) { memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t); }
-    uint64_t cgen_var_0;
-    *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
-    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
-    *streamPtrPtr += 1 * 8;
-    uint64_t cgen_var_1;
-    *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
-    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
-    *streamPtrPtr += 1 * 8;
-    memcpy(*streamPtrPtr, (uint32_t*)&local_colorBuffer, sizeof(uint32_t));
-    *streamPtrPtr += sizeof(uint32_t);
-    VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
-    stream->read(&vkRegisterImageColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
-    ++encodeCount;;
-    if (0 == encodeCount % POOL_CLEAR_INTERVAL)
-    {
-        pool->freeAll();
-        stream->clearPool();
-    }
-    if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
-    return vkRegisterImageColorBufferGOOGLE_VkResult_return;
-}
-
-VkResult VkEncoder::vkRegisterBufferColorBufferGOOGLE(
-    VkDevice device,
-    VkBuffer buffer,
-    uint32_t colorBuffer,
-    uint32_t doLock)
-{
-    (void)doLock;
-    bool queueSubmitWithCommandsEnabled = sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
-    if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
-    auto stream = mImpl->stream();
-    auto pool = mImpl->pool();
-    VkDevice local_device;
-    VkBuffer local_buffer;
-    uint32_t local_colorBuffer;
-    local_device = device;
-    local_buffer = buffer;
-    local_colorBuffer = colorBuffer;
-    size_t count = 0;
-    size_t* countPtr = &count;
-    {
-        uint64_t cgen_var_0;
-        *countPtr += 1 * 8;
-        uint64_t cgen_var_1;
-        *countPtr += 1 * 8;
-        *countPtr += sizeof(uint32_t);
-    }
-    uint32_t packetSize_vkRegisterBufferColorBufferGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
-    uint8_t* streamPtr = stream->reserve(packetSize_vkRegisterBufferColorBufferGOOGLE);
-    uint8_t** streamPtrPtr = &streamPtr;
-    uint32_t opcode_vkRegisterBufferColorBufferGOOGLE = OP_vkRegisterBufferColorBufferGOOGLE;
-    uint32_t seqno; if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
-    memcpy(streamPtr, &opcode_vkRegisterBufferColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
-    memcpy(streamPtr, &packetSize_vkRegisterBufferColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
-    if (queueSubmitWithCommandsEnabled) { memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t); }
-    uint64_t cgen_var_0;
-    *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
-    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
-    *streamPtrPtr += 1 * 8;
-    uint64_t cgen_var_1;
-    *&cgen_var_1 = get_host_u64_VkBuffer((*&local_buffer));
-    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
-    *streamPtrPtr += 1 * 8;
-    memcpy(*streamPtrPtr, (uint32_t*)&local_colorBuffer, sizeof(uint32_t));
-    *streamPtrPtr += sizeof(uint32_t);
-    VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
-    stream->read(&vkRegisterBufferColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
-    ++encodeCount;;
-    if (0 == encodeCount % POOL_CLEAR_INTERVAL)
-    {
-        pool->freeAll();
-        stream->clearPool();
-    }
-    if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
-    return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
-}
-
+#ifdef VK_EXT_fragment_density_map
 #endif
 #ifdef VK_EXT_scalar_block_layout
 #endif
@@ -30454,7 +30342,7 @@
     if (pInfo)
     {
         local_pInfo = (VkBufferDeviceAddressInfo*)pool->alloc(sizeof(const VkBufferDeviceAddressInfo));
-        deepcopy_VkBufferDeviceAddressInfo(pool, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
+        deepcopy_VkBufferDeviceAddressInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkBufferDeviceAddressInfo*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -30465,7 +30353,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferDeviceAddressInfo(sFeatureBits, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
+        count_VkBufferDeviceAddressInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetBufferDeviceAddressEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetBufferDeviceAddressEXT);
@@ -30479,7 +30367,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferDeviceAddressInfo(stream, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkBufferDeviceAddressInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferDeviceAddressInfo*)(local_pInfo), streamPtrPtr);
     VkDeviceAddress vkGetBufferDeviceAddressEXT_VkDeviceAddress_return = (VkDeviceAddress)0;
     stream->read(&vkGetBufferDeviceAddressEXT_VkDeviceAddress_return, sizeof(VkDeviceAddress));
     ++encodeCount;;
@@ -30526,7 +30414,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i)
                 {
-                    count_VkPhysicalDeviceToolPropertiesEXT(sFeatureBits, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i), countPtr);
+                    count_VkPhysicalDeviceToolPropertiesEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i), countPtr);
                 }
             }
         }
@@ -30562,7 +30450,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i)
         {
-            reservedmarshal_VkPhysicalDeviceToolPropertiesEXT(stream, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i), streamPtrPtr);
+            reservedmarshal_VkPhysicalDeviceToolPropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -30589,7 +30477,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pToolCount)); ++i)
             {
-                unmarshal_VkPhysicalDeviceToolPropertiesEXT(stream, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i));
+                unmarshal_VkPhysicalDeviceToolPropertiesEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceToolPropertiesEXT*)(pToolProperties + i));
             }
         }
     }
@@ -30653,7 +30541,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
                 {
-                    count_VkCooperativeMatrixPropertiesNV(sFeatureBits, (VkCooperativeMatrixPropertiesNV*)(pProperties + i), countPtr);
+                    count_VkCooperativeMatrixPropertiesNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCooperativeMatrixPropertiesNV*)(pProperties + i), countPtr);
                 }
             }
         }
@@ -30689,7 +30577,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
         {
-            reservedmarshal_VkCooperativeMatrixPropertiesNV(stream, (VkCooperativeMatrixPropertiesNV*)(pProperties + i), streamPtrPtr);
+            reservedmarshal_VkCooperativeMatrixPropertiesNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCooperativeMatrixPropertiesNV*)(pProperties + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -30716,7 +30604,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
             {
-                unmarshal_VkCooperativeMatrixPropertiesNV(stream, (VkCooperativeMatrixPropertiesNV*)(pProperties + i));
+                unmarshal_VkCooperativeMatrixPropertiesNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCooperativeMatrixPropertiesNV*)(pProperties + i));
             }
         }
     }
@@ -30776,7 +30664,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i)
                 {
-                    count_VkFramebufferMixedSamplesCombinationNV(sFeatureBits, (VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i), countPtr);
+                    count_VkFramebufferMixedSamplesCombinationNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i), countPtr);
                 }
             }
         }
@@ -30812,7 +30700,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i)
         {
-            reservedmarshal_VkFramebufferMixedSamplesCombinationNV(stream, (VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i), streamPtrPtr);
+            reservedmarshal_VkFramebufferMixedSamplesCombinationNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -30839,7 +30727,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)(*(pCombinationCount)); ++i)
             {
-                unmarshal_VkFramebufferMixedSamplesCombinationNV(stream, (VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i));
+                unmarshal_VkFramebufferMixedSamplesCombinationNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkFramebufferMixedSamplesCombinationNV*)(pCombinations + i));
             }
         }
     }
@@ -30890,7 +30778,7 @@
     if (pSurfaceInfo)
     {
         local_pSurfaceInfo = (VkPhysicalDeviceSurfaceInfo2KHR*)pool->alloc(sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
-        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
+        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     }
     if (local_pSurfaceInfo)
     {
@@ -30901,7 +30789,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
+        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pPresentModeCount)
@@ -30930,7 +30818,7 @@
     *&cgen_var_0 = get_host_u64_VkPhysicalDevice((*&local_physicalDevice));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
+    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pPresentModeCount;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -31103,7 +30991,7 @@
     if (pSurfaceInfo)
     {
         local_pSurfaceInfo = (VkPhysicalDeviceSurfaceInfo2KHR*)pool->alloc(sizeof(const VkPhysicalDeviceSurfaceInfo2KHR));
-        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
+        deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSurfaceInfo, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     }
     if (local_pSurfaceInfo)
     {
@@ -31114,7 +31002,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
+        count_VkPhysicalDeviceSurfaceInfo2KHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (pModes)
@@ -31134,7 +31022,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
+    reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)pModes;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -31190,13 +31078,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkHeadlessSurfaceCreateInfoEXT*)pool->alloc(sizeof(const VkHeadlessSurfaceCreateInfoEXT));
-        deepcopy_VkHeadlessSurfaceCreateInfoEXT(pool, pCreateInfo, (VkHeadlessSurfaceCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkHeadlessSurfaceCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkHeadlessSurfaceCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -31212,12 +31100,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkHeadlessSurfaceCreateInfoEXT(sFeatureBits, (VkHeadlessSurfaceCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkHeadlessSurfaceCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkHeadlessSurfaceCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -31234,7 +31122,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkHeadlessSurfaceCreateInfoEXT(stream, (VkHeadlessSurfaceCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkHeadlessSurfaceCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkHeadlessSurfaceCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -31242,7 +31130,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -31547,7 +31435,7 @@
         local_pViewports = (VkViewport*)pool->alloc(((viewportCount)) * sizeof(const VkViewport));
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            deepcopy_VkViewport(pool, pViewports + i, (VkViewport*)(local_pViewports + i));
+            deepcopy_VkViewport(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pViewports + i, (VkViewport*)(local_pViewports + i));
         }
     }
     if (local_pViewports)
@@ -31565,7 +31453,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            count_VkViewport(sFeatureBits, (VkViewport*)(local_pViewports + i), countPtr);
+            count_VkViewport(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViewport*)(local_pViewports + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetViewportWithCountEXT = 4 + 4 + count;
@@ -31586,7 +31474,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
     {
-        reservedmarshal_VkViewport(stream, (VkViewport*)(local_pViewports + i), streamPtrPtr);
+        reservedmarshal_VkViewport(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkViewport*)(local_pViewports + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -31619,7 +31507,7 @@
         local_pScissors = (VkRect2D*)pool->alloc(((scissorCount)) * sizeof(const VkRect2D));
         for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
         {
-            deepcopy_VkRect2D(pool, pScissors + i, (VkRect2D*)(local_pScissors + i));
+            deepcopy_VkRect2D(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pScissors + i, (VkRect2D*)(local_pScissors + i));
         }
     }
     if (local_pScissors)
@@ -31637,7 +31525,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
         {
-            count_VkRect2D(sFeatureBits, (VkRect2D*)(local_pScissors + i), countPtr);
+            count_VkRect2D(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pScissors + i), countPtr);
         }
     }
     uint32_t packetSize_vkCmdSetScissorWithCountEXT = 4 + 4 + count;
@@ -31658,7 +31546,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
     {
-        reservedmarshal_VkRect2D(stream, (VkRect2D*)(local_pScissors + i), streamPtrPtr);
+        reservedmarshal_VkRect2D(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRect2D*)(local_pScissors + i), streamPtrPtr);
     }
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
@@ -32108,7 +31996,7 @@
     if (pInfo)
     {
         local_pInfo = (VkGeneratedCommandsMemoryRequirementsInfoNV*)pool->alloc(sizeof(const VkGeneratedCommandsMemoryRequirementsInfoNV));
-        deepcopy_VkGeneratedCommandsMemoryRequirementsInfoNV(pool, pInfo, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(local_pInfo));
+        deepcopy_VkGeneratedCommandsMemoryRequirementsInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -32119,8 +32007,8 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkGeneratedCommandsMemoryRequirementsInfoNV(sFeatureBits, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(local_pInfo), countPtr);
-        count_VkMemoryRequirements2(sFeatureBits, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
+        count_VkGeneratedCommandsMemoryRequirementsInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(local_pInfo), countPtr);
+        count_VkMemoryRequirements2(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkGetGeneratedCommandsMemoryRequirementsNV = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetGeneratedCommandsMemoryRequirementsNV);
@@ -32134,9 +32022,9 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(stream, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(local_pInfo), streamPtrPtr);
-    reservedmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
-    unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    reservedmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGeneratedCommandsMemoryRequirementsInfoNV*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements), streamPtrPtr);
+    unmarshal_VkMemoryRequirements2(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements2*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements2(sResourceTracker, (VkMemoryRequirements2*)(pMemoryRequirements));
@@ -32167,7 +32055,7 @@
     if (pGeneratedCommandsInfo)
     {
         local_pGeneratedCommandsInfo = (VkGeneratedCommandsInfoNV*)pool->alloc(sizeof(const VkGeneratedCommandsInfoNV));
-        deepcopy_VkGeneratedCommandsInfoNV(pool, pGeneratedCommandsInfo, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo));
+        deepcopy_VkGeneratedCommandsInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGeneratedCommandsInfo, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo));
     }
     if (local_pGeneratedCommandsInfo)
     {
@@ -32178,7 +32066,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkGeneratedCommandsInfoNV(sFeatureBits, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), countPtr);
+        count_VkGeneratedCommandsInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), countPtr);
     }
     uint32_t packetSize_vkCmdPreprocessGeneratedCommandsNV = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdPreprocessGeneratedCommandsNV -= 8;
@@ -32194,7 +32082,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkGeneratedCommandsInfoNV(stream, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), streamPtrPtr);
+    reservedmarshal_VkGeneratedCommandsInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -32224,7 +32112,7 @@
     if (pGeneratedCommandsInfo)
     {
         local_pGeneratedCommandsInfo = (VkGeneratedCommandsInfoNV*)pool->alloc(sizeof(const VkGeneratedCommandsInfoNV));
-        deepcopy_VkGeneratedCommandsInfoNV(pool, pGeneratedCommandsInfo, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo));
+        deepcopy_VkGeneratedCommandsInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pGeneratedCommandsInfo, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo));
     }
     if (local_pGeneratedCommandsInfo)
     {
@@ -32236,7 +32124,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkBool32);
-        count_VkGeneratedCommandsInfoNV(sFeatureBits, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), countPtr);
+        count_VkGeneratedCommandsInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), countPtr);
     }
     uint32_t packetSize_vkCmdExecuteGeneratedCommandsNV = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdExecuteGeneratedCommandsNV -= 8;
@@ -32254,7 +32142,7 @@
     }
     memcpy(*streamPtrPtr, (VkBool32*)&local_isPreprocessed, sizeof(VkBool32));
     *streamPtrPtr += sizeof(VkBool32);
-    reservedmarshal_VkGeneratedCommandsInfoNV(stream, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), streamPtrPtr);
+    reservedmarshal_VkGeneratedCommandsInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkGeneratedCommandsInfoNV*)(local_pGeneratedCommandsInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -32345,13 +32233,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkIndirectCommandsLayoutCreateInfoNV*)pool->alloc(sizeof(const VkIndirectCommandsLayoutCreateInfoNV));
-        deepcopy_VkIndirectCommandsLayoutCreateInfoNV(pool, pCreateInfo, (VkIndirectCommandsLayoutCreateInfoNV*)(local_pCreateInfo));
+        deepcopy_VkIndirectCommandsLayoutCreateInfoNV(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkIndirectCommandsLayoutCreateInfoNV*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -32367,12 +32255,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkIndirectCommandsLayoutCreateInfoNV(sFeatureBits, (VkIndirectCommandsLayoutCreateInfoNV*)(local_pCreateInfo), countPtr);
+        count_VkIndirectCommandsLayoutCreateInfoNV(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkIndirectCommandsLayoutCreateInfoNV*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -32389,7 +32277,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkIndirectCommandsLayoutCreateInfoNV(stream, (VkIndirectCommandsLayoutCreateInfoNV*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkIndirectCommandsLayoutCreateInfoNV(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkIndirectCommandsLayoutCreateInfoNV*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -32397,7 +32285,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -32442,7 +32330,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -32460,7 +32348,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyIndirectCommandsLayoutNV = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -32486,7 +32374,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkIndirectCommandsLayoutNV((VkIndirectCommandsLayoutNV*)&indirectCommandsLayout);
     stream->flush();
@@ -32533,13 +32421,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkPrivateDataSlotCreateInfoEXT*)pool->alloc(sizeof(const VkPrivateDataSlotCreateInfoEXT));
-        deepcopy_VkPrivateDataSlotCreateInfoEXT(pool, pCreateInfo, (VkPrivateDataSlotCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkPrivateDataSlotCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkPrivateDataSlotCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -32555,12 +32443,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkPrivateDataSlotCreateInfoEXT(sFeatureBits, (VkPrivateDataSlotCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkPrivateDataSlotCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPrivateDataSlotCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         *countPtr += 8;
     }
@@ -32576,7 +32464,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkPrivateDataSlotCreateInfoEXT(stream, (VkPrivateDataSlotCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkPrivateDataSlotCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkPrivateDataSlotCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -32584,7 +32472,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     uint64_t cgen_var_2 = (uint64_t)(*pPrivateDataSlot);
     memcpy((*streamPtrPtr), &cgen_var_2, 8);
@@ -32623,7 +32511,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -32640,7 +32528,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyPrivateDataSlotEXT = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -32666,7 +32554,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     stream->flush();
     ++encodeCount;;
@@ -32898,13 +32786,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkDirectFBSurfaceCreateInfoEXT*)pool->alloc(sizeof(const VkDirectFBSurfaceCreateInfoEXT));
-        deepcopy_VkDirectFBSurfaceCreateInfoEXT(pool, pCreateInfo, (VkDirectFBSurfaceCreateInfoEXT*)(local_pCreateInfo));
+        deepcopy_VkDirectFBSurfaceCreateInfoEXT(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkDirectFBSurfaceCreateInfoEXT*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -32920,12 +32808,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkDirectFBSurfaceCreateInfoEXT(sFeatureBits, (VkDirectFBSurfaceCreateInfoEXT*)(local_pCreateInfo), countPtr);
+        count_VkDirectFBSurfaceCreateInfoEXT(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDirectFBSurfaceCreateInfoEXT*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -32942,7 +32830,7 @@
     *&cgen_var_0 = get_host_u64_VkInstance((*&local_instance));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkDirectFBSurfaceCreateInfoEXT(stream, (VkDirectFBSurfaceCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkDirectFBSurfaceCreateInfoEXT(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDirectFBSurfaceCreateInfoEXT*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -32950,7 +32838,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -33027,6 +32915,118 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+VkResult VkEncoder::vkRegisterImageColorBufferGOOGLE(
+    VkDevice device,
+    VkImage image,
+    uint32_t colorBuffer,
+    uint32_t doLock)
+{
+    (void)doLock;
+    bool queueSubmitWithCommandsEnabled = sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
+    if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
+    auto stream = mImpl->stream();
+    auto pool = mImpl->pool();
+    VkDevice local_device;
+    VkImage local_image;
+    uint32_t local_colorBuffer;
+    local_device = device;
+    local_image = image;
+    local_colorBuffer = colorBuffer;
+    size_t count = 0;
+    size_t* countPtr = &count;
+    {
+        uint64_t cgen_var_0;
+        *countPtr += 1 * 8;
+        uint64_t cgen_var_1;
+        *countPtr += 1 * 8;
+        *countPtr += sizeof(uint32_t);
+    }
+    uint32_t packetSize_vkRegisterImageColorBufferGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
+    uint8_t* streamPtr = stream->reserve(packetSize_vkRegisterImageColorBufferGOOGLE);
+    uint8_t** streamPtrPtr = &streamPtr;
+    uint32_t opcode_vkRegisterImageColorBufferGOOGLE = OP_vkRegisterImageColorBufferGOOGLE;
+    uint32_t seqno; if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
+    memcpy(streamPtr, &opcode_vkRegisterImageColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
+    memcpy(streamPtr, &packetSize_vkRegisterImageColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
+    if (queueSubmitWithCommandsEnabled) { memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t); }
+    uint64_t cgen_var_0;
+    *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
+    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
+    *streamPtrPtr += 1 * 8;
+    uint64_t cgen_var_1;
+    *&cgen_var_1 = get_host_u64_VkImage((*&local_image));
+    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
+    *streamPtrPtr += 1 * 8;
+    memcpy(*streamPtrPtr, (uint32_t*)&local_colorBuffer, sizeof(uint32_t));
+    *streamPtrPtr += sizeof(uint32_t);
+    VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
+    stream->read(&vkRegisterImageColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
+    ++encodeCount;;
+    if (0 == encodeCount % POOL_CLEAR_INTERVAL)
+    {
+        pool->freeAll();
+        stream->clearPool();
+    }
+    if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
+    return vkRegisterImageColorBufferGOOGLE_VkResult_return;
+}
+
+VkResult VkEncoder::vkRegisterBufferColorBufferGOOGLE(
+    VkDevice device,
+    VkBuffer buffer,
+    uint32_t colorBuffer,
+    uint32_t doLock)
+{
+    (void)doLock;
+    bool queueSubmitWithCommandsEnabled = sFeatureBits & VULKAN_STREAM_FEATURE_QUEUE_SUBMIT_WITH_COMMANDS_BIT;
+    if (!queueSubmitWithCommandsEnabled && doLock) this->lock();
+    auto stream = mImpl->stream();
+    auto pool = mImpl->pool();
+    VkDevice local_device;
+    VkBuffer local_buffer;
+    uint32_t local_colorBuffer;
+    local_device = device;
+    local_buffer = buffer;
+    local_colorBuffer = colorBuffer;
+    size_t count = 0;
+    size_t* countPtr = &count;
+    {
+        uint64_t cgen_var_0;
+        *countPtr += 1 * 8;
+        uint64_t cgen_var_1;
+        *countPtr += 1 * 8;
+        *countPtr += sizeof(uint32_t);
+    }
+    uint32_t packetSize_vkRegisterBufferColorBufferGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
+    uint8_t* streamPtr = stream->reserve(packetSize_vkRegisterBufferColorBufferGOOGLE);
+    uint8_t** streamPtrPtr = &streamPtr;
+    uint32_t opcode_vkRegisterBufferColorBufferGOOGLE = OP_vkRegisterBufferColorBufferGOOGLE;
+    uint32_t seqno; if (queueSubmitWithCommandsEnabled) seqno = ResourceTracker::nextSeqno();
+    memcpy(streamPtr, &opcode_vkRegisterBufferColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
+    memcpy(streamPtr, &packetSize_vkRegisterBufferColorBufferGOOGLE, sizeof(uint32_t)); streamPtr += sizeof(uint32_t);
+    if (queueSubmitWithCommandsEnabled) { memcpy(streamPtr, &seqno, sizeof(uint32_t)); streamPtr += sizeof(uint32_t); }
+    uint64_t cgen_var_0;
+    *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
+    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
+    *streamPtrPtr += 1 * 8;
+    uint64_t cgen_var_1;
+    *&cgen_var_1 = get_host_u64_VkBuffer((*&local_buffer));
+    memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_1, 1 * 8);
+    *streamPtrPtr += 1 * 8;
+    memcpy(*streamPtrPtr, (uint32_t*)&local_colorBuffer, sizeof(uint32_t));
+    *streamPtrPtr += sizeof(uint32_t);
+    VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
+    stream->read(&vkRegisterBufferColorBufferGOOGLE_VkResult_return, sizeof(VkResult));
+    ++encodeCount;;
+    if (0 == encodeCount % POOL_CLEAR_INTERVAL)
+    {
+        pool->freeAll();
+        stream->clearPool();
+    }
+    if (!queueSubmitWithCommandsEnabled && doLock) this->unlock();
+    return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
+}
+
 VkResult VkEncoder::vkMapMemoryIntoAddressSpaceGOOGLE(
     VkDevice device,
     VkDeviceMemory memory,
@@ -33158,7 +33158,7 @@
         local_pImageInfos = (VkDescriptorImageInfo*)pool->alloc(((imageInfoCount)) * sizeof(const VkDescriptorImageInfo));
         for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
         {
-            deepcopy_VkDescriptorImageInfo(pool, pImageInfos + i, (VkDescriptorImageInfo*)(local_pImageInfos + i));
+            deepcopy_VkDescriptorImageInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pImageInfos + i, (VkDescriptorImageInfo*)(local_pImageInfos + i));
         }
     }
     local_pBufferInfos = nullptr;
@@ -33167,7 +33167,7 @@
         local_pBufferInfos = (VkDescriptorBufferInfo*)pool->alloc(((bufferInfoCount)) * sizeof(const VkDescriptorBufferInfo));
         for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
         {
-            deepcopy_VkDescriptorBufferInfo(pool, pBufferInfos + i, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
+            deepcopy_VkDescriptorBufferInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBufferInfos + i, (VkDescriptorBufferInfo*)(local_pBufferInfos + i));
         }
     }
     // Avoiding deepcopy for pBufferViews
@@ -33222,7 +33222,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
             {
-                count_VkDescriptorImageInfo(sFeatureBits, (VkDescriptorImageInfo*)(local_pImageInfos + i), countPtr);
+                count_VkDescriptorImageInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorImageInfo*)(local_pImageInfos + i), countPtr);
             }
         }
         // WARNING PTR CHECK
@@ -33231,7 +33231,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
             {
-                count_VkDescriptorBufferInfo(sFeatureBits, (VkDescriptorBufferInfo*)(local_pBufferInfos + i), countPtr);
+                count_VkDescriptorBufferInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorBufferInfo*)(local_pBufferInfos + i), countPtr);
             }
         }
         // WARNING PTR CHECK
@@ -33309,7 +33309,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((imageInfoCount)); ++i)
         {
-            reservedmarshal_VkDescriptorImageInfo(stream, (VkDescriptorImageInfo*)(local_pImageInfos + i), streamPtrPtr);
+            reservedmarshal_VkDescriptorImageInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorImageInfo*)(local_pImageInfos + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -33321,7 +33321,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((bufferInfoCount)); ++i)
         {
-            reservedmarshal_VkDescriptorBufferInfo(stream, (VkDescriptorBufferInfo*)(local_pBufferInfos + i), streamPtrPtr);
+            reservedmarshal_VkDescriptorBufferInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkDescriptorBufferInfo*)(local_pBufferInfos + i), streamPtrPtr);
         }
     }
     // WARNING PTR CHECK
@@ -33369,7 +33369,7 @@
     if (pBeginInfo)
     {
         local_pBeginInfo = (VkCommandBufferBeginInfo*)pool->alloc(sizeof(const VkCommandBufferBeginInfo));
-        deepcopy_VkCommandBufferBeginInfo(pool, pBeginInfo, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
+        deepcopy_VkCommandBufferBeginInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBeginInfo, (VkCommandBufferBeginInfo*)(local_pBeginInfo));
     }
     if (local_pBeginInfo)
     {
@@ -33380,7 +33380,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCommandBufferBeginInfo(sFeatureBits, (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
+        count_VkCommandBufferBeginInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandBufferBeginInfo*)(local_pBeginInfo), countPtr);
     }
     uint32_t packetSize_vkBeginCommandBufferAsyncGOOGLE = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkBeginCommandBufferAsyncGOOGLE -= 8;
@@ -33396,7 +33396,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCommandBufferBeginInfo(stream, (VkCommandBufferBeginInfo*)(local_pBeginInfo), streamPtrPtr);
+    reservedmarshal_VkCommandBufferBeginInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCommandBufferBeginInfo*)(local_pBeginInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -33566,13 +33566,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkImageCreateInfo*)pool->alloc(sizeof(const VkImageCreateInfo));
-        deepcopy_VkImageCreateInfo(pool, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkImageCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkImageCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     sResourceTracker->unwrap_VkNativeBufferANDROID(pCreateInfo, local_pCreateInfo);
     local_pAllocator = nullptr;
@@ -33589,16 +33589,16 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkImageCreateInfo(sFeatureBits, (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkImageCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
-        count_VkMemoryRequirements(sFeatureBits, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
+        count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkCreateImageWithRequirementsGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkCreateImageWithRequirementsGOOGLE);
@@ -33612,7 +33612,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkImageCreateInfo(stream, (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkImageCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkImageCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -33620,7 +33620,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -33628,13 +33628,13 @@
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
     *streamPtrPtr += 8;
     /* is handle, possibly out */;
-    reservedmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
     stream->setHandleMapping(sResourceTracker->createMapping());
     uint64_t cgen_var_3;
     stream->read((uint64_t*)&cgen_var_3, 8);
     stream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_3, (VkImage*)pImage, 1);
     stream->unsetHandleMapping();
-    unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
+    unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements(sResourceTracker, (VkMemoryRequirements*)(pMemoryRequirements));
@@ -33672,13 +33672,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkBufferCreateInfo*)pool->alloc(sizeof(const VkBufferCreateInfo));
-        deepcopy_VkBufferCreateInfo(pool, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
+        deepcopy_VkBufferCreateInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkBufferCreateInfo*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -33694,16 +33694,16 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkBufferCreateInfo(sFeatureBits, (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
+        count_VkBufferCreateInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferCreateInfo*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
-        count_VkMemoryRequirements(sFeatureBits, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
+        count_VkMemoryRequirements(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), countPtr);
     }
     uint32_t packetSize_vkCreateBufferWithRequirementsGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkCreateBufferWithRequirementsGOOGLE);
@@ -33717,7 +33717,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkBufferCreateInfo(stream, (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkBufferCreateInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBufferCreateInfo*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -33725,7 +33725,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -33733,13 +33733,13 @@
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_2, 8);
     *streamPtrPtr += 8;
     /* is handle, possibly out */;
-    reservedmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
+    reservedmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements), streamPtrPtr);
     stream->setHandleMapping(sResourceTracker->createMapping());
     uint64_t cgen_var_3;
     stream->read((uint64_t*)&cgen_var_3, 8);
     stream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_3, (VkBuffer*)pBuffer, 1);
     stream->unsetHandleMapping();
-    unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
+    unmarshal_VkMemoryRequirements(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkMemoryRequirements*)(pMemoryRequirements));
     if (pMemoryRequirements)
     {
         transform_fromhost_VkMemoryRequirements(sResourceTracker, (VkMemoryRequirements*)(pMemoryRequirements));
@@ -33911,7 +33911,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     sResourceTracker->deviceMemoryTransform_tohost((VkDeviceMemory*)&local_memory, 1, (VkDeviceSize*)nullptr, 0, (VkDeviceSize*)nullptr, 0, (uint32_t*)nullptr, 0, (uint32_t*)nullptr, 0);
@@ -33926,7 +33926,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkFreeMemorySyncGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -33952,7 +33952,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     VkResult vkFreeMemorySyncGOOGLE_VkResult_return = (VkResult)0;
     stream->read(&vkFreeMemorySyncGOOGLE_VkResult_return, sizeof(VkResult));
@@ -34042,7 +34042,7 @@
         local_pSubmits = (VkSubmitInfo*)pool->alloc(((submitCount)) * sizeof(const VkSubmitInfo));
         for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
         {
-            deepcopy_VkSubmitInfo(pool, pSubmits + i, (VkSubmitInfo*)(local_pSubmits + i));
+            deepcopy_VkSubmitInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pSubmits + i, (VkSubmitInfo*)(local_pSubmits + i));
         }
     }
     local_fence = fence;
@@ -34061,7 +34061,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
         {
-            count_VkSubmitInfo(sFeatureBits, (VkSubmitInfo*)(local_pSubmits + i), countPtr);
+            count_VkSubmitInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubmitInfo*)(local_pSubmits + i), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
@@ -34082,7 +34082,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
     {
-        reservedmarshal_VkSubmitInfo(stream, (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
+        reservedmarshal_VkSubmitInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkSubmitInfo*)(local_pSubmits + i), streamPtrPtr);
     }
     uint64_t cgen_var_1;
     *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
@@ -34161,7 +34161,7 @@
         local_pBindInfo = (VkBindSparseInfo*)pool->alloc(((bindInfoCount)) * sizeof(const VkBindSparseInfo));
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            deepcopy_VkBindSparseInfo(pool, pBindInfo + i, (VkBindSparseInfo*)(local_pBindInfo + i));
+            deepcopy_VkBindSparseInfo(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBindInfo + i, (VkBindSparseInfo*)(local_pBindInfo + i));
         }
     }
     local_fence = fence;
@@ -34180,7 +34180,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            count_VkBindSparseInfo(sFeatureBits, (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
+            count_VkBindSparseInfo(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindSparseInfo*)(local_pBindInfo + i), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 1 * 8;
@@ -34201,7 +34201,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
     {
-        reservedmarshal_VkBindSparseInfo(stream, (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
+        reservedmarshal_VkBindSparseInfo(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkBindSparseInfo*)(local_pBindInfo + i), streamPtrPtr);
     }
     uint64_t cgen_var_1;
     *&cgen_var_1 = get_host_u64_VkFence((*&local_fence));
@@ -34333,7 +34333,7 @@
         local_pPendingDescriptorWrites = (VkWriteDescriptorSet*)pool->alloc(((pendingDescriptorWriteCount)) * sizeof(const VkWriteDescriptorSet));
         for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i)
         {
-            deepcopy_VkWriteDescriptorSet(pool, pPendingDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i));
+            deepcopy_VkWriteDescriptorSet(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pPendingDescriptorWrites + i, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i));
         }
     }
     if (local_pPendingDescriptorWrites)
@@ -34365,7 +34365,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i)
         {
-            count_VkWriteDescriptorSet(sFeatureBits, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i), countPtr);
+            count_VkWriteDescriptorSet(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i), countPtr);
         }
     }
     uint32_t packetSize_vkQueueCommitDescriptorSetUpdatesGOOGLE = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -34416,7 +34416,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((pendingDescriptorWriteCount)); ++i)
     {
-        reservedmarshal_VkWriteDescriptorSet(stream, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i), streamPtrPtr);
+        reservedmarshal_VkWriteDescriptorSet(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkWriteDescriptorSet*)(local_pPendingDescriptorWrites + i), streamPtrPtr);
     }
     stream->flush();
     ++encodeCount;;
@@ -34533,13 +34533,13 @@
     if (pCreateInfo)
     {
         local_pCreateInfo = (VkAccelerationStructureCreateInfoKHR*)pool->alloc(sizeof(const VkAccelerationStructureCreateInfoKHR));
-        deepcopy_VkAccelerationStructureCreateInfoKHR(pool, pCreateInfo, (VkAccelerationStructureCreateInfoKHR*)(local_pCreateInfo));
+        deepcopy_VkAccelerationStructureCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfo, (VkAccelerationStructureCreateInfoKHR*)(local_pCreateInfo));
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
@@ -34555,12 +34555,12 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAccelerationStructureCreateInfoKHR(sFeatureBits, (VkAccelerationStructureCreateInfoKHR*)(local_pCreateInfo), countPtr);
+        count_VkAccelerationStructureCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureCreateInfoKHR*)(local_pCreateInfo), countPtr);
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         uint64_t cgen_var_1;
         *countPtr += 8;
@@ -34577,7 +34577,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAccelerationStructureCreateInfoKHR(stream, (VkAccelerationStructureCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
+    reservedmarshal_VkAccelerationStructureCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureCreateInfoKHR*)(local_pCreateInfo), streamPtrPtr);
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)local_pAllocator;
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
@@ -34585,7 +34585,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     uint64_t cgen_var_2;
@@ -34630,7 +34630,7 @@
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pAllocator)
@@ -34648,7 +34648,7 @@
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
     }
     uint32_t packetSize_vkDestroyAccelerationStructureKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -34674,7 +34674,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     sResourceTracker->destroyMapping()->mapHandles_VkAccelerationStructureKHR((VkAccelerationStructureKHR*)&accelerationStructure);
     stream->flush();
@@ -34711,7 +34711,7 @@
         local_pInfos = (VkAccelerationStructureBuildGeometryInfoKHR*)pool->alloc(((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
         for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
         {
-            deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, pInfos + i, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i));
+            deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfos + i, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i));
         }
     }
     (void)ppBuildRangeInfos;
@@ -34731,7 +34731,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
         {
-            count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), countPtr);
+            count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), countPtr);
         }
         (void)local_ppBuildRangeInfos;
     }
@@ -34753,7 +34753,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
     {
-        reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), streamPtrPtr);
+        reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), streamPtrPtr);
     }
     (void)local_ppBuildRangeInfos;
     ++encodeCount;;
@@ -34793,7 +34793,7 @@
         local_pInfos = (VkAccelerationStructureBuildGeometryInfoKHR*)pool->alloc(((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
         for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
         {
-            deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, pInfos + i, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i));
+            deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfos + i, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i));
         }
     }
     // Avoiding deepcopy for pIndirectDeviceAddresses
@@ -34817,7 +34817,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
         {
-            count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), countPtr);
+            count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), countPtr);
         }
         *countPtr += ((infoCount)) * sizeof(VkDeviceAddress);
         *countPtr += ((infoCount)) * sizeof(uint32_t);
@@ -34841,7 +34841,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
     {
-        reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), streamPtrPtr);
+        reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), streamPtrPtr);
     }
     memcpy(*streamPtrPtr, (VkDeviceAddress*)local_pIndirectDeviceAddresses, ((infoCount)) * sizeof(VkDeviceAddress));
     *streamPtrPtr += ((infoCount)) * sizeof(VkDeviceAddress);
@@ -34884,7 +34884,7 @@
         local_pInfos = (VkAccelerationStructureBuildGeometryInfoKHR*)pool->alloc(((infoCount)) * sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
         for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
         {
-            deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, pInfos + i, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i));
+            deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfos + i, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i));
         }
     }
     (void)ppBuildRangeInfos;
@@ -34905,7 +34905,7 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
         {
-            count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), countPtr);
+            count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), countPtr);
         }
         (void)local_ppBuildRangeInfos;
     }
@@ -34929,7 +34929,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((infoCount)); ++i)
     {
-        reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), streamPtrPtr);
+        reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pInfos + i), streamPtrPtr);
     }
     (void)local_ppBuildRangeInfos;
     VkResult vkBuildAccelerationStructuresKHR_VkResult_return = (VkResult)0;
@@ -34964,7 +34964,7 @@
     if (pInfo)
     {
         local_pInfo = (VkCopyAccelerationStructureInfoKHR*)pool->alloc(sizeof(const VkCopyAccelerationStructureInfoKHR));
-        deepcopy_VkCopyAccelerationStructureInfoKHR(pool, pInfo, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo));
+        deepcopy_VkCopyAccelerationStructureInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -34976,7 +34976,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += 8;
-        count_VkCopyAccelerationStructureInfoKHR(sFeatureBits, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
+        count_VkCopyAccelerationStructureInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkCopyAccelerationStructureKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkCopyAccelerationStructureKHR);
@@ -34994,7 +34994,7 @@
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
     android::base::Stream::toBe64((uint8_t*)(*streamPtrPtr));
     *streamPtrPtr += 8;
-    reservedmarshal_VkCopyAccelerationStructureInfoKHR(stream, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkCopyAccelerationStructureInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
     VkResult vkCopyAccelerationStructureKHR_VkResult_return = (VkResult)0;
     stream->read(&vkCopyAccelerationStructureKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -35027,7 +35027,7 @@
     if (pInfo)
     {
         local_pInfo = (VkCopyAccelerationStructureToMemoryInfoKHR*)pool->alloc(sizeof(const VkCopyAccelerationStructureToMemoryInfoKHR));
-        deepcopy_VkCopyAccelerationStructureToMemoryInfoKHR(pool, pInfo, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo));
+        deepcopy_VkCopyAccelerationStructureToMemoryInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -35039,7 +35039,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += 8;
-        count_VkCopyAccelerationStructureToMemoryInfoKHR(sFeatureBits, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), countPtr);
+        count_VkCopyAccelerationStructureToMemoryInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkCopyAccelerationStructureToMemoryKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkCopyAccelerationStructureToMemoryKHR);
@@ -35057,7 +35057,7 @@
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
     android::base::Stream::toBe64((uint8_t*)(*streamPtrPtr));
     *streamPtrPtr += 8;
-    reservedmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(stream, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), streamPtrPtr);
     VkResult vkCopyAccelerationStructureToMemoryKHR_VkResult_return = (VkResult)0;
     stream->read(&vkCopyAccelerationStructureToMemoryKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -35090,7 +35090,7 @@
     if (pInfo)
     {
         local_pInfo = (VkCopyMemoryToAccelerationStructureInfoKHR*)pool->alloc(sizeof(const VkCopyMemoryToAccelerationStructureInfoKHR));
-        deepcopy_VkCopyMemoryToAccelerationStructureInfoKHR(pool, pInfo, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo));
+        deepcopy_VkCopyMemoryToAccelerationStructureInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -35102,7 +35102,7 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += 8;
-        count_VkCopyMemoryToAccelerationStructureInfoKHR(sFeatureBits, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
+        count_VkCopyMemoryToAccelerationStructureInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkCopyMemoryToAccelerationStructureKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkCopyMemoryToAccelerationStructureKHR);
@@ -35120,7 +35120,7 @@
     memcpy((*streamPtrPtr), &cgen_var_1, 8);
     android::base::Stream::toBe64((uint8_t*)(*streamPtrPtr));
     *streamPtrPtr += 8;
-    reservedmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(stream, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
     VkResult vkCopyMemoryToAccelerationStructureKHR_VkResult_return = (VkResult)0;
     stream->read(&vkCopyMemoryToAccelerationStructureKHR_VkResult_return, sizeof(VkResult));
     ++encodeCount;;
@@ -35242,7 +35242,7 @@
     if (pInfo)
     {
         local_pInfo = (VkCopyAccelerationStructureInfoKHR*)pool->alloc(sizeof(const VkCopyAccelerationStructureInfoKHR));
-        deepcopy_VkCopyAccelerationStructureInfoKHR(pool, pInfo, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo));
+        deepcopy_VkCopyAccelerationStructureInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -35253,7 +35253,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyAccelerationStructureInfoKHR(sFeatureBits, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
+        count_VkCopyAccelerationStructureInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyAccelerationStructureKHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyAccelerationStructureKHR -= 8;
@@ -35269,7 +35269,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyAccelerationStructureInfoKHR(stream, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkCopyAccelerationStructureInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -35296,7 +35296,7 @@
     if (pInfo)
     {
         local_pInfo = (VkCopyAccelerationStructureToMemoryInfoKHR*)pool->alloc(sizeof(const VkCopyAccelerationStructureToMemoryInfoKHR));
-        deepcopy_VkCopyAccelerationStructureToMemoryInfoKHR(pool, pInfo, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo));
+        deepcopy_VkCopyAccelerationStructureToMemoryInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -35307,7 +35307,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyAccelerationStructureToMemoryInfoKHR(sFeatureBits, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), countPtr);
+        count_VkCopyAccelerationStructureToMemoryInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyAccelerationStructureToMemoryKHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyAccelerationStructureToMemoryKHR -= 8;
@@ -35323,7 +35323,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(stream, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyAccelerationStructureToMemoryInfoKHR*)(local_pInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -35350,7 +35350,7 @@
     if (pInfo)
     {
         local_pInfo = (VkCopyMemoryToAccelerationStructureInfoKHR*)pool->alloc(sizeof(const VkCopyMemoryToAccelerationStructureInfoKHR));
-        deepcopy_VkCopyMemoryToAccelerationStructureInfoKHR(pool, pInfo, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo));
+        deepcopy_VkCopyMemoryToAccelerationStructureInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -35361,7 +35361,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkCopyMemoryToAccelerationStructureInfoKHR(sFeatureBits, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
+        count_VkCopyMemoryToAccelerationStructureInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkCmdCopyMemoryToAccelerationStructureKHR = 4 + 4 + count;
     if (queueSubmitWithCommandsEnabled) packetSize_vkCmdCopyMemoryToAccelerationStructureKHR -= 8;
@@ -35377,7 +35377,7 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(stream, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkCopyMemoryToAccelerationStructureInfoKHR*)(local_pInfo), streamPtrPtr);
     ++encodeCount;;
     if (0 == encodeCount % POOL_CLEAR_INTERVAL)
     {
@@ -35404,7 +35404,7 @@
     if (pInfo)
     {
         local_pInfo = (VkAccelerationStructureDeviceAddressInfoKHR*)pool->alloc(sizeof(const VkAccelerationStructureDeviceAddressInfoKHR));
-        deepcopy_VkAccelerationStructureDeviceAddressInfoKHR(pool, pInfo, (VkAccelerationStructureDeviceAddressInfoKHR*)(local_pInfo));
+        deepcopy_VkAccelerationStructureDeviceAddressInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pInfo, (VkAccelerationStructureDeviceAddressInfoKHR*)(local_pInfo));
     }
     if (local_pInfo)
     {
@@ -35415,7 +35415,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAccelerationStructureDeviceAddressInfoKHR(sFeatureBits, (VkAccelerationStructureDeviceAddressInfoKHR*)(local_pInfo), countPtr);
+        count_VkAccelerationStructureDeviceAddressInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureDeviceAddressInfoKHR*)(local_pInfo), countPtr);
     }
     uint32_t packetSize_vkGetAccelerationStructureDeviceAddressKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetAccelerationStructureDeviceAddressKHR);
@@ -35429,7 +35429,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAccelerationStructureDeviceAddressInfoKHR(stream, (VkAccelerationStructureDeviceAddressInfoKHR*)(local_pInfo), streamPtrPtr);
+    reservedmarshal_VkAccelerationStructureDeviceAddressInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureDeviceAddressInfoKHR*)(local_pInfo), streamPtrPtr);
     VkDeviceAddress vkGetAccelerationStructureDeviceAddressKHR_VkDeviceAddress_return = (VkDeviceAddress)0;
     stream->read(&vkGetAccelerationStructureDeviceAddressKHR_VkDeviceAddress_return, sizeof(VkDeviceAddress));
     ++encodeCount;;
@@ -35545,7 +35545,7 @@
     if (pVersionInfo)
     {
         local_pVersionInfo = (VkAccelerationStructureVersionInfoKHR*)pool->alloc(sizeof(const VkAccelerationStructureVersionInfoKHR));
-        deepcopy_VkAccelerationStructureVersionInfoKHR(pool, pVersionInfo, (VkAccelerationStructureVersionInfoKHR*)(local_pVersionInfo));
+        deepcopy_VkAccelerationStructureVersionInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pVersionInfo, (VkAccelerationStructureVersionInfoKHR*)(local_pVersionInfo));
     }
     if (local_pVersionInfo)
     {
@@ -35556,7 +35556,7 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkAccelerationStructureVersionInfoKHR(sFeatureBits, (VkAccelerationStructureVersionInfoKHR*)(local_pVersionInfo), countPtr);
+        count_VkAccelerationStructureVersionInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureVersionInfoKHR*)(local_pVersionInfo), countPtr);
         *countPtr += sizeof(VkAccelerationStructureCompatibilityKHR);
     }
     uint32_t packetSize_vkGetDeviceAccelerationStructureCompatibilityKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
@@ -35571,7 +35571,7 @@
     *&cgen_var_0 = get_host_u64_VkDevice((*&local_device));
     memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
     *streamPtrPtr += 1 * 8;
-    reservedmarshal_VkAccelerationStructureVersionInfoKHR(stream, (VkAccelerationStructureVersionInfoKHR*)(local_pVersionInfo), streamPtrPtr);
+    reservedmarshal_VkAccelerationStructureVersionInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureVersionInfoKHR*)(local_pVersionInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (VkAccelerationStructureCompatibilityKHR*)pCompatibility, sizeof(VkAccelerationStructureCompatibilityKHR));
     *streamPtrPtr += sizeof(VkAccelerationStructureCompatibilityKHR);
     stream->read((VkAccelerationStructureCompatibilityKHR*)pCompatibility, sizeof(VkAccelerationStructureCompatibilityKHR));
@@ -35607,7 +35607,7 @@
     if (pBuildInfo)
     {
         local_pBuildInfo = (VkAccelerationStructureBuildGeometryInfoKHR*)pool->alloc(sizeof(const VkAccelerationStructureBuildGeometryInfoKHR));
-        deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, pBuildInfo, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pBuildInfo));
+        deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pBuildInfo, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pBuildInfo));
     }
     // Avoiding deepcopy for pMaxPrimitiveCounts
     local_pMaxPrimitiveCounts = (uint32_t*)pMaxPrimitiveCounts;
@@ -35621,9 +35621,9 @@
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
         *countPtr += sizeof(VkAccelerationStructureBuildTypeKHR);
-        count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pBuildInfo), countPtr);
+        count_VkAccelerationStructureBuildGeometryInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pBuildInfo), countPtr);
         *countPtr += pBuildInfo->geometryCount * sizeof(uint32_t);
-        count_VkAccelerationStructureBuildSizesInfoKHR(sFeatureBits, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo), countPtr);
+        count_VkAccelerationStructureBuildSizesInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo), countPtr);
     }
     uint32_t packetSize_vkGetAccelerationStructureBuildSizesKHR = 4 + 4 + (queueSubmitWithCommandsEnabled ? 4 : 0) + count;
     uint8_t* streamPtr = stream->reserve(packetSize_vkGetAccelerationStructureBuildSizesKHR);
@@ -35639,11 +35639,11 @@
     *streamPtrPtr += 1 * 8;
     memcpy(*streamPtrPtr, (VkAccelerationStructureBuildTypeKHR*)&local_buildType, sizeof(VkAccelerationStructureBuildTypeKHR));
     *streamPtrPtr += sizeof(VkAccelerationStructureBuildTypeKHR);
-    reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pBuildInfo), streamPtrPtr);
+    reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildGeometryInfoKHR*)(local_pBuildInfo), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint32_t*)local_pMaxPrimitiveCounts, pBuildInfo->geometryCount * sizeof(uint32_t));
     *streamPtrPtr += pBuildInfo->geometryCount * sizeof(uint32_t);
-    reservedmarshal_VkAccelerationStructureBuildSizesInfoKHR(stream, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo), streamPtrPtr);
-    unmarshal_VkAccelerationStructureBuildSizesInfoKHR(stream, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo));
+    reservedmarshal_VkAccelerationStructureBuildSizesInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo), streamPtrPtr);
+    unmarshal_VkAccelerationStructureBuildSizesInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo));
     if (pSizeInfo)
     {
         transform_fromhost_VkAccelerationStructureBuildSizesInfoKHR(sResourceTracker, (VkAccelerationStructureBuildSizesInfoKHR*)(pSizeInfo));
@@ -35688,25 +35688,25 @@
     if (pRaygenShaderBindingTable)
     {
         local_pRaygenShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pRaygenShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRaygenShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable));
     }
     local_pMissShaderBindingTable = nullptr;
     if (pMissShaderBindingTable)
     {
         local_pMissShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pMissShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMissShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable));
     }
     local_pHitShaderBindingTable = nullptr;
     if (pHitShaderBindingTable)
     {
         local_pHitShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pHitShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pHitShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable));
     }
     local_pCallableShaderBindingTable = nullptr;
     if (pCallableShaderBindingTable)
     {
         local_pCallableShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pCallableShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCallableShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable));
     }
     local_width = width;
     local_height = height;
@@ -35732,10 +35732,10 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), countPtr);
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), countPtr);
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), countPtr);
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), countPtr);
         *countPtr += sizeof(uint32_t);
         *countPtr += sizeof(uint32_t);
         *countPtr += sizeof(uint32_t);
@@ -35754,10 +35754,10 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), streamPtrPtr);
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), streamPtrPtr);
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), streamPtrPtr);
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), streamPtrPtr);
     memcpy(*streamPtrPtr, (uint32_t*)&local_width, sizeof(uint32_t));
     *streamPtrPtr += sizeof(uint32_t);
     memcpy(*streamPtrPtr, (uint32_t*)&local_height, sizeof(uint32_t));
@@ -35804,14 +35804,14 @@
         local_pCreateInfos = (VkRayTracingPipelineCreateInfoKHR*)pool->alloc(((createInfoCount)) * sizeof(const VkRayTracingPipelineCreateInfoKHR));
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            deepcopy_VkRayTracingPipelineCreateInfoKHR(pool, pCreateInfos + i, (VkRayTracingPipelineCreateInfoKHR*)(local_pCreateInfos + i));
+            deepcopy_VkRayTracingPipelineCreateInfoKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCreateInfos + i, (VkRayTracingPipelineCreateInfoKHR*)(local_pCreateInfos + i));
         }
     }
     local_pAllocator = nullptr;
     if (pAllocator)
     {
         local_pAllocator = (VkAllocationCallbacks*)pool->alloc(sizeof(const VkAllocationCallbacks));
-        deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
+        deepcopy_VkAllocationCallbacks(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
     if (local_pCreateInfos)
@@ -35836,13 +35836,13 @@
         *countPtr += sizeof(uint32_t);
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            count_VkRayTracingPipelineCreateInfoKHR(sFeatureBits, (VkRayTracingPipelineCreateInfoKHR*)(local_pCreateInfos + i), countPtr);
+            count_VkRayTracingPipelineCreateInfoKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRayTracingPipelineCreateInfoKHR*)(local_pCreateInfos + i), countPtr);
         }
         // WARNING PTR CHECK
         *countPtr += 8;
         if (local_pAllocator)
         {
-            count_VkAllocationCallbacks(sFeatureBits, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
+            count_VkAllocationCallbacks(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), countPtr);
         }
         if (((createInfoCount)))
         {
@@ -35873,7 +35873,7 @@
     *streamPtrPtr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
     {
-        reservedmarshal_VkRayTracingPipelineCreateInfoKHR(stream, (VkRayTracingPipelineCreateInfoKHR*)(local_pCreateInfos + i), streamPtrPtr);
+        reservedmarshal_VkRayTracingPipelineCreateInfoKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkRayTracingPipelineCreateInfoKHR*)(local_pCreateInfos + i), streamPtrPtr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_3 = (uint64_t)(uintptr_t)local_pAllocator;
@@ -35882,7 +35882,7 @@
     *streamPtrPtr += 8;
     if (local_pAllocator)
     {
-        reservedmarshal_VkAllocationCallbacks(stream, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
+        reservedmarshal_VkAllocationCallbacks(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkAllocationCallbacks*)(local_pAllocator), streamPtrPtr);
     }
     /* is handle, possibly out */;
     if (((createInfoCount)))
@@ -36015,25 +36015,25 @@
     if (pRaygenShaderBindingTable)
     {
         local_pRaygenShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pRaygenShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pRaygenShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable));
     }
     local_pMissShaderBindingTable = nullptr;
     if (pMissShaderBindingTable)
     {
         local_pMissShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pMissShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pMissShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable));
     }
     local_pHitShaderBindingTable = nullptr;
     if (pHitShaderBindingTable)
     {
         local_pHitShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pHitShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pHitShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable));
     }
     local_pCallableShaderBindingTable = nullptr;
     if (pCallableShaderBindingTable)
     {
         local_pCallableShaderBindingTable = (VkStridedDeviceAddressRegionKHR*)pool->alloc(sizeof(const VkStridedDeviceAddressRegionKHR));
-        deepcopy_VkStridedDeviceAddressRegionKHR(pool, pCallableShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable));
+        deepcopy_VkStridedDeviceAddressRegionKHR(pool, VK_STRUCTURE_TYPE_MAX_ENUM, pCallableShaderBindingTable, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable));
     }
     local_indirectDeviceAddress = indirectDeviceAddress;
     if (local_pRaygenShaderBindingTable)
@@ -36057,10 +36057,10 @@
     {
         uint64_t cgen_var_0;
         *countPtr += 1 * 8;
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), countPtr);
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), countPtr);
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), countPtr);
-        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), countPtr);
+        count_VkStridedDeviceAddressRegionKHR(sFeatureBits, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), countPtr);
         *countPtr += sizeof(VkDeviceAddress);
     }
     uint32_t packetSize_vkCmdTraceRaysIndirectKHR = 4 + 4 + count;
@@ -36077,10 +36077,10 @@
         memcpy(*streamPtrPtr, (uint64_t*)&cgen_var_0, 1 * 8);
         *streamPtrPtr += 1 * 8;
     }
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), streamPtrPtr);
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), streamPtrPtr);
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), streamPtrPtr);
-    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pRaygenShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pMissShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pHitShaderBindingTable), streamPtrPtr);
+    reservedmarshal_VkStridedDeviceAddressRegionKHR(stream, VK_STRUCTURE_TYPE_MAX_ENUM, (VkStridedDeviceAddressRegionKHR*)(local_pCallableShaderBindingTable), streamPtrPtr);
     memcpy(*streamPtrPtr, (VkDeviceAddress*)&local_indirectDeviceAddress, sizeof(VkDeviceAddress));
     *streamPtrPtr += sizeof(VkDeviceAddress);
     ++encodeCount;;
diff --git a/system/vulkan_enc/VkEncoder.h b/system/vulkan_enc/VkEncoder.h
index d61dbb3..160632a 100644
--- a/system/vulkan_enc/VkEncoder.h
+++ b/system/vulkan_enc/VkEncoder.h
@@ -2597,17 +2597,7 @@
         VkSurfaceKHR* pSurface,
         uint32_t doLock);
 #endif
-#ifdef VK_GOOGLE_color_buffer
-    VkResult vkRegisterImageColorBufferGOOGLE(
-    VkDevice device,
-        VkImage image,
-        uint32_t colorBuffer,
-        uint32_t doLock);
-    VkResult vkRegisterBufferColorBufferGOOGLE(
-    VkDevice device,
-        VkBuffer buffer,
-        uint32_t colorBuffer,
-        uint32_t doLock);
+#ifdef VK_EXT_fragment_density_map
 #endif
 #ifdef VK_EXT_scalar_block_layout
 #endif
@@ -2882,6 +2872,16 @@
         uint32_t doLock);
 #endif
 #ifdef VK_GOOGLE_gfxstream
+    VkResult vkRegisterImageColorBufferGOOGLE(
+    VkDevice device,
+        VkImage image,
+        uint32_t colorBuffer,
+        uint32_t doLock);
+    VkResult vkRegisterBufferColorBufferGOOGLE(
+    VkDevice device,
+        VkBuffer buffer,
+        uint32_t colorBuffer,
+        uint32_t doLock);
     VkResult vkMapMemoryIntoAddressSpaceGOOGLE(
     VkDevice device,
         VkDeviceMemory memory,
diff --git a/system/vulkan_enc/func_table.cpp b/system/vulkan_enc/func_table.cpp
index 3199d88..b1b11b5 100644
--- a/system/vulkan_enc/func_table.cpp
+++ b/system/vulkan_enc/func_table.cpp
@@ -6435,61 +6435,7 @@
     return vkCreateMetalSurfaceEXT_VkResult_return;
 }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-static VkResult entry_vkRegisterImageColorBufferGOOGLE(
-    VkDevice device,
-    VkImage image,
-    uint32_t colorBuffer)
-{
-    AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE");
-    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
-    VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
-    vkRegisterImageColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterImageColorBufferGOOGLE(device, image, colorBuffer, true /* do lock */);
-    return vkRegisterImageColorBufferGOOGLE_VkResult_return;
-}
-static VkResult dynCheck_entry_vkRegisterImageColorBufferGOOGLE(
-    VkDevice device,
-    VkImage image,
-    uint32_t colorBuffer)
-{
-    auto resources = ResourceTracker::get();
-    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_color_buffer"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkRegisterImageColorBufferGOOGLE", "VK_GOOGLE_color_buffer");
-    }
-    AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE");
-    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
-    VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
-    vkRegisterImageColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterImageColorBufferGOOGLE(device, image, colorBuffer, true /* do lock */);
-    return vkRegisterImageColorBufferGOOGLE_VkResult_return;
-}
-static VkResult entry_vkRegisterBufferColorBufferGOOGLE(
-    VkDevice device,
-    VkBuffer buffer,
-    uint32_t colorBuffer)
-{
-    AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE");
-    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
-    VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
-    vkRegisterBufferColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterBufferColorBufferGOOGLE(device, buffer, colorBuffer, true /* do lock */);
-    return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
-}
-static VkResult dynCheck_entry_vkRegisterBufferColorBufferGOOGLE(
-    VkDevice device,
-    VkBuffer buffer,
-    uint32_t colorBuffer)
-{
-    auto resources = ResourceTracker::get();
-    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_color_buffer"))
-    {
-        sOnInvalidDynamicallyCheckedCall("vkRegisterBufferColorBufferGOOGLE", "VK_GOOGLE_color_buffer");
-    }
-    AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE");
-    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
-    VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
-    vkRegisterBufferColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterBufferColorBufferGOOGLE(device, buffer, colorBuffer, true /* do lock */);
-    return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
-}
+#ifdef VK_EXT_fragment_density_map
 #endif
 #ifdef VK_EXT_scalar_block_layout
 #endif
@@ -7122,6 +7068,60 @@
 }
 #endif
 #ifdef VK_GOOGLE_gfxstream
+static VkResult entry_vkRegisterImageColorBufferGOOGLE(
+    VkDevice device,
+    VkImage image,
+    uint32_t colorBuffer)
+{
+    AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
+    vkRegisterImageColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterImageColorBufferGOOGLE(device, image, colorBuffer, true /* do lock */);
+    return vkRegisterImageColorBufferGOOGLE_VkResult_return;
+}
+static VkResult dynCheck_entry_vkRegisterImageColorBufferGOOGLE(
+    VkDevice device,
+    VkImage image,
+    uint32_t colorBuffer)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkRegisterImageColorBufferGOOGLE", "VK_GOOGLE_gfxstream");
+    }
+    AEMU_SCOPED_TRACE("vkRegisterImageColorBufferGOOGLE");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkRegisterImageColorBufferGOOGLE_VkResult_return = (VkResult)0;
+    vkRegisterImageColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterImageColorBufferGOOGLE(device, image, colorBuffer, true /* do lock */);
+    return vkRegisterImageColorBufferGOOGLE_VkResult_return;
+}
+static VkResult entry_vkRegisterBufferColorBufferGOOGLE(
+    VkDevice device,
+    VkBuffer buffer,
+    uint32_t colorBuffer)
+{
+    AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
+    vkRegisterBufferColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterBufferColorBufferGOOGLE(device, buffer, colorBuffer, true /* do lock */);
+    return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
+}
+static VkResult dynCheck_entry_vkRegisterBufferColorBufferGOOGLE(
+    VkDevice device,
+    VkBuffer buffer,
+    uint32_t colorBuffer)
+{
+    auto resources = ResourceTracker::get();
+    if (!resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream"))
+    {
+        sOnInvalidDynamicallyCheckedCall("vkRegisterBufferColorBufferGOOGLE", "VK_GOOGLE_gfxstream");
+    }
+    AEMU_SCOPED_TRACE("vkRegisterBufferColorBufferGOOGLE");
+    auto vkEnc = ResourceTracker::getThreadLocalEncoder();
+    VkResult vkRegisterBufferColorBufferGOOGLE_VkResult_return = (VkResult)0;
+    vkRegisterBufferColorBufferGOOGLE_VkResult_return = vkEnc->vkRegisterBufferColorBufferGOOGLE(device, buffer, colorBuffer, true /* do lock */);
+    return vkRegisterBufferColorBufferGOOGLE_VkResult_return;
+}
 static VkResult entry_vkMapMemoryIntoAddressSpaceGOOGLE(
     VkDevice device,
     VkDeviceMemory memory,
@@ -9672,16 +9672,6 @@
         return nullptr;
     }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-    if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
-    {
-        return nullptr;
-    }
-    if (!strcmp(name, "vkRegisterBufferColorBufferGOOGLE"))
-    {
-        return nullptr;
-    }
-#endif
 #ifdef VK_EXT_buffer_device_address
     if (!strcmp(name, "vkGetBufferDeviceAddressEXT"))
     {
@@ -9853,6 +9843,14 @@
     }
 #endif
 #ifdef VK_GOOGLE_gfxstream
+    if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
+    {
+        return nullptr;
+    }
+    if (!strcmp(name, "vkRegisterBufferColorBufferGOOGLE"))
+    {
+        return nullptr;
+    }
     if (!strcmp(name, "vkMapMemoryIntoAddressSpaceGOOGLE"))
     {
         return nullptr;
@@ -11899,16 +11897,6 @@
         return hasExt ? (void*)entry_vkCreateMetalSurfaceEXT : nullptr;
     }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-    if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
-    {
-        return (void*)dynCheck_entry_vkRegisterImageColorBufferGOOGLE;
-    }
-    if (!strcmp(name, "vkRegisterBufferColorBufferGOOGLE"))
-    {
-        return (void*)dynCheck_entry_vkRegisterBufferColorBufferGOOGLE;
-    }
-#endif
 #ifdef VK_EXT_buffer_device_address
     if (!strcmp(name, "vkGetBufferDeviceAddressEXT"))
     {
@@ -12104,6 +12092,14 @@
     }
 #endif
 #ifdef VK_GOOGLE_gfxstream
+    if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
+    {
+        return (void*)dynCheck_entry_vkRegisterImageColorBufferGOOGLE;
+    }
+    if (!strcmp(name, "vkRegisterBufferColorBufferGOOGLE"))
+    {
+        return (void*)dynCheck_entry_vkRegisterBufferColorBufferGOOGLE;
+    }
     if (!strcmp(name, "vkMapMemoryIntoAddressSpaceGOOGLE"))
     {
         return (void*)dynCheck_entry_vkMapMemoryIntoAddressSpaceGOOGLE;
@@ -14269,18 +14265,6 @@
         return hasExt ? (void*)entry_vkCreateMetalSurfaceEXT : nullptr;
     }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-    if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
-    {
-        bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_color_buffer");
-        return hasExt ? (void*)entry_vkRegisterImageColorBufferGOOGLE : nullptr;
-    }
-    if (!strcmp(name, "vkRegisterBufferColorBufferGOOGLE"))
-    {
-        bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_color_buffer");
-        return hasExt ? (void*)entry_vkRegisterBufferColorBufferGOOGLE : nullptr;
-    }
-#endif
 #ifdef VK_EXT_buffer_device_address
     if (!strcmp(name, "vkGetBufferDeviceAddressEXT"))
     {
@@ -14488,6 +14472,16 @@
     }
 #endif
 #ifdef VK_GOOGLE_gfxstream
+    if (!strcmp(name, "vkRegisterImageColorBufferGOOGLE"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream");
+        return hasExt ? (void*)entry_vkRegisterImageColorBufferGOOGLE : nullptr;
+    }
+    if (!strcmp(name, "vkRegisterBufferColorBufferGOOGLE"))
+    {
+        bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream");
+        return hasExt ? (void*)entry_vkRegisterBufferColorBufferGOOGLE : nullptr;
+    }
     if (!strcmp(name, "vkMapMemoryIntoAddressSpaceGOOGLE"))
     {
         bool hasExt = resources->hasDeviceExtension(device, "VK_GOOGLE_gfxstream");
diff --git a/system/vulkan_enc/func_table.h b/system/vulkan_enc/func_table.h
index 39f2e02..3c12410 100644
--- a/system/vulkan_enc/func_table.h
+++ b/system/vulkan_enc/func_table.h
@@ -388,7 +388,7 @@
 #endif
 #ifdef VK_EXT_metal_surface
 #endif
-#ifdef VK_GOOGLE_color_buffer
+#ifdef VK_EXT_fragment_density_map
 #endif
 #ifdef VK_EXT_scalar_block_layout
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_counting_guest.cpp b/system/vulkan_enc/goldfish_vk_counting_guest.cpp
index cc187cc..4e42832 100644
--- a/system/vulkan_enc/goldfish_vk_counting_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_counting_guest.cpp
@@ -33,16 +33,19 @@
 
 void count_extension_struct(
     uint32_t featureBits,
+    VkStructureType rootType,
     const void* structExtension,
     size_t* count);
 
 #ifdef VK_VERSION_1_0
 void count_VkExtent2D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExtent2D* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -51,10 +54,12 @@
 
 void count_VkExtent3D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExtent3D* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -64,10 +69,12 @@
 
 void count_VkOffset2D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkOffset2D* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(int32_t);
@@ -76,10 +83,12 @@
 
 void count_VkOffset3D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkOffset3D* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(int32_t);
@@ -89,50 +98,70 @@
 
 void count_VkRect2D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRect2D* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkOffset2D(featureBits, (VkOffset2D*)(&toCount->offset), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->extent), count);
+    count_VkOffset2D(featureBits, rootType, (VkOffset2D*)(&toCount->offset), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->extent), count);
 }
 
 void count_VkBaseInStructure(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBaseInStructure* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
 }
 
 void count_VkBaseOutStructure(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBaseOutStructure* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
 }
 
 void count_VkBufferMemoryBarrier(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccessFlags);
     *count += sizeof(VkAccessFlags);
     *count += sizeof(uint32_t);
@@ -145,10 +174,12 @@
 
 void count_VkDispatchIndirectCommand(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -158,10 +189,12 @@
 
 void count_VkDrawIndexedIndirectCommand(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -173,10 +206,12 @@
 
 void count_VkDrawIndirectCommand(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -187,10 +222,12 @@
 
 void count_VkImageSubresourceRange(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSubresourceRange* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkImageAspectFlags);
@@ -202,14 +239,20 @@
 
 void count_VkImageMemoryBarrier(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccessFlags);
     *count += sizeof(VkAccessFlags);
     *count += sizeof(VkImageLayout);
@@ -218,29 +261,37 @@
     *count += sizeof(uint32_t);
     uint64_t cgen_var_0;
     *count += 1 * 8;
-    count_VkImageSubresourceRange(featureBits, (VkImageSubresourceRange*)(&toCount->subresourceRange), count);
+    count_VkImageSubresourceRange(featureBits, rootType, (VkImageSubresourceRange*)(&toCount->subresourceRange), count);
 }
 
 void count_VkMemoryBarrier(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryBarrier* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccessFlags);
     *count += sizeof(VkAccessFlags);
 }
 
 void count_VkAllocationCallbacks(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAllocationCallbacks* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     // WARNING PTR CHECK
@@ -258,14 +309,20 @@
 
 void count_VkApplicationInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkApplicationInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     if (featureBits & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
         // WARNING PTR CHECK
@@ -299,10 +356,12 @@
 
 void count_VkFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFormatProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkFormatFeatureFlags);
@@ -312,13 +371,15 @@
 
 void count_VkImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageFormatProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->maxExtent), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->maxExtent), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(VkSampleCountFlags);
@@ -327,20 +388,26 @@
 
 void count_VkInstanceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkInstanceCreateFlags);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pApplicationInfo)
     {
-        count_VkApplicationInfo(featureBits, (const VkApplicationInfo*)(toCount->pApplicationInfo), count);
+        count_VkApplicationInfo(featureBits, rootType, (const VkApplicationInfo*)(toCount->pApplicationInfo), count);
     }
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -366,10 +433,12 @@
 
 void count_VkMemoryHeap(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryHeap* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceSize);
@@ -378,10 +447,12 @@
 
 void count_VkMemoryType(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryType* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkMemoryPropertyFlags);
@@ -390,10 +461,12 @@
 
 void count_VkPhysicalDeviceFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkBool32);
@@ -455,10 +528,12 @@
 
 void count_VkPhysicalDeviceLimits(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -571,30 +646,34 @@
 
 void count_VkPhysicalDeviceMemoryProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
     {
-        count_VkMemoryType(featureBits, (VkMemoryType*)(toCount->memoryTypes + i), count);
+        count_VkMemoryType(featureBits, rootType, (VkMemoryType*)(toCount->memoryTypes + i), count);
     }
     *count += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
     {
-        count_VkMemoryHeap(featureBits, (VkMemoryHeap*)(toCount->memoryHeaps + i), count);
+        count_VkMemoryHeap(featureBits, rootType, (VkMemoryHeap*)(toCount->memoryHeaps + i), count);
     }
 }
 
 void count_VkPhysicalDeviceSparseProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkBool32);
@@ -606,10 +685,12 @@
 
 void count_VkPhysicalDeviceProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -619,34 +700,42 @@
     *count += sizeof(VkPhysicalDeviceType);
     *count += VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof(char);
     *count += VK_UUID_SIZE * sizeof(uint8_t);
-    count_VkPhysicalDeviceLimits(featureBits, (VkPhysicalDeviceLimits*)(&toCount->limits), count);
-    count_VkPhysicalDeviceSparseProperties(featureBits, (VkPhysicalDeviceSparseProperties*)(&toCount->sparseProperties), count);
+    count_VkPhysicalDeviceLimits(featureBits, rootType, (VkPhysicalDeviceLimits*)(&toCount->limits), count);
+    count_VkPhysicalDeviceSparseProperties(featureBits, rootType, (VkPhysicalDeviceSparseProperties*)(&toCount->sparseProperties), count);
 }
 
 void count_VkQueueFamilyProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkQueueFlags);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->minImageTransferGranularity), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->minImageTransferGranularity), count);
 }
 
 void count_VkDeviceQueueCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceQueueCreateFlags);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -658,21 +747,27 @@
 
 void count_VkDeviceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->queueCreateInfoCount; ++i)
         {
-            count_VkDeviceQueueCreateInfo(featureBits, (const VkDeviceQueueCreateInfo*)(toCount->pQueueCreateInfos + i), count);
+            count_VkDeviceQueueCreateInfo(featureBits, rootType, (const VkDeviceQueueCreateInfo*)(toCount->pQueueCreateInfos + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -699,16 +794,18 @@
     *count += 8;
     if (toCount->pEnabledFeatures)
     {
-        count_VkPhysicalDeviceFeatures(featureBits, (const VkPhysicalDeviceFeatures*)(toCount->pEnabledFeatures), count);
+        count_VkPhysicalDeviceFeatures(featureBits, rootType, (const VkPhysicalDeviceFeatures*)(toCount->pEnabledFeatures), count);
     }
 }
 
 void count_VkExtensionProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExtensionProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
@@ -717,10 +814,12 @@
 
 void count_VkLayerProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkLayerProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
@@ -731,14 +830,20 @@
 
 void count_VkSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubmitInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->waitSemaphoreCount)
     {
@@ -762,14 +867,20 @@
 
 void count_VkMappedMemoryRange(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMappedMemoryRange* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkDeviceSize);
@@ -778,24 +889,32 @@
 
 void count_VkMemoryAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(uint32_t);
 }
 
 void count_VkMemoryRequirements(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryRequirements* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceSize);
@@ -805,10 +924,12 @@
 
 void count_VkSparseMemoryBind(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseMemoryBind* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceSize);
@@ -821,10 +942,12 @@
 
 void count_VkSparseBufferMemoryBindInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -834,17 +957,19 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->bindCount; ++i)
         {
-            count_VkSparseMemoryBind(featureBits, (const VkSparseMemoryBind*)(toCount->pBinds + i), count);
+            count_VkSparseMemoryBind(featureBits, rootType, (const VkSparseMemoryBind*)(toCount->pBinds + i), count);
         }
     }
 }
 
 void count_VkSparseImageOpaqueMemoryBindInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -854,17 +979,19 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->bindCount; ++i)
         {
-            count_VkSparseMemoryBind(featureBits, (const VkSparseMemoryBind*)(toCount->pBinds + i), count);
+            count_VkSparseMemoryBind(featureBits, rootType, (const VkSparseMemoryBind*)(toCount->pBinds + i), count);
         }
     }
 }
 
 void count_VkImageSubresource(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSubresource* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkImageAspectFlags);
@@ -874,15 +1001,17 @@
 
 void count_VkSparseImageMemoryBind(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkImageSubresource(featureBits, (VkImageSubresource*)(&toCount->subresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->offset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->extent), count);
+    count_VkImageSubresource(featureBits, rootType, (VkImageSubresource*)(&toCount->subresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->offset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->extent), count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkDeviceSize);
@@ -891,10 +1020,12 @@
 
 void count_VkSparseImageMemoryBindInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -904,21 +1035,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->bindCount; ++i)
         {
-            count_VkSparseImageMemoryBind(featureBits, (const VkSparseImageMemoryBind*)(toCount->pBinds + i), count);
+            count_VkSparseImageMemoryBind(featureBits, rootType, (const VkSparseImageMemoryBind*)(toCount->pBinds + i), count);
         }
     }
 }
 
 void count_VkBindSparseInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindSparseInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->waitSemaphoreCount)
     {
@@ -929,7 +1066,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->bufferBindCount; ++i)
         {
-            count_VkSparseBufferMemoryBindInfo(featureBits, (const VkSparseBufferMemoryBindInfo*)(toCount->pBufferBinds + i), count);
+            count_VkSparseBufferMemoryBindInfo(featureBits, rootType, (const VkSparseBufferMemoryBindInfo*)(toCount->pBufferBinds + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -937,7 +1074,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->imageOpaqueBindCount; ++i)
         {
-            count_VkSparseImageOpaqueMemoryBindInfo(featureBits, (const VkSparseImageOpaqueMemoryBindInfo*)(toCount->pImageOpaqueBinds + i), count);
+            count_VkSparseImageOpaqueMemoryBindInfo(featureBits, rootType, (const VkSparseImageOpaqueMemoryBindInfo*)(toCount->pImageOpaqueBinds + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -945,7 +1082,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->imageBindCount; ++i)
         {
-            count_VkSparseImageMemoryBindInfo(featureBits, (const VkSparseImageMemoryBindInfo*)(toCount->pImageBinds + i), count);
+            count_VkSparseImageMemoryBindInfo(featureBits, rootType, (const VkSparseImageMemoryBindInfo*)(toCount->pImageBinds + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -957,26 +1094,30 @@
 
 void count_VkSparseImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkImageAspectFlags);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->imageGranularity), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->imageGranularity), count);
     *count += sizeof(VkSparseImageFormatFlags);
 }
 
 void count_VkSparseImageMemoryRequirements(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkSparseImageFormatProperties(featureBits, (VkSparseImageFormatProperties*)(&toCount->formatProperties), count);
+    count_VkSparseImageFormatProperties(featureBits, rootType, (VkSparseImageFormatProperties*)(&toCount->formatProperties), count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkDeviceSize);
@@ -985,53 +1126,77 @@
 
 void count_VkFenceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFenceCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFenceCreateFlags);
 }
 
 void count_VkSemaphoreCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSemaphoreCreateFlags);
 }
 
 void count_VkEventCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkEventCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkEventCreateFlags);
 }
 
 void count_VkQueryPoolCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkQueryPoolCreateFlags);
     *count += sizeof(VkQueryType);
     *count += sizeof(uint32_t);
@@ -1040,14 +1205,20 @@
 
 void count_VkBufferCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBufferCreateFlags);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkBufferUsageFlags);
@@ -1066,14 +1237,20 @@
 
 void count_VkBufferViewCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBufferViewCreateFlags);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -1084,18 +1261,24 @@
 
 void count_VkImageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageCreateFlags);
     *count += sizeof(VkImageType);
     *count += sizeof(VkFormat);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->extent), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->extent), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(VkSampleCountFlagBits);
@@ -1117,10 +1300,12 @@
 
 void count_VkSubresourceLayout(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubresourceLayout* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceSize);
@@ -1132,10 +1317,12 @@
 
 void count_VkComponentMapping(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkComponentMapping* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkComponentSwizzle);
@@ -1146,33 +1333,45 @@
 
 void count_VkImageViewCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageViewCreateFlags);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkImageViewType);
     *count += sizeof(VkFormat);
-    count_VkComponentMapping(featureBits, (VkComponentMapping*)(&toCount->components), count);
-    count_VkImageSubresourceRange(featureBits, (VkImageSubresourceRange*)(&toCount->subresourceRange), count);
+    count_VkComponentMapping(featureBits, rootType, (VkComponentMapping*)(&toCount->components), count);
+    count_VkImageSubresourceRange(featureBits, rootType, (VkImageSubresourceRange*)(&toCount->subresourceRange), count);
 }
 
 void count_VkShaderModuleCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkShaderModuleCreateFlags);
     *count += 8;
     if (toCount)
@@ -1183,14 +1382,20 @@
 
 void count_VkPipelineCacheCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCacheCreateFlags);
     *count += 8;
     if (toCount)
@@ -1201,10 +1406,12 @@
 
 void count_VkSpecializationMapEntry(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -1214,10 +1421,12 @@
 
 void count_VkSpecializationInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSpecializationInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -1225,7 +1434,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->mapEntryCount; ++i)
         {
-            count_VkSpecializationMapEntry(featureBits, (const VkSpecializationMapEntry*)(toCount->pMapEntries + i), count);
+            count_VkSpecializationMapEntry(featureBits, rootType, (const VkSpecializationMapEntry*)(toCount->pMapEntries + i), count);
         }
     }
     *count += 8;
@@ -1237,14 +1446,20 @@
 
 void count_VkPipelineShaderStageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineShaderStageCreateFlags);
     *count += sizeof(VkShaderStageFlagBits);
     uint64_t cgen_var_0;
@@ -1254,22 +1469,28 @@
     *count += 8;
     if (toCount->pSpecializationInfo)
     {
-        count_VkSpecializationInfo(featureBits, (const VkSpecializationInfo*)(toCount->pSpecializationInfo), count);
+        count_VkSpecializationInfo(featureBits, rootType, (const VkSpecializationInfo*)(toCount->pSpecializationInfo), count);
     }
 }
 
 void count_VkComputePipelineCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCreateFlags);
-    count_VkPipelineShaderStageCreateInfo(featureBits, (VkPipelineShaderStageCreateInfo*)(&toCount->stage), count);
+    count_VkPipelineShaderStageCreateInfo(featureBits, rootType, (VkPipelineShaderStageCreateInfo*)(&toCount->stage), count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -1279,10 +1500,12 @@
 
 void count_VkVertexInputBindingDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -1292,10 +1515,12 @@
 
 void count_VkVertexInputAttributeDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -1306,21 +1531,27 @@
 
 void count_VkPipelineVertexInputStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineVertexInputStateCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->vertexBindingDescriptionCount; ++i)
         {
-            count_VkVertexInputBindingDescription(featureBits, (const VkVertexInputBindingDescription*)(toCount->pVertexBindingDescriptions + i), count);
+            count_VkVertexInputBindingDescription(featureBits, rootType, (const VkVertexInputBindingDescription*)(toCount->pVertexBindingDescriptions + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -1328,21 +1559,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->vertexAttributeDescriptionCount; ++i)
         {
-            count_VkVertexInputAttributeDescription(featureBits, (const VkVertexInputAttributeDescription*)(toCount->pVertexAttributeDescriptions + i), count);
+            count_VkVertexInputAttributeDescription(featureBits, rootType, (const VkVertexInputAttributeDescription*)(toCount->pVertexAttributeDescriptions + i), count);
         }
     }
 }
 
 void count_VkPipelineInputAssemblyStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineInputAssemblyStateCreateFlags);
     *count += sizeof(VkPrimitiveTopology);
     *count += sizeof(VkBool32);
@@ -1350,24 +1587,32 @@
 
 void count_VkPipelineTessellationStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineTessellationStateCreateFlags);
     *count += sizeof(uint32_t);
 }
 
 void count_VkViewport(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViewport* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(float);
@@ -1380,14 +1625,20 @@
 
 void count_VkPipelineViewportStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineViewportStateCreateFlags);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -1398,7 +1649,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->viewportCount; ++i)
             {
-                count_VkViewport(featureBits, (const VkViewport*)(toCount->pViewports + i), count);
+                count_VkViewport(featureBits, rootType, (const VkViewport*)(toCount->pViewports + i), count);
             }
         }
     }
@@ -1411,7 +1662,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->scissorCount; ++i)
             {
-                count_VkRect2D(featureBits, (const VkRect2D*)(toCount->pScissors + i), count);
+                count_VkRect2D(featureBits, rootType, (const VkRect2D*)(toCount->pScissors + i), count);
             }
         }
     }
@@ -1419,14 +1670,20 @@
 
 void count_VkPipelineRasterizationStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineRasterizationStateCreateFlags);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -1442,14 +1699,20 @@
 
 void count_VkPipelineMultisampleStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineMultisampleStateCreateFlags);
     *count += sizeof(VkSampleCountFlagBits);
     *count += sizeof(VkBool32);
@@ -1469,10 +1732,12 @@
 
 void count_VkStencilOpState(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkStencilOpState* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStencilOp);
@@ -1486,32 +1751,40 @@
 
 void count_VkPipelineDepthStencilStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineDepthStencilStateCreateFlags);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkCompareOp);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
-    count_VkStencilOpState(featureBits, (VkStencilOpState*)(&toCount->front), count);
-    count_VkStencilOpState(featureBits, (VkStencilOpState*)(&toCount->back), count);
+    count_VkStencilOpState(featureBits, rootType, (VkStencilOpState*)(&toCount->front), count);
+    count_VkStencilOpState(featureBits, rootType, (VkStencilOpState*)(&toCount->back), count);
     *count += sizeof(float);
     *count += sizeof(float);
 }
 
 void count_VkPipelineColorBlendAttachmentState(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkBool32);
@@ -1526,14 +1799,20 @@
 
 void count_VkPipelineColorBlendStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineColorBlendStateCreateFlags);
     *count += sizeof(VkBool32);
     *count += sizeof(VkLogicOp);
@@ -1542,7 +1821,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->attachmentCount; ++i)
         {
-            count_VkPipelineColorBlendAttachmentState(featureBits, (const VkPipelineColorBlendAttachmentState*)(toCount->pAttachments + i), count);
+            count_VkPipelineColorBlendAttachmentState(featureBits, rootType, (const VkPipelineColorBlendAttachmentState*)(toCount->pAttachments + i), count);
         }
     }
     *count += 4 * sizeof(float);
@@ -1550,14 +1829,20 @@
 
 void count_VkPipelineDynamicStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineDynamicStateCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
@@ -1568,10 +1853,12 @@
 
 void count_VkGraphicsPipelineCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint32_t hasRasterization = 1;
@@ -1587,14 +1874,18 @@
         *count += 4;
     }
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->stageCount; ++i)
         {
-            count_VkPipelineShaderStageCreateInfo(featureBits, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
+            count_VkPipelineShaderStageCreateInfo(featureBits, rootType, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
         }
     }
     // WARNING PTR CHECK
@@ -1604,7 +1895,7 @@
     }
     if ((!(featureBits & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || toCount->pVertexInputState))
     {
-        count_VkPipelineVertexInputStateCreateInfo(featureBits, (const VkPipelineVertexInputStateCreateInfo*)(toCount->pVertexInputState), count);
+        count_VkPipelineVertexInputStateCreateInfo(featureBits, rootType, (const VkPipelineVertexInputStateCreateInfo*)(toCount->pVertexInputState), count);
     }
     // WARNING PTR CHECK
     if (featureBits & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
@@ -1613,7 +1904,7 @@
     }
     if ((!(featureBits & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || toCount->pInputAssemblyState))
     {
-        count_VkPipelineInputAssemblyStateCreateInfo(featureBits, (const VkPipelineInputAssemblyStateCreateInfo*)(toCount->pInputAssemblyState), count);
+        count_VkPipelineInputAssemblyStateCreateInfo(featureBits, rootType, (const VkPipelineInputAssemblyStateCreateInfo*)(toCount->pInputAssemblyState), count);
     }
     // WARNING PTR CHECK
     *count += 8;
@@ -1621,7 +1912,7 @@
     {
         if (hasTessellation)
         {
-            count_VkPipelineTessellationStateCreateInfo(featureBits, (const VkPipelineTessellationStateCreateInfo*)(toCount->pTessellationState), count);
+            count_VkPipelineTessellationStateCreateInfo(featureBits, rootType, (const VkPipelineTessellationStateCreateInfo*)(toCount->pTessellationState), count);
         }
     }
     // WARNING PTR CHECK
@@ -1630,7 +1921,7 @@
     {
         if (hasRasterization)
         {
-            count_VkPipelineViewportStateCreateInfo(featureBits, (const VkPipelineViewportStateCreateInfo*)(toCount->pViewportState), count);
+            count_VkPipelineViewportStateCreateInfo(featureBits, rootType, (const VkPipelineViewportStateCreateInfo*)(toCount->pViewportState), count);
         }
     }
     // WARNING PTR CHECK
@@ -1640,7 +1931,7 @@
     }
     if ((!(featureBits & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || toCount->pRasterizationState))
     {
-        count_VkPipelineRasterizationStateCreateInfo(featureBits, (const VkPipelineRasterizationStateCreateInfo*)(toCount->pRasterizationState), count);
+        count_VkPipelineRasterizationStateCreateInfo(featureBits, rootType, (const VkPipelineRasterizationStateCreateInfo*)(toCount->pRasterizationState), count);
     }
     // WARNING PTR CHECK
     *count += 8;
@@ -1648,7 +1939,7 @@
     {
         if (hasRasterization)
         {
-            count_VkPipelineMultisampleStateCreateInfo(featureBits, (const VkPipelineMultisampleStateCreateInfo*)(toCount->pMultisampleState), count);
+            count_VkPipelineMultisampleStateCreateInfo(featureBits, rootType, (const VkPipelineMultisampleStateCreateInfo*)(toCount->pMultisampleState), count);
         }
     }
     // WARNING PTR CHECK
@@ -1657,7 +1948,7 @@
     {
         if (hasRasterization)
         {
-            count_VkPipelineDepthStencilStateCreateInfo(featureBits, (const VkPipelineDepthStencilStateCreateInfo*)(toCount->pDepthStencilState), count);
+            count_VkPipelineDepthStencilStateCreateInfo(featureBits, rootType, (const VkPipelineDepthStencilStateCreateInfo*)(toCount->pDepthStencilState), count);
         }
     }
     // WARNING PTR CHECK
@@ -1666,14 +1957,14 @@
     {
         if (hasRasterization)
         {
-            count_VkPipelineColorBlendStateCreateInfo(featureBits, (const VkPipelineColorBlendStateCreateInfo*)(toCount->pColorBlendState), count);
+            count_VkPipelineColorBlendStateCreateInfo(featureBits, rootType, (const VkPipelineColorBlendStateCreateInfo*)(toCount->pColorBlendState), count);
         }
     }
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pDynamicState)
     {
-        count_VkPipelineDynamicStateCreateInfo(featureBits, (const VkPipelineDynamicStateCreateInfo*)(toCount->pDynamicState), count);
+        count_VkPipelineDynamicStateCreateInfo(featureBits, rootType, (const VkPipelineDynamicStateCreateInfo*)(toCount->pDynamicState), count);
     }
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -1687,10 +1978,12 @@
 
 void count_VkPushConstantRange(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPushConstantRange* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkShaderStageFlags);
@@ -1700,14 +1993,20 @@
 
 void count_VkPipelineLayoutCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineLayoutCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount->setLayoutCount)
@@ -1719,21 +2018,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->pushConstantRangeCount; ++i)
         {
-            count_VkPushConstantRange(featureBits, (const VkPushConstantRange*)(toCount->pPushConstantRanges + i), count);
+            count_VkPushConstantRange(featureBits, rootType, (const VkPushConstantRange*)(toCount->pPushConstantRanges + i), count);
         }
     }
 }
 
 void count_VkSamplerCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSamplerCreateFlags);
     *count += sizeof(VkFilter);
     *count += sizeof(VkFilter);
@@ -1754,14 +2059,20 @@
 
 void count_VkCopyDescriptorSet(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -1775,10 +2086,12 @@
 
 void count_VkDescriptorBufferInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -1789,10 +2102,12 @@
 
 void count_VkDescriptorImageInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -1804,10 +2119,12 @@
 
 void count_VkDescriptorPoolSize(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDescriptorType);
@@ -1816,14 +2133,20 @@
 
 void count_VkDescriptorPoolCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDescriptorPoolCreateFlags);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -1831,21 +2154,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->poolSizeCount; ++i)
         {
-            count_VkDescriptorPoolSize(featureBits, (const VkDescriptorPoolSize*)(toCount->pPoolSizes + i), count);
+            count_VkDescriptorPoolSize(featureBits, rootType, (const VkDescriptorPoolSize*)(toCount->pPoolSizes + i), count);
         }
     }
 }
 
 void count_VkDescriptorSetAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -1857,10 +2186,12 @@
 
 void count_VkDescriptorSetLayoutBinding(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -1880,35 +2211,47 @@
 
 void count_VkDescriptorSetLayoutCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDescriptorSetLayoutCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->bindingCount; ++i)
         {
-            count_VkDescriptorSetLayoutBinding(featureBits, (const VkDescriptorSetLayoutBinding*)(toCount->pBindings + i), count);
+            count_VkDescriptorSetLayoutBinding(featureBits, rootType, (const VkDescriptorSetLayoutBinding*)(toCount->pBindings + i), count);
         }
     }
 }
 
 void count_VkWriteDescriptorSet(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -1925,7 +2268,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)toCount->descriptorCount; ++i)
                 {
-                    count_VkDescriptorImageInfo(featureBits, (const VkDescriptorImageInfo*)(toCount->pImageInfo + i), count);
+                    count_VkDescriptorImageInfo(featureBits, rootType, (const VkDescriptorImageInfo*)(toCount->pImageInfo + i), count);
                 }
             }
         }
@@ -1940,7 +2283,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)toCount->descriptorCount; ++i)
                 {
-                    count_VkDescriptorBufferInfo(featureBits, (const VkDescriptorBufferInfo*)(toCount->pBufferInfo + i), count);
+                    count_VkDescriptorBufferInfo(featureBits, rootType, (const VkDescriptorBufferInfo*)(toCount->pBufferInfo + i), count);
                 }
             }
         }
@@ -1961,10 +2304,12 @@
 
 void count_VkAttachmentDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentDescription* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkAttachmentDescriptionFlags);
@@ -1980,10 +2325,12 @@
 
 void count_VkAttachmentReference(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentReference* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -1992,14 +2339,20 @@
 
 void count_VkFramebufferCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFramebufferCreateFlags);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -2015,10 +2368,12 @@
 
 void count_VkSubpassDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDescription* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkSubpassDescriptionFlags);
@@ -2028,7 +2383,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->inputAttachmentCount; ++i)
         {
-            count_VkAttachmentReference(featureBits, (const VkAttachmentReference*)(toCount->pInputAttachments + i), count);
+            count_VkAttachmentReference(featureBits, rootType, (const VkAttachmentReference*)(toCount->pInputAttachments + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -2036,7 +2391,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->colorAttachmentCount; ++i)
         {
-            count_VkAttachmentReference(featureBits, (const VkAttachmentReference*)(toCount->pColorAttachments + i), count);
+            count_VkAttachmentReference(featureBits, rootType, (const VkAttachmentReference*)(toCount->pColorAttachments + i), count);
         }
     }
     // WARNING PTR CHECK
@@ -2047,7 +2402,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->colorAttachmentCount; ++i)
             {
-                count_VkAttachmentReference(featureBits, (const VkAttachmentReference*)(toCount->pResolveAttachments + i), count);
+                count_VkAttachmentReference(featureBits, rootType, (const VkAttachmentReference*)(toCount->pResolveAttachments + i), count);
             }
         }
     }
@@ -2055,7 +2410,7 @@
     *count += 8;
     if (toCount->pDepthStencilAttachment)
     {
-        count_VkAttachmentReference(featureBits, (const VkAttachmentReference*)(toCount->pDepthStencilAttachment), count);
+        count_VkAttachmentReference(featureBits, rootType, (const VkAttachmentReference*)(toCount->pDepthStencilAttachment), count);
     }
     *count += sizeof(uint32_t);
     if (toCount)
@@ -2066,10 +2421,12 @@
 
 void count_VkSubpassDependency(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDependency* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -2083,21 +2440,27 @@
 
 void count_VkRenderPassCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkRenderPassCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->attachmentCount; ++i)
         {
-            count_VkAttachmentDescription(featureBits, (const VkAttachmentDescription*)(toCount->pAttachments + i), count);
+            count_VkAttachmentDescription(featureBits, rootType, (const VkAttachmentDescription*)(toCount->pAttachments + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -2105,7 +2468,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->subpassCount; ++i)
         {
-            count_VkSubpassDescription(featureBits, (const VkSubpassDescription*)(toCount->pSubpasses + i), count);
+            count_VkSubpassDescription(featureBits, rootType, (const VkSubpassDescription*)(toCount->pSubpasses + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -2113,35 +2476,47 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->dependencyCount; ++i)
         {
-            count_VkSubpassDependency(featureBits, (const VkSubpassDependency*)(toCount->pDependencies + i), count);
+            count_VkSubpassDependency(featureBits, rootType, (const VkSubpassDependency*)(toCount->pDependencies + i), count);
         }
     }
 }
 
 void count_VkCommandPoolCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkCommandPoolCreateFlags);
     *count += sizeof(uint32_t);
 }
 
 void count_VkCommandBufferAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkCommandBufferLevel);
@@ -2150,14 +2525,20 @@
 
 void count_VkCommandBufferInheritanceInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -2170,29 +2551,37 @@
 
 void count_VkCommandBufferBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkCommandBufferUsageFlags);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pInheritanceInfo)
     {
-        count_VkCommandBufferInheritanceInfo(featureBits, (const VkCommandBufferInheritanceInfo*)(toCount->pInheritanceInfo), count);
+        count_VkCommandBufferInheritanceInfo(featureBits, rootType, (const VkCommandBufferInheritanceInfo*)(toCount->pInheritanceInfo), count);
     }
 }
 
 void count_VkBufferCopy(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferCopy* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceSize);
@@ -2202,10 +2591,12 @@
 
 void count_VkImageSubresourceLayers(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkImageAspectFlags);
@@ -2216,26 +2607,30 @@
 
 void count_VkBufferImageCopy(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferImageCopy* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceSize);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->imageSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->imageOffset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->imageExtent), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->imageSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->imageOffset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->imageExtent), count);
 }
 
 void count_VkClearColorValue(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearColorValue* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += 4 * sizeof(float);
@@ -2243,10 +2638,12 @@
 
 void count_VkClearDepthStencilValue(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(float);
@@ -2255,106 +2652,124 @@
 
 void count_VkClearValue(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearValue* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkClearColorValue(featureBits, (VkClearColorValue*)(&toCount->color), count);
+    count_VkClearColorValue(featureBits, rootType, (VkClearColorValue*)(&toCount->color), count);
 }
 
 void count_VkClearAttachment(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearAttachment* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkImageAspectFlags);
     *count += sizeof(uint32_t);
-    count_VkClearValue(featureBits, (VkClearValue*)(&toCount->clearValue), count);
+    count_VkClearValue(featureBits, rootType, (VkClearValue*)(&toCount->clearValue), count);
 }
 
 void count_VkClearRect(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearRect* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkRect2D(featureBits, (VkRect2D*)(&toCount->rect), count);
+    count_VkRect2D(featureBits, rootType, (VkRect2D*)(&toCount->rect), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
 }
 
 void count_VkImageBlit(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageBlit* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        count_VkOffset3D(featureBits, (VkOffset3D*)(toCount->srcOffsets + i), count);
+        count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(toCount->srcOffsets + i), count);
     }
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        count_VkOffset3D(featureBits, (VkOffset3D*)(toCount->dstOffsets + i), count);
+        count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(toCount->dstOffsets + i), count);
     }
 }
 
 void count_VkImageCopy(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageCopy* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->srcOffset), count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->dstOffset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->extent), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->srcOffset), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->dstOffset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->extent), count);
 }
 
 void count_VkImageResolve(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageResolve* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->srcOffset), count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->dstOffset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->extent), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->srcOffset), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->dstOffset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->extent), count);
 }
 
 void count_VkRenderPassBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
     *count += 1 * 8;
-    count_VkRect2D(featureBits, (VkRect2D*)(&toCount->renderArea), count);
+    count_VkRect2D(featureBits, rootType, (VkRect2D*)(&toCount->renderArea), count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -2364,7 +2779,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->clearValueCount; ++i)
             {
-                count_VkClearValue(featureBits, (const VkClearValue*)(toCount->pClearValues + i), count);
+                count_VkClearValue(featureBits, rootType, (const VkClearValue*)(toCount->pClearValues + i), count);
             }
         }
     }
@@ -2374,14 +2789,20 @@
 #ifdef VK_VERSION_1_1
 void count_VkPhysicalDeviceSubgroupProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkShaderStageFlags);
     *count += sizeof(VkSubgroupFeatureFlags);
@@ -2390,14 +2811,20 @@
 
 void count_VkBindBufferMemoryInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -2407,14 +2834,20 @@
 
 void count_VkBindImageMemoryInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -2424,14 +2857,20 @@
 
 void count_VkPhysicalDevice16BitStorageFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -2440,28 +2879,40 @@
 
 void count_VkMemoryDedicatedRequirements(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkMemoryDedicatedAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -2470,62 +2921,86 @@
 
 void count_VkMemoryAllocateFlagsInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkMemoryAllocateFlags);
     *count += sizeof(uint32_t);
 }
 
 void count_VkDeviceGroupRenderPassBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->deviceRenderAreaCount; ++i)
         {
-            count_VkRect2D(featureBits, (const VkRect2D*)(toCount->pDeviceRenderAreas + i), count);
+            count_VkRect2D(featureBits, rootType, (const VkRect2D*)(toCount->pDeviceRenderAreas + i), count);
         }
     }
 }
 
 void count_VkDeviceGroupCommandBufferBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkDeviceGroupSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -2545,28 +3020,40 @@
 
 void count_VkDeviceGroupBindSparseInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
 }
 
 void count_VkBindBufferMemoryDeviceGroupInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -2576,14 +3063,20 @@
 
 void count_VkBindImageMemoryDeviceGroupInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -2594,21 +3087,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->splitInstanceBindRegionCount; ++i)
         {
-            count_VkRect2D(featureBits, (const VkRect2D*)(toCount->pSplitInstanceBindRegions + i), count);
+            count_VkRect2D(featureBits, rootType, (const VkRect2D*)(toCount->pSplitInstanceBindRegions + i), count);
         }
     }
 }
 
 void count_VkPhysicalDeviceGroupProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += VK_MAX_DEVICE_GROUP_SIZE * sizeof(VkPhysicalDevice);
     *count += sizeof(VkBool32);
@@ -2616,14 +3115,20 @@
 
 void count_VkDeviceGroupDeviceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->physicalDeviceCount)
     {
@@ -2633,134 +3138,194 @@
 
 void count_VkBufferMemoryRequirementsInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkImageMemoryRequirementsInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkImageSparseMemoryRequirementsInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkMemoryRequirements2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryRequirements2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkMemoryRequirements(featureBits, (VkMemoryRequirements*)(&toCount->memoryRequirements), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkMemoryRequirements(featureBits, rootType, (VkMemoryRequirements*)(&toCount->memoryRequirements), count);
 }
 
 void count_VkSparseImageMemoryRequirements2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkSparseImageMemoryRequirements(featureBits, (VkSparseImageMemoryRequirements*)(&toCount->memoryRequirements), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkSparseImageMemoryRequirements(featureBits, rootType, (VkSparseImageMemoryRequirements*)(&toCount->memoryRequirements), count);
 }
 
 void count_VkPhysicalDeviceFeatures2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkPhysicalDeviceFeatures(featureBits, (VkPhysicalDeviceFeatures*)(&toCount->features), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkPhysicalDeviceFeatures(featureBits, rootType, (VkPhysicalDeviceFeatures*)(&toCount->features), count);
 }
 
 void count_VkPhysicalDeviceProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkPhysicalDeviceProperties(featureBits, (VkPhysicalDeviceProperties*)(&toCount->properties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkPhysicalDeviceProperties(featureBits, rootType, (VkPhysicalDeviceProperties*)(&toCount->properties), count);
 }
 
 void count_VkFormatProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFormatProperties2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkFormatProperties(featureBits, (VkFormatProperties*)(&toCount->formatProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkFormatProperties(featureBits, rootType, (VkFormatProperties*)(&toCount->formatProperties), count);
 }
 
 void count_VkImageFormatProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageFormatProperties2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkImageFormatProperties(featureBits, (VkImageFormatProperties*)(&toCount->imageFormatProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkImageFormatProperties(featureBits, rootType, (VkImageFormatProperties*)(&toCount->imageFormatProperties), count);
 }
 
 void count_VkPhysicalDeviceImageFormatInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFormat);
     *count += sizeof(VkImageType);
     *count += sizeof(VkImageTiling);
@@ -2770,53 +3335,77 @@
 
 void count_VkQueueFamilyProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkQueueFamilyProperties(featureBits, (VkQueueFamilyProperties*)(&toCount->queueFamilyProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkQueueFamilyProperties(featureBits, rootType, (VkQueueFamilyProperties*)(&toCount->queueFamilyProperties), count);
 }
 
 void count_VkPhysicalDeviceMemoryProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkPhysicalDeviceMemoryProperties(featureBits, (VkPhysicalDeviceMemoryProperties*)(&toCount->memoryProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkPhysicalDeviceMemoryProperties(featureBits, rootType, (VkPhysicalDeviceMemoryProperties*)(&toCount->memoryProperties), count);
 }
 
 void count_VkSparseImageFormatProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkSparseImageFormatProperties(featureBits, (VkSparseImageFormatProperties*)(&toCount->properties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkSparseImageFormatProperties(featureBits, rootType, (VkSparseImageFormatProperties*)(&toCount->properties), count);
 }
 
 void count_VkPhysicalDeviceSparseImageFormatInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFormat);
     *count += sizeof(VkImageType);
     *count += sizeof(VkSampleCountFlagBits);
@@ -2826,23 +3415,31 @@
 
 void count_VkPhysicalDevicePointClippingProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPointClippingBehavior);
 }
 
 void count_VkInputAttachmentAspectReference(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -2852,60 +3449,84 @@
 
 void count_VkRenderPassInputAttachmentAspectCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->aspectReferenceCount; ++i)
         {
-            count_VkInputAttachmentAspectReference(featureBits, (const VkInputAttachmentAspectReference*)(toCount->pAspectReferences + i), count);
+            count_VkInputAttachmentAspectReference(featureBits, rootType, (const VkInputAttachmentAspectReference*)(toCount->pAspectReferences + i), count);
         }
     }
 }
 
 void count_VkImageViewUsageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageUsageFlags);
 }
 
 void count_VkPipelineTessellationDomainOriginStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkTessellationDomainOrigin);
 }
 
 void count_VkRenderPassMultiviewCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -2925,14 +3546,20 @@
 
 void count_VkPhysicalDeviceMultiviewFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -2940,68 +3567,98 @@
 
 void count_VkPhysicalDeviceMultiviewProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPhysicalDeviceVariablePointersFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceProtectedMemoryFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceProtectedMemoryProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkDeviceQueueInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceQueueCreateFlags);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -3009,31 +3666,43 @@
 
 void count_VkProtectedSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkSamplerYcbcrConversionCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFormat);
     *count += sizeof(VkSamplerYcbcrModelConversion);
     *count += sizeof(VkSamplerYcbcrRange);
-    count_VkComponentMapping(featureBits, (VkComponentMapping*)(&toCount->components), count);
+    count_VkComponentMapping(featureBits, rootType, (VkComponentMapping*)(&toCount->components), count);
     *count += sizeof(VkChromaLocation);
     *count += sizeof(VkChromaLocation);
     *count += sizeof(VkFilter);
@@ -3042,76 +3711,108 @@
 
 void count_VkSamplerYcbcrConversionInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkBindImagePlaneMemoryInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageAspectFlagBits);
 }
 
 void count_VkImagePlaneMemoryRequirementsInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageAspectFlagBits);
 }
 
 void count_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkSamplerYcbcrConversionImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkDescriptorUpdateTemplateEntry(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -3124,21 +3825,27 @@
 
 void count_VkDescriptorUpdateTemplateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDescriptorUpdateTemplateCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->descriptorUpdateEntryCount; ++i)
         {
-            count_VkDescriptorUpdateTemplateEntry(featureBits, (const VkDescriptorUpdateTemplateEntry*)(toCount->pDescriptorUpdateEntries + i), count);
+            count_VkDescriptorUpdateTemplateEntry(featureBits, rootType, (const VkDescriptorUpdateTemplateEntry*)(toCount->pDescriptorUpdateEntries + i), count);
         }
     }
     *count += sizeof(VkDescriptorUpdateTemplateType);
@@ -3152,10 +3859,12 @@
 
 void count_VkExternalMemoryProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkExternalMemoryFeatureFlags);
@@ -3165,40 +3874,58 @@
 
 void count_VkPhysicalDeviceExternalImageFormatInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
 }
 
 void count_VkExternalImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkExternalMemoryProperties(featureBits, (VkExternalMemoryProperties*)(&toCount->externalMemoryProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExternalMemoryProperties(featureBits, rootType, (VkExternalMemoryProperties*)(&toCount->externalMemoryProperties), count);
 }
 
 void count_VkPhysicalDeviceExternalBufferInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBufferCreateFlags);
     *count += sizeof(VkBufferUsageFlags);
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
@@ -3206,27 +3933,39 @@
 
 void count_VkExternalBufferProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalBufferProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkExternalMemoryProperties(featureBits, (VkExternalMemoryProperties*)(&toCount->externalMemoryProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExternalMemoryProperties(featureBits, rootType, (VkExternalMemoryProperties*)(&toCount->externalMemoryProperties), count);
 }
 
 void count_VkPhysicalDeviceIDProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_UUID_SIZE * sizeof(uint8_t);
     *count += VK_UUID_SIZE * sizeof(uint8_t);
     *count += VK_LUID_SIZE * sizeof(uint8_t);
@@ -3236,66 +3975,96 @@
 
 void count_VkExternalMemoryImageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlags);
 }
 
 void count_VkExternalMemoryBufferCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlags);
 }
 
 void count_VkExportMemoryAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlags);
 }
 
 void count_VkPhysicalDeviceExternalFenceInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalFenceHandleTypeFlagBits);
 }
 
 void count_VkExternalFenceProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalFenceProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalFenceHandleTypeFlags);
     *count += sizeof(VkExternalFenceHandleTypeFlags);
     *count += sizeof(VkExternalFenceFeatureFlags);
@@ -3303,53 +4072,77 @@
 
 void count_VkExportFenceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalFenceHandleTypeFlags);
 }
 
 void count_VkExportSemaphoreCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalSemaphoreHandleTypeFlags);
 }
 
 void count_VkPhysicalDeviceExternalSemaphoreInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalSemaphoreHandleTypeFlagBits);
 }
 
 void count_VkExternalSemaphoreProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalSemaphoreHandleTypeFlags);
     *count += sizeof(VkExternalSemaphoreHandleTypeFlags);
     *count += sizeof(VkExternalSemaphoreFeatureFlags);
@@ -3357,41 +4150,59 @@
 
 void count_VkPhysicalDeviceMaintenance3Properties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkDeviceSize);
 }
 
 void count_VkDescriptorSetLayoutSupport(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceShaderDrawParametersFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -3399,14 +4210,20 @@
 #ifdef VK_VERSION_1_2
 void count_VkPhysicalDeviceVulkan11Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -3423,14 +4240,20 @@
 
 void count_VkPhysicalDeviceVulkan11Properties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_UUID_SIZE * sizeof(uint8_t);
     *count += VK_UUID_SIZE * sizeof(uint8_t);
     *count += VK_LUID_SIZE * sizeof(uint8_t);
@@ -3450,14 +4273,20 @@
 
 void count_VkPhysicalDeviceVulkan12Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -3509,10 +4338,12 @@
 
 void count_VkConformanceVersion(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkConformanceVersion* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint8_t);
@@ -3523,18 +4354,24 @@
 
 void count_VkPhysicalDeviceVulkan12Properties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDriverId);
     *count += VK_MAX_DRIVER_NAME_SIZE * sizeof(char);
     *count += VK_MAX_DRIVER_INFO_SIZE * sizeof(char);
-    count_VkConformanceVersion(featureBits, (VkConformanceVersion*)(&toCount->conformanceVersion), count);
+    count_VkConformanceVersion(featureBits, rootType, (VkConformanceVersion*)(&toCount->conformanceVersion), count);
     *count += sizeof(VkShaderFloatControlsIndependence);
     *count += sizeof(VkShaderFloatControlsIndependence);
     *count += sizeof(VkBool32);
@@ -3587,14 +4424,20 @@
 
 void count_VkImageFormatListCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -3604,14 +4447,20 @@
 
 void count_VkAttachmentDescription2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentDescription2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAttachmentDescriptionFlags);
     *count += sizeof(VkFormat);
     *count += sizeof(VkSampleCountFlagBits);
@@ -3625,14 +4474,20 @@
 
 void count_VkAttachmentReference2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentReference2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkImageLayout);
     *count += sizeof(VkImageAspectFlags);
@@ -3640,14 +4495,20 @@
 
 void count_VkSubpassDescription2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDescription2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSubpassDescriptionFlags);
     *count += sizeof(VkPipelineBindPoint);
     *count += sizeof(uint32_t);
@@ -3656,7 +4517,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->inputAttachmentCount; ++i)
         {
-            count_VkAttachmentReference2(featureBits, (const VkAttachmentReference2*)(toCount->pInputAttachments + i), count);
+            count_VkAttachmentReference2(featureBits, rootType, (const VkAttachmentReference2*)(toCount->pInputAttachments + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -3664,7 +4525,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->colorAttachmentCount; ++i)
         {
-            count_VkAttachmentReference2(featureBits, (const VkAttachmentReference2*)(toCount->pColorAttachments + i), count);
+            count_VkAttachmentReference2(featureBits, rootType, (const VkAttachmentReference2*)(toCount->pColorAttachments + i), count);
         }
     }
     // WARNING PTR CHECK
@@ -3675,7 +4536,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->colorAttachmentCount; ++i)
             {
-                count_VkAttachmentReference2(featureBits, (const VkAttachmentReference2*)(toCount->pResolveAttachments + i), count);
+                count_VkAttachmentReference2(featureBits, rootType, (const VkAttachmentReference2*)(toCount->pResolveAttachments + i), count);
             }
         }
     }
@@ -3683,7 +4544,7 @@
     *count += 8;
     if (toCount->pDepthStencilAttachment)
     {
-        count_VkAttachmentReference2(featureBits, (const VkAttachmentReference2*)(toCount->pDepthStencilAttachment), count);
+        count_VkAttachmentReference2(featureBits, rootType, (const VkAttachmentReference2*)(toCount->pDepthStencilAttachment), count);
     }
     *count += sizeof(uint32_t);
     if (toCount)
@@ -3694,14 +4555,20 @@
 
 void count_VkSubpassDependency2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDependency2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(VkPipelineStageFlags);
@@ -3714,21 +4581,27 @@
 
 void count_VkRenderPassCreateInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkRenderPassCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->attachmentCount; ++i)
         {
-            count_VkAttachmentDescription2(featureBits, (const VkAttachmentDescription2*)(toCount->pAttachments + i), count);
+            count_VkAttachmentDescription2(featureBits, rootType, (const VkAttachmentDescription2*)(toCount->pAttachments + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -3736,7 +4609,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->subpassCount; ++i)
         {
-            count_VkSubpassDescription2(featureBits, (const VkSubpassDescription2*)(toCount->pSubpasses + i), count);
+            count_VkSubpassDescription2(featureBits, rootType, (const VkSubpassDescription2*)(toCount->pSubpasses + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -3744,7 +4617,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->dependencyCount; ++i)
         {
-            count_VkSubpassDependency2(featureBits, (const VkSubpassDependency2*)(toCount->pDependencies + i), count);
+            count_VkSubpassDependency2(featureBits, rootType, (const VkSubpassDependency2*)(toCount->pDependencies + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -3756,39 +4629,57 @@
 
 void count_VkSubpassBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSubpassContents);
 }
 
 void count_VkSubpassEndInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassEndInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
 }
 
 void count_VkPhysicalDevice8BitStorageFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -3796,58 +4687,82 @@
 
 void count_VkPhysicalDeviceDriverProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDriverId);
     *count += VK_MAX_DRIVER_NAME_SIZE * sizeof(char);
     *count += VK_MAX_DRIVER_INFO_SIZE * sizeof(char);
-    count_VkConformanceVersion(featureBits, (VkConformanceVersion*)(&toCount->conformanceVersion), count);
+    count_VkConformanceVersion(featureBits, rootType, (VkConformanceVersion*)(&toCount->conformanceVersion), count);
 }
 
 void count_VkPhysicalDeviceShaderAtomicInt64Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceShaderFloat16Int8Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceFloatControlsProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkShaderFloatControlsIndependence);
     *count += sizeof(VkShaderFloatControlsIndependence);
     *count += sizeof(VkBool32);
@@ -3869,14 +4784,20 @@
 
 void count_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -3891,14 +4812,20 @@
 
 void count_VkPhysicalDeviceDescriptorIndexingFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -3923,14 +4850,20 @@
 
 void count_VkPhysicalDeviceDescriptorIndexingProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -3958,14 +4891,20 @@
 
 void count_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -3975,47 +4914,65 @@
 
 void count_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkSubpassDescriptionDepthStencilResolve(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkResolveModeFlagBits);
     *count += sizeof(VkResolveModeFlagBits);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pDepthStencilResolveAttachment)
     {
-        count_VkAttachmentReference2(featureBits, (const VkAttachmentReference2*)(toCount->pDepthStencilResolveAttachment), count);
+        count_VkAttachmentReference2(featureBits, rootType, (const VkAttachmentReference2*)(toCount->pDepthStencilResolveAttachment), count);
     }
 }
 
 void count_VkPhysicalDeviceDepthStencilResolveProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkResolveModeFlags);
     *count += sizeof(VkResolveModeFlags);
     *count += sizeof(VkBool32);
@@ -4024,67 +4981,97 @@
 
 void count_VkPhysicalDeviceScalarBlockLayoutFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkImageStencilUsageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageUsageFlags);
 }
 
 void count_VkSamplerReductionModeCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSamplerReductionMode);
 }
 
 void count_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceVulkanMemoryModelFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -4092,27 +5079,39 @@
 
 void count_VkPhysicalDeviceImagelessFramebufferFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkFramebufferAttachmentImageInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageCreateFlags);
     *count += sizeof(VkImageUsageFlags);
     *count += sizeof(uint32_t);
@@ -4127,34 +5126,46 @@
 
 void count_VkFramebufferAttachmentsCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->attachmentImageInfoCount; ++i)
         {
-            count_VkFramebufferAttachmentImageInfo(featureBits, (const VkFramebufferAttachmentImageInfo*)(toCount->pAttachmentImageInfos + i), count);
+            count_VkFramebufferAttachmentImageInfo(featureBits, rootType, (const VkFramebufferAttachmentImageInfo*)(toCount->pAttachmentImageInfos + i), count);
         }
     }
 }
 
 void count_VkRenderPassAttachmentBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->attachmentCount)
     {
@@ -4164,133 +5175,193 @@
 
 void count_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkAttachmentReferenceStencilLayout(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageLayout);
 }
 
 void count_VkAttachmentDescriptionStencilLayout(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageLayout);
     *count += sizeof(VkImageLayout);
 }
 
 void count_VkPhysicalDeviceHostQueryResetFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceTimelineSemaphoreFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceTimelineSemaphoreProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
 void count_VkSemaphoreTypeCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSemaphoreType);
     *count += sizeof(uint64_t);
 }
 
 void count_VkTimelineSemaphoreSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -4315,14 +5386,20 @@
 
 void count_VkSemaphoreWaitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSemaphoreWaitFlags);
     *count += sizeof(uint32_t);
     if (toCount->semaphoreCount)
@@ -4337,14 +5414,20 @@
 
 void count_VkSemaphoreSignalInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint64_t);
@@ -4352,14 +5435,20 @@
 
 void count_VkPhysicalDeviceBufferDeviceAddressFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -4367,54 +5456,78 @@
 
 void count_VkBufferDeviceAddressInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkBufferOpaqueCaptureAddressCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
 void count_VkMemoryOpaqueCaptureAddressAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
 void count_VkDeviceMemoryOpaqueCaptureAddressInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
@@ -4423,17 +5536,19 @@
 #ifdef VK_KHR_surface
 void count_VkSurfaceCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->currentExtent), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->minImageExtent), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxImageExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->currentExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minImageExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxImageExtent), count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkSurfaceTransformFlagsKHR);
     *count += sizeof(VkSurfaceTransformFlagBitsKHR);
@@ -4443,10 +5558,12 @@
 
 void count_VkSurfaceFormatKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkFormat);
@@ -4457,21 +5574,27 @@
 #ifdef VK_KHR_swapchain
 void count_VkSwapchainCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSwapchainCreateFlagsKHR);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
     *count += sizeof(VkFormat);
     *count += sizeof(VkColorSpaceKHR);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->imageExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->imageExtent), count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkImageUsageFlags);
     *count += sizeof(VkSharingMode);
@@ -4495,14 +5618,20 @@
 
 void count_VkPresentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->waitSemaphoreCount)
     {
@@ -4530,28 +5659,40 @@
 
 void count_VkImageSwapchainCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkBindImageMemorySwapchainInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -4559,14 +5700,20 @@
 
 void count_VkAcquireNextImageInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint64_t);
@@ -4579,28 +5726,40 @@
 
 void count_VkDeviceGroupPresentCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t);
     *count += sizeof(VkDeviceGroupPresentModeFlagsKHR);
 }
 
 void count_VkDeviceGroupPresentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -4611,14 +5770,20 @@
 
 void count_VkDeviceGroupSwapchainCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceGroupPresentModeFlagsKHR);
 }
 
@@ -4626,68 +5791,82 @@
 #ifdef VK_KHR_display
 void count_VkDisplayModeParametersKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->visibleRegion), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->visibleRegion), count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkDisplayModeCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDisplayModeCreateFlagsKHR);
-    count_VkDisplayModeParametersKHR(featureBits, (VkDisplayModeParametersKHR*)(&toCount->parameters), count);
+    count_VkDisplayModeParametersKHR(featureBits, rootType, (VkDisplayModeParametersKHR*)(&toCount->parameters), count);
 }
 
 void count_VkDisplayModePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
     *count += 1 * 8;
-    count_VkDisplayModeParametersKHR(featureBits, (VkDisplayModeParametersKHR*)(&toCount->parameters), count);
+    count_VkDisplayModeParametersKHR(featureBits, rootType, (VkDisplayModeParametersKHR*)(&toCount->parameters), count);
 }
 
 void count_VkDisplayPlaneCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDisplayPlaneAlphaFlagsKHR);
-    count_VkOffset2D(featureBits, (VkOffset2D*)(&toCount->minSrcPosition), count);
-    count_VkOffset2D(featureBits, (VkOffset2D*)(&toCount->maxSrcPosition), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->minSrcExtent), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxSrcExtent), count);
-    count_VkOffset2D(featureBits, (VkOffset2D*)(&toCount->minDstPosition), count);
-    count_VkOffset2D(featureBits, (VkOffset2D*)(&toCount->maxDstPosition), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->minDstExtent), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxDstExtent), count);
+    count_VkOffset2D(featureBits, rootType, (VkOffset2D*)(&toCount->minSrcPosition), count);
+    count_VkOffset2D(featureBits, rootType, (VkOffset2D*)(&toCount->maxSrcPosition), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minSrcExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxSrcExtent), count);
+    count_VkOffset2D(featureBits, rootType, (VkOffset2D*)(&toCount->minDstPosition), count);
+    count_VkOffset2D(featureBits, rootType, (VkOffset2D*)(&toCount->maxDstPosition), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minDstExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxDstExtent), count);
 }
 
 void count_VkDisplayPlanePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -4697,17 +5876,19 @@
 
 void count_VkDisplayPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t) + (toCount->displayName ? strlen(toCount->displayName) : 0);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->physicalDimensions), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->physicalResolution), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->physicalDimensions), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->physicalResolution), count);
     *count += sizeof(VkSurfaceTransformFlagsKHR);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -4715,14 +5896,20 @@
 
 void count_VkDisplaySurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDisplaySurfaceCreateFlagsKHR);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -4731,23 +5918,29 @@
     *count += sizeof(VkSurfaceTransformFlagBitsKHR);
     *count += sizeof(float);
     *count += sizeof(VkDisplayPlaneAlphaFlagBitsKHR);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->imageExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->imageExtent), count);
 }
 
 #endif
 #ifdef VK_KHR_display_swapchain
 void count_VkDisplayPresentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkRect2D(featureBits, (VkRect2D*)(&toCount->srcRect), count);
-    count_VkRect2D(featureBits, (VkRect2D*)(&toCount->dstRect), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkRect2D(featureBits, rootType, (VkRect2D*)(&toCount->srcRect), count);
+    count_VkRect2D(featureBits, rootType, (VkRect2D*)(&toCount->dstRect), count);
     *count += sizeof(VkBool32);
 }
 
@@ -4755,14 +5948,20 @@
 #ifdef VK_KHR_xlib_surface
 void count_VkXlibSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkXlibSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
     *count += 8;
@@ -4777,14 +5976,20 @@
 #ifdef VK_KHR_xcb_surface
 void count_VkXcbSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkXcbSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
     *count += 8;
@@ -4799,14 +6004,20 @@
 #ifdef VK_KHR_wayland_surface
 void count_VkWaylandSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkWaylandSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
     *count += 8;
@@ -4826,14 +6037,20 @@
 #ifdef VK_KHR_android_surface
 void count_VkAndroidSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAndroidSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
     *count += 8;
@@ -4847,14 +6064,20 @@
 #ifdef VK_KHR_win32_surface
 void count_VkWin32SurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkWin32SurfaceCreateFlagsKHR);
     *count += sizeof(HINSTANCE);
     *count += sizeof(HWND);
@@ -4882,14 +6105,20 @@
 #ifdef VK_KHR_external_memory_win32
 void count_VkImportMemoryWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
     *count += sizeof(HANDLE);
     *count += sizeof(LPCWSTR);
@@ -4897,14 +6126,20 @@
 
 void count_VkExportMemoryWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pAttributes)
@@ -4917,27 +6152,39 @@
 
 void count_VkMemoryWin32HandlePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkMemoryGetWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
@@ -4947,41 +6194,59 @@
 #ifdef VK_KHR_external_memory_fd
 void count_VkImportMemoryFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
     *count += sizeof(int);
 }
 
 void count_VkMemoryFdPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkMemoryGetFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
@@ -4991,14 +6256,20 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void count_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->acquireCount)
     {
@@ -5031,14 +6302,20 @@
 #ifdef VK_KHR_external_semaphore_win32
 void count_VkImportSemaphoreWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkSemaphoreImportFlags);
@@ -5049,14 +6326,20 @@
 
 void count_VkExportSemaphoreWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pAttributes)
@@ -5069,14 +6352,20 @@
 
 void count_VkD3D12FenceSubmitInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -5101,14 +6390,20 @@
 
 void count_VkSemaphoreGetWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkExternalSemaphoreHandleTypeFlagBits);
@@ -5118,14 +6413,20 @@
 #ifdef VK_KHR_external_semaphore_fd
 void count_VkImportSemaphoreFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkSemaphoreImportFlags);
@@ -5135,14 +6436,20 @@
 
 void count_VkSemaphoreGetFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkExternalSemaphoreHandleTypeFlagBits);
@@ -5152,14 +6459,20 @@
 #ifdef VK_KHR_push_descriptor
 void count_VkPhysicalDevicePushDescriptorPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
@@ -5171,23 +6484,27 @@
 #ifdef VK_KHR_incremental_present
 void count_VkRectLayerKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRectLayerKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkOffset2D(featureBits, (VkOffset2D*)(&toCount->offset), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->extent), count);
+    count_VkOffset2D(featureBits, rootType, (VkOffset2D*)(&toCount->offset), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->extent), count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPresentRegionKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentRegionKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -5199,7 +6516,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->rectangleCount; ++i)
             {
-                count_VkRectLayerKHR(featureBits, (const VkRectLayerKHR*)(toCount->pRectangles + i), count);
+                count_VkRectLayerKHR(featureBits, rootType, (const VkRectLayerKHR*)(toCount->pRectangles + i), count);
             }
         }
     }
@@ -5207,14 +6524,20 @@
 
 void count_VkPresentRegionsKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -5224,7 +6547,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->swapchainCount; ++i)
             {
-                count_VkPresentRegionKHR(featureBits, (const VkPresentRegionKHR*)(toCount->pRegions + i), count);
+                count_VkPresentRegionKHR(featureBits, rootType, (const VkPresentRegionKHR*)(toCount->pRegions + i), count);
             }
         }
     }
@@ -5240,14 +6563,20 @@
 #ifdef VK_KHR_shared_presentable_image
 void count_VkSharedPresentSurfaceCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageUsageFlags);
 }
 
@@ -5259,14 +6588,20 @@
 #ifdef VK_KHR_external_fence_win32
 void count_VkImportFenceWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkFenceImportFlags);
@@ -5277,14 +6612,20 @@
 
 void count_VkExportFenceWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pAttributes)
@@ -5297,14 +6638,20 @@
 
 void count_VkFenceGetWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkExternalFenceHandleTypeFlagBits);
@@ -5314,14 +6661,20 @@
 #ifdef VK_KHR_external_fence_fd
 void count_VkImportFenceFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkFenceImportFlags);
@@ -5331,14 +6684,20 @@
 
 void count_VkFenceGetFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkExternalFenceHandleTypeFlagBits);
@@ -5348,41 +6707,59 @@
 #ifdef VK_KHR_performance_query
 void count_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPerformanceCounterKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPerformanceCounterUnitKHR);
     *count += sizeof(VkPerformanceCounterScopeKHR);
     *count += sizeof(VkPerformanceCounterStorageKHR);
@@ -5391,14 +6768,20 @@
 
 void count_VkPerformanceCounterDescriptionKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPerformanceCounterDescriptionFlagsKHR);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
@@ -5407,14 +6790,20 @@
 
 void count_VkQueryPoolPerformanceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     if (toCount)
@@ -5425,10 +6814,12 @@
 
 void count_VkPerformanceCounterResultKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(int32_t);
@@ -5436,28 +6827,40 @@
 
 void count_VkAcquireProfilingLockInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAcquireProfilingLockFlagsKHR);
     *count += sizeof(uint64_t);
 }
 
 void count_VkPerformanceQuerySubmitInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
@@ -5467,42 +6870,60 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void count_VkPhysicalDeviceSurfaceInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkSurfaceCapabilities2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkSurfaceCapabilitiesKHR(featureBits, (VkSurfaceCapabilitiesKHR*)(&toCount->surfaceCapabilities), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkSurfaceCapabilitiesKHR(featureBits, rootType, (VkSurfaceCapabilitiesKHR*)(&toCount->surfaceCapabilities), count);
 }
 
 void count_VkSurfaceFormat2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkSurfaceFormatKHR(featureBits, (VkSurfaceFormatKHR*)(&toCount->surfaceFormat), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkSurfaceFormatKHR(featureBits, rootType, (VkSurfaceFormatKHR*)(&toCount->surfaceFormat), count);
 }
 
 #endif
@@ -5511,53 +6932,77 @@
 #ifdef VK_KHR_get_display_properties2
 void count_VkDisplayProperties2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkDisplayPropertiesKHR(featureBits, (VkDisplayPropertiesKHR*)(&toCount->displayProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkDisplayPropertiesKHR(featureBits, rootType, (VkDisplayPropertiesKHR*)(&toCount->displayProperties), count);
 }
 
 void count_VkDisplayPlaneProperties2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkDisplayPlanePropertiesKHR(featureBits, (VkDisplayPlanePropertiesKHR*)(&toCount->displayPlaneProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkDisplayPlanePropertiesKHR(featureBits, rootType, (VkDisplayPlanePropertiesKHR*)(&toCount->displayPlaneProperties), count);
 }
 
 void count_VkDisplayModeProperties2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkDisplayModePropertiesKHR(featureBits, (VkDisplayModePropertiesKHR*)(&toCount->displayModeProperties), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkDisplayModePropertiesKHR(featureBits, rootType, (VkDisplayModePropertiesKHR*)(&toCount->displayModeProperties), count);
 }
 
 void count_VkDisplayPlaneInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -5565,15 +7010,21 @@
 
 void count_VkDisplayPlaneCapabilities2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkDisplayPlaneCapabilitiesKHR(featureBits, (VkDisplayPlaneCapabilitiesKHR*)(&toCount->capabilities), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkDisplayPlaneCapabilitiesKHR(featureBits, rootType, (VkDisplayPlaneCapabilitiesKHR*)(&toCount->capabilities), count);
 }
 
 #endif
@@ -5594,14 +7045,20 @@
 #ifdef VK_KHR_portability_subset
 void count_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -5621,14 +7078,20 @@
 
 void count_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
@@ -5646,14 +7109,20 @@
 #ifdef VK_KHR_shader_clock
 void count_VkPhysicalDeviceShaderClockFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -5674,14 +7143,20 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void count_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -5689,42 +7164,60 @@
 #ifdef VK_KHR_fragment_shading_rate
 void count_VkFragmentShadingRateAttachmentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkAttachmentReference2(featureBits, (const VkAttachmentReference2*)(toCount->pFragmentShadingRateAttachment), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->shadingRateAttachmentTexelSize), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkAttachmentReference2(featureBits, rootType, (const VkAttachmentReference2*)(toCount->pFragmentShadingRateAttachment), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->shadingRateAttachmentTexelSize), count);
 }
 
 void count_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->fragmentSize), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->fragmentSize), count);
     *count += 2 * sizeof(VkFragmentShadingRateCombinerOpKHR);
 }
 
 void count_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -5732,21 +7225,27 @@
 
 void count_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->minFragmentShadingRateAttachmentTexelSize), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxFragmentShadingRateAttachmentTexelSize), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minFragmentShadingRateAttachmentTexelSize), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxFragmentShadingRateAttachmentTexelSize), count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxFragmentSize), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxFragmentSize), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(VkSampleCountFlagBits);
@@ -5761,16 +7260,22 @@
 
 void count_VkPhysicalDeviceFragmentShadingRateKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSampleCountFlags);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->fragmentSize), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->fragmentSize), count);
 }
 
 #endif
@@ -5779,14 +7284,20 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void count_VkSurfaceProtectedCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -5802,41 +7313,59 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void count_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPipelineInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkPipelineExecutablePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkShaderStageFlags);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
@@ -5845,14 +7374,20 @@
 
 void count_VkPipelineExecutableInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -5860,10 +7395,12 @@
 
 void count_VkPipelineExecutableStatisticValueKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkBool32);
@@ -5871,30 +7408,42 @@
 
 void count_VkPipelineExecutableStatisticKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     *count += sizeof(VkPipelineExecutableStatisticFormatKHR);
-    count_VkPipelineExecutableStatisticValueKHR(featureBits, (VkPipelineExecutableStatisticValueKHR*)(&toCount->value), count);
+    count_VkPipelineExecutableStatisticValueKHR(featureBits, rootType, (VkPipelineExecutableStatisticValueKHR*)(&toCount->value), count);
 }
 
 void count_VkPipelineExecutableInternalRepresentationKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     *count += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     *count += sizeof(VkBool32);
@@ -5914,14 +7463,20 @@
 #ifdef VK_KHR_pipeline_library
 void count_VkPipelineLibraryCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->libraryCount)
     {
@@ -5935,14 +7490,20 @@
 #ifdef VK_KHR_copy_commands2
 void count_VkBufferCopy2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkDeviceSize);
@@ -5950,14 +7511,20 @@
 
 void count_VkCopyBufferInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -5967,38 +7534,50 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->regionCount; ++i)
         {
-            count_VkBufferCopy2KHR(featureBits, (const VkBufferCopy2KHR*)(toCount->pRegions + i), count);
+            count_VkBufferCopy2KHR(featureBits, rootType, (const VkBufferCopy2KHR*)(toCount->pRegions + i), count);
         }
     }
 }
 
 void count_VkImageCopy2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageCopy2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->srcOffset), count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->dstOffset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->extent), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->srcOffset), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->dstOffset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->extent), count);
 }
 
 void count_VkCopyImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkImageLayout);
@@ -6010,39 +7589,51 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->regionCount; ++i)
         {
-            count_VkImageCopy2KHR(featureBits, (const VkImageCopy2KHR*)(toCount->pRegions + i), count);
+            count_VkImageCopy2KHR(featureBits, rootType, (const VkImageCopy2KHR*)(toCount->pRegions + i), count);
         }
     }
 }
 
 void count_VkBufferImageCopy2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->imageSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->imageOffset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->imageExtent), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->imageSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->imageOffset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->imageExtent), count);
 }
 
 void count_VkCopyBufferToImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -6053,21 +7644,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->regionCount; ++i)
         {
-            count_VkBufferImageCopy2KHR(featureBits, (const VkBufferImageCopy2KHR*)(toCount->pRegions + i), count);
+            count_VkBufferImageCopy2KHR(featureBits, rootType, (const VkBufferImageCopy2KHR*)(toCount->pRegions + i), count);
         }
     }
 }
 
 void count_VkCopyImageToBufferInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkImageLayout);
@@ -6078,43 +7675,55 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->regionCount; ++i)
         {
-            count_VkBufferImageCopy2KHR(featureBits, (const VkBufferImageCopy2KHR*)(toCount->pRegions + i), count);
+            count_VkBufferImageCopy2KHR(featureBits, rootType, (const VkBufferImageCopy2KHR*)(toCount->pRegions + i), count);
         }
     }
 }
 
 void count_VkImageBlit2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageBlit2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
-    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
     {
-        count_VkOffset3D(featureBits, (VkOffset3D*)(toCount->srcOffsets + i), count);
+        rootType = toCount->sType;
     }
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        count_VkOffset3D(featureBits, (VkOffset3D*)(toCount->dstOffsets + i), count);
+        count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(toCount->srcOffsets + i), count);
+    }
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    {
+        count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(toCount->dstOffsets + i), count);
     }
 }
 
 void count_VkBlitImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkImageLayout);
@@ -6126,7 +7735,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->regionCount; ++i)
         {
-            count_VkImageBlit2KHR(featureBits, (const VkImageBlit2KHR*)(toCount->pRegions + i), count);
+            count_VkImageBlit2KHR(featureBits, rootType, (const VkImageBlit2KHR*)(toCount->pRegions + i), count);
         }
     }
     *count += sizeof(VkFilter);
@@ -6134,31 +7743,43 @@
 
 void count_VkImageResolve2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageResolve2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->srcOffset), count);
-    count_VkImageSubresourceLayers(featureBits, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
-    count_VkOffset3D(featureBits, (VkOffset3D*)(&toCount->dstOffset), count);
-    count_VkExtent3D(featureBits, (VkExtent3D*)(&toCount->extent), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->srcSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->srcOffset), count);
+    count_VkImageSubresourceLayers(featureBits, rootType, (VkImageSubresourceLayers*)(&toCount->dstSubresource), count);
+    count_VkOffset3D(featureBits, rootType, (VkOffset3D*)(&toCount->dstOffset), count);
+    count_VkExtent3D(featureBits, rootType, (VkExtent3D*)(&toCount->extent), count);
 }
 
 void count_VkResolveImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkImageLayout);
@@ -6170,7 +7791,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->regionCount; ++i)
         {
-            count_VkImageResolve2KHR(featureBits, (const VkImageResolve2KHR*)(toCount->pRegions + i), count);
+            count_VkImageResolve2KHR(featureBits, rootType, (const VkImageResolve2KHR*)(toCount->pRegions + i), count);
         }
     }
 }
@@ -6179,14 +7800,20 @@
 #ifdef VK_ANDROID_native_buffer
 void count_VkNativeBufferANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->handle)
@@ -6204,14 +7831,20 @@
 #ifdef VK_EXT_debug_report
 void count_VkDebugReportCallbackCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDebugReportFlagsEXT);
     *count += 8;
     // WARNING PTR CHECK
@@ -6232,14 +7865,20 @@
 #ifdef VK_AMD_rasterization_order
 void count_VkPipelineRasterizationStateRasterizationOrderAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkRasterizationOrderAMD);
 }
 
@@ -6251,14 +7890,20 @@
 #ifdef VK_EXT_debug_marker
 void count_VkDebugMarkerObjectNameInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDebugReportObjectTypeEXT);
     *count += sizeof(uint64_t);
     *count += sizeof(uint32_t) + (toCount->pObjectName ? strlen(toCount->pObjectName) : 0);
@@ -6266,14 +7911,20 @@
 
 void count_VkDebugMarkerObjectTagInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDebugReportObjectTypeEXT);
     *count += sizeof(uint64_t);
     *count += sizeof(uint64_t);
@@ -6286,14 +7937,20 @@
 
 void count_VkDebugMarkerMarkerInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t) + (toCount->pMarkerName ? strlen(toCount->pMarkerName) : 0);
     *count += 4 * sizeof(float);
 }
@@ -6304,40 +7961,58 @@
 #ifdef VK_NV_dedicated_allocation
 void count_VkDedicatedAllocationImageCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkDedicatedAllocationBufferCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkDedicatedAllocationMemoryAllocateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -6348,28 +8023,40 @@
 #ifdef VK_EXT_transform_feedback
 void count_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(VkDeviceSize);
@@ -6384,14 +8071,20 @@
 
 void count_VkPipelineRasterizationStateStreamCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineRasterizationStateStreamCreateFlagsEXT);
     *count += sizeof(uint32_t);
 }
@@ -6400,14 +8093,20 @@
 #ifdef VK_NVX_image_view_handle
 void count_VkImageViewHandleInfoNVX(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkDescriptorType);
@@ -6417,14 +8116,20 @@
 
 void count_VkImageViewAddressPropertiesNVX(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceAddress);
     *count += sizeof(VkDeviceSize);
 }
@@ -6441,14 +8146,20 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void count_VkTextureLODGatherFormatPropertiesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -6456,10 +8167,12 @@
 #ifdef VK_AMD_shader_info
 void count_VkShaderResourceUsageAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -6471,14 +8184,16 @@
 
 void count_VkShaderStatisticsInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkShaderStageFlags);
-    count_VkShaderResourceUsageAMD(featureBits, (VkShaderResourceUsageAMD*)(&toCount->resourceUsage), count);
+    count_VkShaderResourceUsageAMD(featureBits, rootType, (VkShaderResourceUsageAMD*)(&toCount->resourceUsage), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -6492,14 +8207,20 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void count_VkStreamDescriptorSurfaceCreateInfoGGP(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkStreamDescriptorSurfaceCreateFlagsGGP);
     *count += sizeof(GgpStreamDescriptor);
 }
@@ -6508,14 +8229,20 @@
 #ifdef VK_NV_corner_sampled_image
 void count_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -6525,13 +8252,15 @@
 #ifdef VK_NV_external_memory_capabilities
 void count_VkExternalImageFormatPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkImageFormatProperties(featureBits, (VkImageFormatProperties*)(&toCount->imageFormatProperties), count);
+    count_VkImageFormatProperties(featureBits, rootType, (VkImageFormatProperties*)(&toCount->imageFormatProperties), count);
     *count += sizeof(VkExternalMemoryFeatureFlagsNV);
     *count += sizeof(VkExternalMemoryHandleTypeFlagsNV);
     *count += sizeof(VkExternalMemoryHandleTypeFlagsNV);
@@ -6541,27 +8270,39 @@
 #ifdef VK_NV_external_memory
 void count_VkExternalMemoryImageCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagsNV);
 }
 
 void count_VkExportMemoryAllocateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagsNV);
 }
 
@@ -6569,28 +8310,40 @@
 #ifdef VK_NV_external_memory_win32
 void count_VkImportMemoryWin32HandleInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagsNV);
     *count += sizeof(HANDLE);
 }
 
 void count_VkExportMemoryWin32HandleInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pAttributes)
@@ -6604,14 +8357,20 @@
 #ifdef VK_NV_win32_keyed_mutex
 void count_VkWin32KeyedMutexAcquireReleaseInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount->acquireCount)
     {
@@ -6640,14 +8399,20 @@
 #ifdef VK_EXT_validation_flags
 void count_VkValidationFlagsEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -6659,14 +8424,20 @@
 #ifdef VK_NN_vi_surface
 void count_VkViSurfaceCreateInfoNN(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkViSurfaceCreateFlagsNN);
     // WARNING PTR CHECK
     *count += 8;
@@ -6684,14 +8455,20 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void count_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -6699,27 +8476,39 @@
 #ifdef VK_EXT_astc_decode_mode
 void count_VkImageViewASTCDecodeModeEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFormat);
 }
 
 void count_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -6727,14 +8516,20 @@
 #ifdef VK_EXT_conditional_rendering
 void count_VkConditionalRenderingBeginInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkDeviceSize);
@@ -6743,28 +8538,40 @@
 
 void count_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -6772,10 +8579,12 @@
 #ifdef VK_NV_clip_space_w_scaling
 void count_VkViewportWScalingNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViewportWScalingNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(float);
@@ -6784,14 +8593,20 @@
 
 void count_VkPipelineViewportWScalingStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -6802,7 +8617,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->viewportCount; ++i)
             {
-                count_VkViewportWScalingNV(featureBits, (const VkViewportWScalingNV*)(toCount->pViewportWScalings + i), count);
+                count_VkViewportWScalingNV(featureBits, rootType, (const VkViewportWScalingNV*)(toCount->pViewportWScalings + i), count);
             }
         }
     }
@@ -6816,19 +8631,25 @@
 #ifdef VK_EXT_display_surface_counter
 void count_VkSurfaceCapabilities2EXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->currentExtent), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->minImageExtent), count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxImageExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->currentExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minImageExtent), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxImageExtent), count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkSurfaceTransformFlagsKHR);
     *count += sizeof(VkSurfaceTransformFlagBitsKHR);
@@ -6841,53 +8662,77 @@
 #ifdef VK_EXT_display_control
 void count_VkDisplayPowerInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDisplayPowerStateEXT);
 }
 
 void count_VkDeviceEventInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceEventTypeEXT);
 }
 
 void count_VkDisplayEventInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDisplayEventTypeEXT);
 }
 
 void count_VkSwapchainCounterCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSurfaceCounterFlagsEXT);
 }
 
@@ -6895,10 +8740,12 @@
 #ifdef VK_GOOGLE_display_timing
 void count_VkRefreshCycleDurationGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint64_t);
@@ -6906,10 +8753,12 @@
 
 void count_VkPastPresentationTimingGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -6921,10 +8770,12 @@
 
 void count_VkPresentTimeGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -6933,14 +8784,20 @@
 
 void count_VkPresentTimesInfoGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -6950,7 +8807,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->swapchainCount; ++i)
             {
-                count_VkPresentTimeGOOGLE(featureBits, (const VkPresentTimeGOOGLE*)(toCount->pTimes + i), count);
+                count_VkPresentTimeGOOGLE(featureBits, rootType, (const VkPresentTimeGOOGLE*)(toCount->pTimes + i), count);
             }
         }
     }
@@ -6966,14 +8823,20 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void count_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -6981,10 +8844,12 @@
 #ifdef VK_NV_viewport_swizzle
 void count_VkViewportSwizzleNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkViewportCoordinateSwizzleNV);
@@ -6995,14 +8860,20 @@
 
 void count_VkPipelineViewportSwizzleStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineViewportSwizzleStateCreateFlagsNV);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -7013,7 +8884,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->viewportCount; ++i)
             {
-                count_VkViewportSwizzleNV(featureBits, (const VkViewportSwizzleNV*)(toCount->pViewportSwizzles + i), count);
+                count_VkViewportSwizzleNV(featureBits, rootType, (const VkViewportSwizzleNV*)(toCount->pViewportSwizzles + i), count);
             }
         }
     }
@@ -7023,27 +8894,39 @@
 #ifdef VK_EXT_discard_rectangles
 void count_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPipelineDiscardRectangleStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineDiscardRectangleStateCreateFlagsEXT);
     *count += sizeof(VkDiscardRectangleModeEXT);
     *count += sizeof(uint32_t);
@@ -7055,7 +8938,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->discardRectangleCount; ++i)
             {
-                count_VkRect2D(featureBits, (const VkRect2D*)(toCount->pDiscardRectangles + i), count);
+                count_VkRect2D(featureBits, rootType, (const VkRect2D*)(toCount->pDiscardRectangles + i), count);
             }
         }
     }
@@ -7065,14 +8948,20 @@
 #ifdef VK_EXT_conservative_rasterization
 void count_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(float);
     *count += sizeof(float);
     *count += sizeof(float);
@@ -7086,14 +8975,20 @@
 
 void count_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineRasterizationConservativeStateCreateFlagsEXT);
     *count += sizeof(VkConservativeRasterizationModeEXT);
     *count += sizeof(float);
@@ -7103,27 +8998,39 @@
 #ifdef VK_EXT_depth_clip_enable
 void count_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineRasterizationDepthClipStateCreateFlagsEXT);
     *count += sizeof(VkBool32);
 }
@@ -7134,10 +9041,12 @@
 #ifdef VK_EXT_hdr_metadata
 void count_VkXYColorEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkXYColorEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(float);
@@ -7146,18 +9055,24 @@
 
 void count_VkHdrMetadataEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkXYColorEXT(featureBits, (VkXYColorEXT*)(&toCount->displayPrimaryRed), count);
-    count_VkXYColorEXT(featureBits, (VkXYColorEXT*)(&toCount->displayPrimaryGreen), count);
-    count_VkXYColorEXT(featureBits, (VkXYColorEXT*)(&toCount->displayPrimaryBlue), count);
-    count_VkXYColorEXT(featureBits, (VkXYColorEXT*)(&toCount->whitePoint), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkXYColorEXT(featureBits, rootType, (VkXYColorEXT*)(&toCount->displayPrimaryRed), count);
+    count_VkXYColorEXT(featureBits, rootType, (VkXYColorEXT*)(&toCount->displayPrimaryGreen), count);
+    count_VkXYColorEXT(featureBits, rootType, (VkXYColorEXT*)(&toCount->displayPrimaryBlue), count);
+    count_VkXYColorEXT(featureBits, rootType, (VkXYColorEXT*)(&toCount->whitePoint), count);
     *count += sizeof(float);
     *count += sizeof(float);
     *count += sizeof(float);
@@ -7168,14 +9083,20 @@
 #ifdef VK_MVK_ios_surface
 void count_VkIOSSurfaceCreateInfoMVK(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkIOSSurfaceCreateFlagsMVK);
     // WARNING PTR CHECK
     *count += 8;
@@ -7189,14 +9110,20 @@
 #ifdef VK_MVK_macos_surface
 void count_VkMacOSSurfaceCreateInfoMVK(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkMacOSSurfaceCreateFlagsMVK);
     // WARNING PTR CHECK
     *count += 8;
@@ -7216,28 +9143,40 @@
 #ifdef VK_EXT_debug_utils
 void count_VkDebugUtilsLabelEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t) + (toCount->pLabelName ? strlen(toCount->pLabelName) : 0);
     *count += 4 * sizeof(float);
 }
 
 void count_VkDebugUtilsObjectNameInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkObjectType);
     *count += sizeof(uint64_t);
     if (featureBits & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
@@ -7257,14 +9196,20 @@
 
 void count_VkDebugUtilsMessengerCallbackDataEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDebugUtilsMessengerCallbackDataFlagsEXT);
     if (featureBits & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
@@ -7290,7 +9235,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->queueLabelCount; ++i)
             {
-                count_VkDebugUtilsLabelEXT(featureBits, (VkDebugUtilsLabelEXT*)(toCount->pQueueLabels + i), count);
+                count_VkDebugUtilsLabelEXT(featureBits, rootType, (VkDebugUtilsLabelEXT*)(toCount->pQueueLabels + i), count);
             }
         }
     }
@@ -7303,7 +9248,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->cmdBufLabelCount; ++i)
             {
-                count_VkDebugUtilsLabelEXT(featureBits, (VkDebugUtilsLabelEXT*)(toCount->pCmdBufLabels + i), count);
+                count_VkDebugUtilsLabelEXT(featureBits, rootType, (VkDebugUtilsLabelEXT*)(toCount->pCmdBufLabels + i), count);
             }
         }
     }
@@ -7316,7 +9261,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->objectCount; ++i)
             {
-                count_VkDebugUtilsObjectNameInfoEXT(featureBits, (VkDebugUtilsObjectNameInfoEXT*)(toCount->pObjects + i), count);
+                count_VkDebugUtilsObjectNameInfoEXT(featureBits, rootType, (VkDebugUtilsObjectNameInfoEXT*)(toCount->pObjects + i), count);
             }
         }
     }
@@ -7324,14 +9269,20 @@
 
 void count_VkDebugUtilsMessengerCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDebugUtilsMessengerCreateFlagsEXT);
     *count += sizeof(VkDebugUtilsMessageSeverityFlagsEXT);
     *count += sizeof(VkDebugUtilsMessageTypeFlagsEXT);
@@ -7346,14 +9297,20 @@
 
 void count_VkDebugUtilsObjectTagInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkObjectType);
     *count += sizeof(uint64_t);
     *count += sizeof(uint64_t);
@@ -7368,45 +9325,63 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void count_VkAndroidHardwareBufferUsageANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
 void count_VkAndroidHardwareBufferPropertiesANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(uint32_t);
 }
 
 void count_VkAndroidHardwareBufferFormatPropertiesANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFormat);
     *count += sizeof(uint64_t);
     *count += sizeof(VkFormatFeatureFlags);
-    count_VkComponentMapping(featureBits, (VkComponentMapping*)(&toCount->samplerYcbcrConversionComponents), count);
+    count_VkComponentMapping(featureBits, rootType, (VkComponentMapping*)(&toCount->samplerYcbcrConversionComponents), count);
     *count += sizeof(VkSamplerYcbcrModelConversion);
     *count += sizeof(VkSamplerYcbcrRange);
     *count += sizeof(VkChromaLocation);
@@ -7415,41 +9390,59 @@
 
 void count_VkImportAndroidHardwareBufferInfoANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(AHardwareBuffer);
 }
 
 void count_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkExternalFormatANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
@@ -7465,28 +9458,40 @@
 #ifdef VK_EXT_inline_uniform_block
 void count_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -7496,14 +9501,20 @@
 
 void count_VkWriteDescriptorSetInlineUniformBlockEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -7513,14 +9524,20 @@
 
 void count_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
@@ -7530,10 +9547,12 @@
 #ifdef VK_EXT_sample_locations
 void count_VkSampleLocationEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSampleLocationEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(float);
@@ -7542,66 +9561,82 @@
 
 void count_VkSampleLocationsInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSampleCountFlagBits);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->sampleLocationGridSize), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->sampleLocationGridSize), count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->sampleLocationsCount; ++i)
         {
-            count_VkSampleLocationEXT(featureBits, (const VkSampleLocationEXT*)(toCount->pSampleLocations + i), count);
+            count_VkSampleLocationEXT(featureBits, rootType, (const VkSampleLocationEXT*)(toCount->pSampleLocations + i), count);
         }
     }
 }
 
 void count_VkAttachmentSampleLocationsEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
-    count_VkSampleLocationsInfoEXT(featureBits, (VkSampleLocationsInfoEXT*)(&toCount->sampleLocationsInfo), count);
+    count_VkSampleLocationsInfoEXT(featureBits, rootType, (VkSampleLocationsInfoEXT*)(&toCount->sampleLocationsInfo), count);
 }
 
 void count_VkSubpassSampleLocationsEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
-    count_VkSampleLocationsInfoEXT(featureBits, (VkSampleLocationsInfoEXT*)(&toCount->sampleLocationsInfo), count);
+    count_VkSampleLocationsInfoEXT(featureBits, rootType, (VkSampleLocationsInfoEXT*)(&toCount->sampleLocationsInfo), count);
 }
 
 void count_VkRenderPassSampleLocationsBeginInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->attachmentInitialSampleLocationsCount; ++i)
         {
-            count_VkAttachmentSampleLocationsEXT(featureBits, (const VkAttachmentSampleLocationsEXT*)(toCount->pAttachmentInitialSampleLocations + i), count);
+            count_VkAttachmentSampleLocationsEXT(featureBits, rootType, (const VkAttachmentSampleLocationsEXT*)(toCount->pAttachmentInitialSampleLocations + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -7609,37 +9644,49 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->postSubpassSampleLocationsCount; ++i)
         {
-            count_VkSubpassSampleLocationsEXT(featureBits, (const VkSubpassSampleLocationsEXT*)(toCount->pPostSubpassSampleLocations + i), count);
+            count_VkSubpassSampleLocationsEXT(featureBits, rootType, (const VkSubpassSampleLocationsEXT*)(toCount->pPostSubpassSampleLocations + i), count);
         }
     }
 }
 
 void count_VkPipelineSampleLocationsStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
-    count_VkSampleLocationsInfoEXT(featureBits, (VkSampleLocationsInfoEXT*)(&toCount->sampleLocationsInfo), count);
+    count_VkSampleLocationsInfoEXT(featureBits, rootType, (VkSampleLocationsInfoEXT*)(&toCount->sampleLocationsInfo), count);
 }
 
 void count_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSampleCountFlags);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxSampleLocationGridSize), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxSampleLocationGridSize), count);
     *count += 2 * sizeof(float);
     *count += sizeof(uint32_t);
     *count += sizeof(VkBool32);
@@ -7647,42 +9694,60 @@
 
 void count_VkMultisamplePropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->maxSampleLocationGridSize), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxSampleLocationGridSize), count);
 }
 
 #endif
 #ifdef VK_EXT_blend_operation_advanced
 void count_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -7693,14 +9758,20 @@
 
 void count_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBlendOverlapEXT);
@@ -7710,14 +9781,20 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void count_VkPipelineCoverageToColorStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCoverageToColorStateCreateFlagsNV);
     *count += sizeof(VkBool32);
     *count += sizeof(uint32_t);
@@ -7727,14 +9804,20 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void count_VkPipelineCoverageModulationStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCoverageModulationStateCreateFlagsNV);
     *count += sizeof(VkCoverageModulationModeNV);
     *count += sizeof(VkBool32);
@@ -7756,28 +9839,40 @@
 #ifdef VK_NV_shader_sm_builtins
 void count_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -7787,10 +9882,12 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void count_VkDrmFormatModifierPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint64_t);
@@ -7800,14 +9897,20 @@
 
 void count_VkDrmFormatModifierPropertiesListEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -7817,7 +9920,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->drmFormatModifierCount; ++i)
             {
-                count_VkDrmFormatModifierPropertiesEXT(featureBits, (VkDrmFormatModifierPropertiesEXT*)(toCount->pDrmFormatModifierProperties + i), count);
+                count_VkDrmFormatModifierPropertiesEXT(featureBits, rootType, (VkDrmFormatModifierPropertiesEXT*)(toCount->pDrmFormatModifierProperties + i), count);
             }
         }
     }
@@ -7825,14 +9928,20 @@
 
 void count_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
     *count += sizeof(VkSharingMode);
     *count += sizeof(uint32_t);
@@ -7849,14 +9958,20 @@
 
 void count_VkImageDrmFormatModifierListCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -7866,35 +9981,47 @@
 
 void count_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->drmFormatModifierPlaneCount; ++i)
         {
-            count_VkSubresourceLayout(featureBits, (const VkSubresourceLayout*)(toCount->pPlaneLayouts + i), count);
+            count_VkSubresourceLayout(featureBits, rootType, (const VkSubresourceLayout*)(toCount->pPlaneLayouts + i), count);
         }
     }
 }
 
 void count_VkImageDrmFormatModifierPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
@@ -7902,14 +10029,20 @@
 #ifdef VK_EXT_validation_cache
 void count_VkValidationCacheCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkValidationCacheCreateFlagsEXT);
     *count += 8;
     if (toCount)
@@ -7920,14 +10053,20 @@
 
 void count_VkShaderModuleValidationCacheCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
@@ -7940,10 +10079,12 @@
 #ifdef VK_NV_shading_rate_image
 void count_VkShadingRatePaletteNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -7955,14 +10096,20 @@
 
 void count_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -7973,7 +10120,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->viewportCount; ++i)
             {
-                count_VkShadingRatePaletteNV(featureBits, (const VkShadingRatePaletteNV*)(toCount->pShadingRatePalettes + i), count);
+                count_VkShadingRatePaletteNV(featureBits, rootType, (const VkShadingRatePaletteNV*)(toCount->pShadingRatePalettes + i), count);
             }
         }
     }
@@ -7981,39 +10128,53 @@
 
 void count_VkPhysicalDeviceShadingRateImageFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceShadingRateImagePropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkExtent2D(featureBits, (VkExtent2D*)(&toCount->shadingRateTexelSize), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->shadingRateTexelSize), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
 }
 
 void count_VkCoarseSampleLocationNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -8023,10 +10184,12 @@
 
 void count_VkCoarseSampleOrderCustomNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkShadingRatePaletteEntryNV);
@@ -8036,28 +10199,34 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->sampleLocationCount; ++i)
         {
-            count_VkCoarseSampleLocationNV(featureBits, (const VkCoarseSampleLocationNV*)(toCount->pSampleLocations + i), count);
+            count_VkCoarseSampleLocationNV(featureBits, rootType, (const VkCoarseSampleLocationNV*)(toCount->pSampleLocations + i), count);
         }
     }
 }
 
 void count_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkCoarseSampleOrderTypeNV);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->customSampleOrderCount; ++i)
         {
-            count_VkCoarseSampleOrderCustomNV(featureBits, (const VkCoarseSampleOrderCustomNV*)(toCount->pCustomSampleOrders + i), count);
+            count_VkCoarseSampleOrderCustomNV(featureBits, rootType, (const VkCoarseSampleOrderCustomNV*)(toCount->pCustomSampleOrders + i), count);
         }
     }
 }
@@ -8066,14 +10235,20 @@
 #ifdef VK_NV_ray_tracing
 void count_VkRayTracingShaderGroupCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkRayTracingShaderGroupTypeKHR);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -8083,21 +10258,27 @@
 
 void count_VkRayTracingPipelineCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->stageCount; ++i)
         {
-            count_VkPipelineShaderStageCreateInfo(featureBits, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
+            count_VkPipelineShaderStageCreateInfo(featureBits, rootType, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -8105,7 +10286,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->groupCount; ++i)
         {
-            count_VkRayTracingShaderGroupCreateInfoNV(featureBits, (const VkRayTracingShaderGroupCreateInfoNV*)(toCount->pGroups + i), count);
+            count_VkRayTracingShaderGroupCreateInfoNV(featureBits, rootType, (const VkRayTracingShaderGroupCreateInfoNV*)(toCount->pGroups + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -8118,14 +10299,20 @@
 
 void count_VkGeometryTrianglesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkDeviceSize);
@@ -8144,14 +10331,20 @@
 
 void count_VkGeometryAABBNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryAABBNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(uint32_t);
@@ -8161,41 +10354,55 @@
 
 void count_VkGeometryDataNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryDataNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkGeometryTrianglesNV(featureBits, (VkGeometryTrianglesNV*)(&toCount->triangles), count);
-    count_VkGeometryAABBNV(featureBits, (VkGeometryAABBNV*)(&toCount->aabbs), count);
+    count_VkGeometryTrianglesNV(featureBits, rootType, (VkGeometryTrianglesNV*)(&toCount->triangles), count);
+    count_VkGeometryAABBNV(featureBits, rootType, (VkGeometryAABBNV*)(&toCount->aabbs), count);
 }
 
 void count_VkGeometryNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkGeometryTypeKHR);
-    count_VkGeometryDataNV(featureBits, (VkGeometryDataNV*)(&toCount->geometry), count);
+    count_VkGeometryDataNV(featureBits, rootType, (VkGeometryDataNV*)(&toCount->geometry), count);
     *count += sizeof(VkGeometryFlagsKHR);
 }
 
 void count_VkAccelerationStructureInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccelerationStructureTypeNV);
     *count += sizeof(VkBuildAccelerationStructureFlagsNV);
     *count += sizeof(uint32_t);
@@ -8204,35 +10411,47 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->geometryCount; ++i)
         {
-            count_VkGeometryNV(featureBits, (const VkGeometryNV*)(toCount->pGeometries + i), count);
+            count_VkGeometryNV(featureBits, rootType, (const VkGeometryNV*)(toCount->pGeometries + i), count);
         }
     }
 }
 
 void count_VkAccelerationStructureCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
-    count_VkAccelerationStructureInfoNV(featureBits, (VkAccelerationStructureInfoNV*)(&toCount->info), count);
+    count_VkAccelerationStructureInfoNV(featureBits, rootType, (VkAccelerationStructureInfoNV*)(&toCount->info), count);
 }
 
 void count_VkBindAccelerationStructureMemoryInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -8247,14 +10466,20 @@
 
 void count_VkWriteDescriptorSetAccelerationStructureNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -8269,14 +10494,20 @@
 
 void count_VkAccelerationStructureMemoryRequirementsInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccelerationStructureMemoryRequirementsTypeNV);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -8284,14 +10515,20 @@
 
 void count_VkPhysicalDeviceRayTracingPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -8304,10 +10541,12 @@
 
 void count_VkTransformMatrixKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += ((3)*(4)) * sizeof(float);
@@ -8315,10 +10554,12 @@
 
 void count_VkAabbPositionsKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(float);
@@ -8331,13 +10572,15 @@
 
 void count_VkAccelerationStructureInstanceKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkTransformMatrixKHR(featureBits, (VkTransformMatrixKHR*)(&toCount->transform), count);
+    count_VkTransformMatrixKHR(featureBits, rootType, (VkTransformMatrixKHR*)(&toCount->transform), count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -8349,27 +10592,39 @@
 #ifdef VK_NV_representative_fragment_test
 void count_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -8377,27 +10632,39 @@
 #ifdef VK_EXT_filter_cubic
 void count_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImageViewType);
 }
 
 void count_VkFilterCubicImageViewImageFormatPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -8408,14 +10675,20 @@
 #ifdef VK_EXT_global_priority
 void count_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkQueueGlobalPriorityEXT);
 }
 
@@ -8423,14 +10696,20 @@
 #ifdef VK_EXT_external_memory_host
 void count_VkImportMemoryHostPointerInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkExternalMemoryHandleTypeFlagBits);
     // WARNING PTR CHECK
     *count += 8;
@@ -8442,27 +10721,39 @@
 
 void count_VkMemoryHostPointerPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
 }
 
@@ -8472,14 +10763,20 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void count_VkPipelineCompilerControlCreateInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCompilerControlFlagsAMD);
 }
 
@@ -8487,14 +10784,20 @@
 #ifdef VK_EXT_calibrated_timestamps
 void count_VkCalibratedTimestampInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkTimeDomainEXT);
 }
 
@@ -8502,14 +10805,20 @@
 #ifdef VK_AMD_shader_core_properties
 void count_VkPhysicalDeviceShaderCorePropertiesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -8530,14 +10839,20 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void count_VkDeviceMemoryOverallocationCreateInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkMemoryOverallocationBehaviorAMD);
 }
 
@@ -8545,23 +10860,31 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void count_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkVertexInputBindingDivisorDescriptionEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -8570,34 +10893,46 @@
 
 void count_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->vertexBindingDivisorCount; ++i)
         {
-            count_VkVertexInputBindingDivisorDescriptionEXT(featureBits, (const VkVertexInputBindingDivisorDescriptionEXT*)(toCount->pVertexBindingDivisors + i), count);
+            count_VkVertexInputBindingDivisorDescriptionEXT(featureBits, rootType, (const VkVertexInputBindingDivisorDescriptionEXT*)(toCount->pVertexBindingDivisors + i), count);
         }
     }
 }
 
 void count_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -8606,14 +10941,20 @@
 #ifdef VK_GGP_frame_token
 void count_VkPresentFrameTokenGGP(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(GgpFrameToken);
 }
 
@@ -8621,10 +10962,12 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void count_VkPipelineCreationFeedbackEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkPipelineCreationFeedbackFlagsEXT);
@@ -8633,21 +10976,27 @@
 
 void count_VkPipelineCreationFeedbackCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkPipelineCreationFeedbackEXT(featureBits, (VkPipelineCreationFeedbackEXT*)(toCount->pPipelineCreationFeedback), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkPipelineCreationFeedbackEXT(featureBits, rootType, (VkPipelineCreationFeedbackEXT*)(toCount->pPipelineCreationFeedback), count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->pipelineStageCreationFeedbackCount; ++i)
         {
-            count_VkPipelineCreationFeedbackEXT(featureBits, (VkPipelineCreationFeedbackEXT*)(toCount->pPipelineStageCreationFeedbacks + i), count);
+            count_VkPipelineCreationFeedbackEXT(featureBits, rootType, (VkPipelineCreationFeedbackEXT*)(toCount->pPipelineStageCreationFeedbacks + i), count);
         }
     }
 }
@@ -8658,14 +11007,20 @@
 #ifdef VK_NV_compute_shader_derivatives
 void count_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -8674,28 +11029,40 @@
 #ifdef VK_NV_mesh_shader
 void count_VkPhysicalDeviceMeshShaderFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceMeshShaderPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += 3 * sizeof(uint32_t);
@@ -8713,10 +11080,12 @@
 
 void count_VkDrawMeshTasksIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -8727,14 +11096,20 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void count_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -8742,14 +11117,20 @@
 #ifdef VK_NV_shader_image_footprint
 void count_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -8757,14 +11138,20 @@
 #ifdef VK_NV_scissor_exclusive
 void count_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -8774,7 +11161,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->exclusiveScissorCount; ++i)
             {
-                count_VkRect2D(featureBits, (const VkRect2D*)(toCount->pExclusiveScissors + i), count);
+                count_VkRect2D(featureBits, rootType, (const VkRect2D*)(toCount->pExclusiveScissors + i), count);
             }
         }
     }
@@ -8782,14 +11169,20 @@
 
 void count_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -8797,27 +11190,39 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void count_VkQueueFamilyCheckpointPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineStageFlags);
 }
 
 void count_VkCheckpointDataNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCheckpointDataNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineStageFlagBits);
     // WARNING PTR CHECK
     *count += 8;
@@ -8831,14 +11236,20 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void count_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -8846,10 +11257,12 @@
 #ifdef VK_INTEL_performance_query
 void count_VkPerformanceValueDataINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -8857,26 +11270,34 @@
 
 void count_VkPerformanceValueINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkPerformanceValueTypeINTEL);
-    count_VkPerformanceValueDataINTEL(featureBits, (VkPerformanceValueDataINTEL*)(&toCount->data), count);
+    count_VkPerformanceValueDataINTEL(featureBits, rootType, (VkPerformanceValueDataINTEL*)(&toCount->data), count);
 }
 
 void count_VkInitializePerformanceApiInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pUserData)
@@ -8887,53 +11308,77 @@
 
 void count_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkQueryPoolSamplingModeINTEL);
 }
 
 void count_VkPerformanceMarkerInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
 }
 
 void count_VkPerformanceStreamMarkerInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPerformanceOverrideInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPerformanceOverrideTypeINTEL);
     *count += sizeof(VkBool32);
     *count += sizeof(uint64_t);
@@ -8941,14 +11386,20 @@
 
 void count_VkPerformanceConfigurationAcquireInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPerformanceConfigurationTypeINTEL);
 }
 
@@ -8956,14 +11407,20 @@
 #ifdef VK_EXT_pci_bus_info
 void count_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -8974,27 +11431,39 @@
 #ifdef VK_AMD_display_native_hdr
 void count_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9002,14 +11471,20 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void count_VkImagePipeSurfaceCreateInfoFUCHSIA(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkImagePipeSurfaceCreateFlagsFUCHSIA);
     *count += sizeof(zx_handle_t);
 }
@@ -9018,14 +11493,20 @@
 #ifdef VK_EXT_metal_surface
 void count_VkMetalSurfaceCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkMetalSurfaceCreateFlagsEXT);
     // WARNING PTR CHECK
     *count += 8;
@@ -9036,48 +11517,66 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void count_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     uint32_t featureBits,
-    const VkImportColorBufferGOOGLE* toCount,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    *count += sizeof(uint32_t);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    *count += sizeof(VkBool32);
+    *count += sizeof(VkBool32);
+    *count += sizeof(VkBool32);
 }
 
-void count_VkImportBufferGOOGLE(
+void count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     uint32_t featureBits,
-    const VkImportBufferGOOGLE* toCount,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    *count += sizeof(uint32_t);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->minFragmentDensityTexelSize), count);
+    count_VkExtent2D(featureBits, rootType, (VkExtent2D*)(&toCount->maxFragmentDensityTexelSize), count);
+    *count += sizeof(VkBool32);
 }
 
-void count_VkImportPhysicalAddressGOOGLE(
+void count_VkRenderPassFragmentDensityMapCreateInfoEXT(
     uint32_t featureBits,
-    const VkImportPhysicalAddressGOOGLE* toCount,
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    *count += sizeof(uint64_t);
-    *count += sizeof(VkDeviceSize);
-    *count += sizeof(VkFormat);
-    *count += sizeof(VkImageTiling);
-    *count += sizeof(uint32_t);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkAttachmentReference(featureBits, rootType, (VkAttachmentReference*)(&toCount->fragmentDensityMapAttachment), count);
 }
 
 #endif
@@ -9090,28 +11589,40 @@
 #ifdef VK_EXT_subgroup_size_control
 void count_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -9120,14 +11631,20 @@
 
 void count_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
@@ -9135,14 +11652,20 @@
 #ifdef VK_AMD_shader_core_properties2
 void count_VkPhysicalDeviceShaderCoreProperties2AMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkShaderCorePropertiesFlagsAMD);
     *count += sizeof(uint32_t);
 }
@@ -9151,14 +11674,20 @@
 #ifdef VK_AMD_device_coherent_memory
 void count_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9166,14 +11695,20 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void count_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -9182,14 +11717,20 @@
 #ifdef VK_EXT_memory_budget
 void count_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize);
     *count += VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize);
 }
@@ -9198,27 +11739,39 @@
 #ifdef VK_EXT_memory_priority
 void count_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkMemoryPriorityAllocateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(float);
 }
 
@@ -9226,14 +11779,20 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void count_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9241,14 +11800,20 @@
 #ifdef VK_EXT_buffer_device_address
 void count_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -9256,14 +11821,20 @@
 
 void count_VkBufferDeviceAddressCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceAddress);
 }
 
@@ -9271,14 +11842,20 @@
 #ifdef VK_EXT_tooling_info
 void count_VkPhysicalDeviceToolPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
     *count += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
     *count += sizeof(VkToolPurposeFlagsEXT);
@@ -9292,14 +11869,20 @@
 #ifdef VK_EXT_validation_features
 void count_VkValidationFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
@@ -9316,14 +11899,20 @@
 #ifdef VK_NV_cooperative_matrix
 void count_VkCooperativeMatrixPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -9336,28 +11925,40 @@
 
 void count_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkShaderStageFlags);
 }
 
@@ -9365,41 +11966,59 @@
 #ifdef VK_NV_coverage_reduction_mode
 void count_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPipelineCoverageReductionStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCoverageReductionStateCreateFlagsNV);
     *count += sizeof(VkCoverageReductionModeNV);
 }
 
 void count_VkFramebufferMixedSamplesCombinationNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkCoverageReductionModeNV);
     *count += sizeof(VkSampleCountFlagBits);
     *count += sizeof(VkSampleCountFlags);
@@ -9410,14 +12029,20 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void count_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -9427,14 +12052,20 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void count_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9442,40 +12073,58 @@
 #ifdef VK_EXT_full_screen_exclusive
 void count_VkSurfaceFullScreenExclusiveInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFullScreenExclusiveEXT);
 }
 
 void count_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(HMONITOR);
 }
 
@@ -9483,14 +12132,20 @@
 #ifdef VK_EXT_headless_surface
 void count_VkHeadlessSurfaceCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkHeadlessSurfaceCreateFlagsEXT);
 }
 
@@ -9498,14 +12153,20 @@
 #ifdef VK_EXT_line_rasterization
 void count_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -9516,27 +12177,39 @@
 
 void count_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPipelineRasterizationLineStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkLineRasterizationModeEXT);
     *count += sizeof(VkBool32);
     *count += sizeof(uint32_t);
@@ -9547,14 +12220,20 @@
 #ifdef VK_EXT_shader_atomic_float
 void count_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -9575,14 +12254,20 @@
 #ifdef VK_EXT_index_type_uint8
 void count_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9590,14 +12275,20 @@
 #ifdef VK_EXT_extended_dynamic_state
 void count_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9605,14 +12296,20 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void count_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -9620,14 +12317,20 @@
 #ifdef VK_NV_device_generated_commands
 void count_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -9641,65 +12344,83 @@
 
 void count_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkGraphicsShaderGroupCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->stageCount; ++i)
         {
-            count_VkPipelineShaderStageCreateInfo(featureBits, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
+            count_VkPipelineShaderStageCreateInfo(featureBits, rootType, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
         }
     }
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pVertexInputState)
     {
-        count_VkPipelineVertexInputStateCreateInfo(featureBits, (const VkPipelineVertexInputStateCreateInfo*)(toCount->pVertexInputState), count);
+        count_VkPipelineVertexInputStateCreateInfo(featureBits, rootType, (const VkPipelineVertexInputStateCreateInfo*)(toCount->pVertexInputState), count);
     }
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pTessellationState)
     {
-        count_VkPipelineTessellationStateCreateInfo(featureBits, (const VkPipelineTessellationStateCreateInfo*)(toCount->pTessellationState), count);
+        count_VkPipelineTessellationStateCreateInfo(featureBits, rootType, (const VkPipelineTessellationStateCreateInfo*)(toCount->pTessellationState), count);
     }
 }
 
 void count_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->groupCount; ++i)
         {
-            count_VkGraphicsShaderGroupCreateInfoNV(featureBits, (const VkGraphicsShaderGroupCreateInfoNV*)(toCount->pGroups + i), count);
+            count_VkGraphicsShaderGroupCreateInfoNV(featureBits, rootType, (const VkGraphicsShaderGroupCreateInfoNV*)(toCount->pGroups + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -9711,10 +12432,12 @@
 
 void count_VkBindShaderGroupIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -9722,10 +12445,12 @@
 
 void count_VkBindIndexBufferIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceAddress);
@@ -9735,10 +12460,12 @@
 
 void count_VkBindVertexBufferIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceAddress);
@@ -9748,10 +12475,12 @@
 
 void count_VkSetStateFlagsIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -9759,10 +12488,12 @@
 
 void count_VkIndirectCommandsStreamNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     uint64_t cgen_var_0;
@@ -9772,14 +12503,20 @@
 
 void count_VkIndirectCommandsLayoutTokenNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkIndirectCommandsTokenTypeNV);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -9804,14 +12541,20 @@
 
 void count_VkIndirectCommandsLayoutCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkIndirectCommandsLayoutUsageFlagsNV);
     *count += sizeof(VkPipelineBindPoint);
     *count += sizeof(uint32_t);
@@ -9819,7 +12562,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->tokenCount; ++i)
         {
-            count_VkIndirectCommandsLayoutTokenNV(featureBits, (const VkIndirectCommandsLayoutTokenNV*)(toCount->pTokens + i), count);
+            count_VkIndirectCommandsLayoutTokenNV(featureBits, rootType, (const VkIndirectCommandsLayoutTokenNV*)(toCount->pTokens + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -9831,14 +12574,20 @@
 
 void count_VkGeneratedCommandsInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineBindPoint);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -9849,7 +12598,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->streamCount; ++i)
         {
-            count_VkIndirectCommandsStreamNV(featureBits, (const VkIndirectCommandsStreamNV*)(toCount->pStreams + i), count);
+            count_VkIndirectCommandsStreamNV(featureBits, rootType, (const VkIndirectCommandsStreamNV*)(toCount->pStreams + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -9867,14 +12616,20 @@
 
 void count_VkGeneratedCommandsMemoryRequirementsInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineBindPoint);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -9887,27 +12642,39 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void count_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkBool32);
     *count += sizeof(VkDeviceSize);
@@ -9918,56 +12685,80 @@
 #ifdef VK_QCOM_render_pass_transform
 void count_VkRenderPassTransformBeginInfoQCOM(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSurfaceTransformFlagBitsKHR);
 }
 
 void count_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSurfaceTransformFlagBitsKHR);
-    count_VkRect2D(featureBits, (VkRect2D*)(&toCount->renderArea), count);
+    count_VkRect2D(featureBits, rootType, (VkRect2D*)(&toCount->renderArea), count);
 }
 
 #endif
 #ifdef VK_EXT_device_memory_report
 void count_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkDeviceMemoryReportCallbackDataEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceMemoryReportFlagsEXT);
     *count += sizeof(VkDeviceMemoryReportEventTypeEXT);
     *count += sizeof(uint64_t);
@@ -9979,14 +12770,20 @@
 
 void count_VkDeviceDeviceMemoryReportCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceMemoryReportFlagsEXT);
     *count += 8;
     *count += sizeof(uint8_t);
@@ -9996,14 +12793,20 @@
 #ifdef VK_EXT_robustness2
 void count_VkPhysicalDeviceRobustness2FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -10011,14 +12814,20 @@
 
 void count_VkPhysicalDeviceRobustness2PropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkDeviceSize);
 }
@@ -10027,41 +12836,59 @@
 #ifdef VK_EXT_custom_border_color
 void count_VkSamplerCustomBorderColorCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkClearColorValue(featureBits, (VkClearColorValue*)(&toCount->customBorderColor), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkClearColorValue(featureBits, rootType, (VkClearColorValue*)(&toCount->customBorderColor), count);
     *count += sizeof(VkFormat);
 }
 
 void count_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -10072,40 +12899,58 @@
 #ifdef VK_EXT_private_data
 void count_VkPhysicalDevicePrivateDataFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkDevicePrivateDataCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
 }
 
 void count_VkPrivateDataSlotCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPrivateDataSlotCreateFlagsEXT);
 }
 
@@ -10113,14 +12958,20 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void count_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -10128,27 +12979,39 @@
 #ifdef VK_NV_device_diagnostics_config
 void count_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkDeviceDiagnosticsConfigCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceDiagnosticsConfigFlagsNV);
 }
 
@@ -10158,14 +13021,20 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void count_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -10173,27 +13042,39 @@
 
 void count_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSampleCountFlagBits);
 }
 
 void count_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFragmentShadingRateTypeNV);
     *count += sizeof(VkFragmentShadingRateNV);
     *count += 2 * sizeof(VkFragmentShadingRateCombinerOpKHR);
@@ -10203,27 +13084,39 @@
 #ifdef VK_EXT_fragment_density_map2
 void count_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 void count_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(uint32_t);
@@ -10234,14 +13127,20 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void count_VkCopyCommandTransformInfoQCOM(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkSurfaceTransformFlagBitsKHR);
 }
 
@@ -10249,14 +13148,20 @@
 #ifdef VK_EXT_image_robustness
 void count_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
@@ -10264,14 +13169,20 @@
 #ifdef VK_EXT_4444_formats
 void count_VkPhysicalDevice4444FormatsFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
 }
@@ -10280,14 +13191,20 @@
 #ifdef VK_EXT_directfb_surface
 void count_VkDirectFBSurfaceCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDirectFBSurfaceCreateFlagsEXT);
     // WARNING PTR CHECK
     *count += 8;
@@ -10305,14 +13222,77 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void count_VkImportColorBufferGOOGLE(
+    uint32_t featureBits,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* toCount,
+    size_t* count)
+{
+    (void)featureBits;
+    (void)rootType;
+    (void)toCount;
+    (void)count;
+    *count += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    *count += sizeof(uint32_t);
+}
+
+void count_VkImportBufferGOOGLE(
+    uint32_t featureBits,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* toCount,
+    size_t* count)
+{
+    (void)featureBits;
+    (void)rootType;
+    (void)toCount;
+    (void)count;
+    *count += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    *count += sizeof(uint32_t);
+}
+
+void count_VkImportPhysicalAddressGOOGLE(
+    uint32_t featureBits,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* toCount,
+    size_t* count)
+{
+    (void)featureBits;
+    (void)rootType;
+    (void)toCount;
+    (void)count;
+    *count += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    *count += sizeof(uint64_t);
+    *count += sizeof(VkDeviceSize);
+    *count += sizeof(VkFormat);
+    *count += sizeof(VkImageTiling);
+    *count += sizeof(uint32_t);
+}
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void count_VkDeviceOrHostAddressKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceAddress);
@@ -10320,10 +13300,12 @@
 
 void count_VkDeviceOrHostAddressConstKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceAddress);
@@ -10331,10 +13313,12 @@
 
 void count_VkAccelerationStructureBuildRangeInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -10345,87 +13329,119 @@
 
 void count_VkAccelerationStructureGeometryTrianglesDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkFormat);
-    count_VkDeviceOrHostAddressConstKHR(featureBits, (VkDeviceOrHostAddressConstKHR*)(&toCount->vertexData), count);
+    count_VkDeviceOrHostAddressConstKHR(featureBits, rootType, (VkDeviceOrHostAddressConstKHR*)(&toCount->vertexData), count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(uint32_t);
     *count += sizeof(VkIndexType);
-    count_VkDeviceOrHostAddressConstKHR(featureBits, (VkDeviceOrHostAddressConstKHR*)(&toCount->indexData), count);
-    count_VkDeviceOrHostAddressConstKHR(featureBits, (VkDeviceOrHostAddressConstKHR*)(&toCount->transformData), count);
+    count_VkDeviceOrHostAddressConstKHR(featureBits, rootType, (VkDeviceOrHostAddressConstKHR*)(&toCount->indexData), count);
+    count_VkDeviceOrHostAddressConstKHR(featureBits, rootType, (VkDeviceOrHostAddressConstKHR*)(&toCount->transformData), count);
 }
 
 void count_VkAccelerationStructureGeometryAabbsDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkDeviceOrHostAddressConstKHR(featureBits, (VkDeviceOrHostAddressConstKHR*)(&toCount->data), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkDeviceOrHostAddressConstKHR(featureBits, rootType, (VkDeviceOrHostAddressConstKHR*)(&toCount->data), count);
     *count += sizeof(VkDeviceSize);
 }
 
 void count_VkAccelerationStructureGeometryInstancesDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
-    count_VkDeviceOrHostAddressConstKHR(featureBits, (VkDeviceOrHostAddressConstKHR*)(&toCount->data), count);
+    count_VkDeviceOrHostAddressConstKHR(featureBits, rootType, (VkDeviceOrHostAddressConstKHR*)(&toCount->data), count);
 }
 
 void count_VkAccelerationStructureGeometryDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
-    count_VkAccelerationStructureGeometryTrianglesDataKHR(featureBits, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&toCount->triangles), count);
+    count_VkAccelerationStructureGeometryTrianglesDataKHR(featureBits, rootType, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&toCount->triangles), count);
 }
 
 void count_VkAccelerationStructureGeometryKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkGeometryTypeKHR);
-    count_VkAccelerationStructureGeometryDataKHR(featureBits, (VkAccelerationStructureGeometryDataKHR*)(&toCount->geometry), count);
+    count_VkAccelerationStructureGeometryDataKHR(featureBits, rootType, (VkAccelerationStructureGeometryDataKHR*)(&toCount->geometry), count);
     *count += sizeof(VkGeometryFlagsKHR);
 }
 
 void count_VkAccelerationStructureBuildGeometryInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccelerationStructureTypeKHR);
     *count += sizeof(VkBuildAccelerationStructureFlagsKHR);
     *count += sizeof(VkBuildAccelerationStructureModeKHR);
@@ -10442,23 +13458,29 @@
         {
             for (uint32_t i = 0; i < (uint32_t)toCount->geometryCount; ++i)
             {
-                count_VkAccelerationStructureGeometryKHR(featureBits, (const VkAccelerationStructureGeometryKHR*)(toCount->pGeometries + i), count);
+                count_VkAccelerationStructureGeometryKHR(featureBits, rootType, (const VkAccelerationStructureGeometryKHR*)(toCount->pGeometries + i), count);
             }
         }
     }
-    count_VkDeviceOrHostAddressKHR(featureBits, (VkDeviceOrHostAddressKHR*)(&toCount->scratchData), count);
+    count_VkDeviceOrHostAddressKHR(featureBits, rootType, (VkDeviceOrHostAddressKHR*)(&toCount->scratchData), count);
 }
 
 void count_VkAccelerationStructureCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkAccelerationStructureCreateFlagsKHR);
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -10470,14 +13492,20 @@
 
 void count_VkWriteDescriptorSetAccelerationStructureKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     // WARNING PTR CHECK
     *count += 8;
@@ -10492,14 +13520,20 @@
 
 void count_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -10509,14 +13543,20 @@
 
 void count_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint64_t);
     *count += sizeof(uint64_t);
     *count += sizeof(uint64_t);
@@ -10529,28 +13569,40 @@
 
 void count_VkAccelerationStructureDeviceAddressInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
 }
 
 void count_VkAccelerationStructureVersionInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     if (toCount)
     {
         *count += 2*VK_UUID_SIZE * sizeof(const uint8_t);
@@ -10559,31 +13611,43 @@
 
 void count_VkCopyAccelerationStructureToMemoryInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
-    count_VkDeviceOrHostAddressKHR(featureBits, (VkDeviceOrHostAddressKHR*)(&toCount->dst), count);
+    count_VkDeviceOrHostAddressKHR(featureBits, rootType, (VkDeviceOrHostAddressKHR*)(&toCount->dst), count);
     *count += sizeof(VkCopyAccelerationStructureModeKHR);
 }
 
 void count_VkCopyMemoryToAccelerationStructureInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
-    count_VkDeviceOrHostAddressConstKHR(featureBits, (VkDeviceOrHostAddressConstKHR*)(&toCount->src), count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
+    count_VkDeviceOrHostAddressConstKHR(featureBits, rootType, (VkDeviceOrHostAddressConstKHR*)(&toCount->src), count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     *count += sizeof(VkCopyAccelerationStructureModeKHR);
@@ -10591,14 +13655,20 @@
 
 void count_VkCopyAccelerationStructureInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     uint64_t cgen_var_0;
     *count += 1 * 8;
     uint64_t cgen_var_1;
@@ -10608,14 +13678,20 @@
 
 void count_VkAccelerationStructureBuildSizesInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkDeviceSize);
     *count += sizeof(VkDeviceSize);
@@ -10625,14 +13701,20 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void count_VkRayTracingShaderGroupCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkRayTracingShaderGroupTypeKHR);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -10648,35 +13730,47 @@
 
 void count_VkRayTracingPipelineInterfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
 }
 
 void count_VkRayTracingPipelineCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkPipelineCreateFlags);
     *count += sizeof(uint32_t);
     if (toCount)
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->stageCount; ++i)
         {
-            count_VkPipelineShaderStageCreateInfo(featureBits, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
+            count_VkPipelineShaderStageCreateInfo(featureBits, rootType, (const VkPipelineShaderStageCreateInfo*)(toCount->pStages + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -10684,7 +13778,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toCount->groupCount; ++i)
         {
-            count_VkRayTracingShaderGroupCreateInfoKHR(featureBits, (const VkRayTracingShaderGroupCreateInfoKHR*)(toCount->pGroups + i), count);
+            count_VkRayTracingShaderGroupCreateInfoKHR(featureBits, rootType, (const VkRayTracingShaderGroupCreateInfoKHR*)(toCount->pGroups + i), count);
         }
     }
     *count += sizeof(uint32_t);
@@ -10692,19 +13786,19 @@
     *count += 8;
     if (toCount->pLibraryInfo)
     {
-        count_VkPipelineLibraryCreateInfoKHR(featureBits, (const VkPipelineLibraryCreateInfoKHR*)(toCount->pLibraryInfo), count);
+        count_VkPipelineLibraryCreateInfoKHR(featureBits, rootType, (const VkPipelineLibraryCreateInfoKHR*)(toCount->pLibraryInfo), count);
     }
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pLibraryInterface)
     {
-        count_VkRayTracingPipelineInterfaceCreateInfoKHR(featureBits, (const VkRayTracingPipelineInterfaceCreateInfoKHR*)(toCount->pLibraryInterface), count);
+        count_VkRayTracingPipelineInterfaceCreateInfoKHR(featureBits, rootType, (const VkRayTracingPipelineInterfaceCreateInfoKHR*)(toCount->pLibraryInterface), count);
     }
     // WARNING PTR CHECK
     *count += 8;
     if (toCount->pDynamicState)
     {
-        count_VkPipelineDynamicStateCreateInfo(featureBits, (const VkPipelineDynamicStateCreateInfo*)(toCount->pDynamicState), count);
+        count_VkPipelineDynamicStateCreateInfo(featureBits, rootType, (const VkPipelineDynamicStateCreateInfo*)(toCount->pDynamicState), count);
     }
     uint64_t cgen_var_0;
     *count += 1 * 8;
@@ -10715,14 +13809,20 @@
 
 void count_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
     *count += sizeof(VkBool32);
@@ -10732,14 +13832,20 @@
 
 void count_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
     *count += sizeof(uint32_t);
@@ -10752,10 +13858,12 @@
 
 void count_VkStridedDeviceAddressRegionKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkDeviceAddress);
@@ -10765,10 +13873,12 @@
 
 void count_VkTraceRaysIndirectCommandKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(uint32_t);
@@ -10780,29 +13890,36 @@
 #ifdef VK_KHR_ray_query
 void count_VkPhysicalDeviceRayQueryFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* toCount,
     size_t* count)
 {
     (void)featureBits;
+    (void)rootType;
     (void)toCount;
     (void)count;
     *count += sizeof(VkStructureType);
-    count_extension_struct(featureBits, toCount->pNext, count);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = toCount->sType;
+    }
+    count_extension_struct(featureBits, rootType, toCount->pNext, count);
     *count += sizeof(VkBool32);
 }
 
 #endif
 void count_extension_struct(
     uint32_t featureBits,
+    VkStructureType rootType,
     const void* structExtension,
     size_t* count)
 {
     VkInstanceCreateInfo* structAccess = (VkInstanceCreateInfo*)(structExtension);
-    size_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(featureBits, structExtension);
+    size_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(featureBits, rootType, structExtension);
     if (!currExtSize && structExtension)
     {
         // unknown struct extension; skip and call on its pNext field
-        count_extension_struct(featureBits, (void*)structAccess->pNext, count);
+        count_extension_struct(featureBits, rootType, (void*)structAccess->pNext, count);
         return;
     }
     else
@@ -10826,1535 +13943,1613 @@
 #ifdef VK_VERSION_1_1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
         {
-            count_VkPhysicalDeviceSubgroupProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), count);
+            count_VkPhysicalDeviceSubgroupProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
         {
-            count_VkPhysicalDevice16BitStorageFeatures(featureBits, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), count);
+            count_VkPhysicalDevice16BitStorageFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
         {
-            count_VkMemoryDedicatedRequirements(featureBits, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), count);
+            count_VkMemoryDedicatedRequirements(featureBits, rootType, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
         {
-            count_VkMemoryDedicatedAllocateInfo(featureBits, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), count);
+            count_VkMemoryDedicatedAllocateInfo(featureBits, rootType, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
         {
-            count_VkMemoryAllocateFlagsInfo(featureBits, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), count);
+            count_VkMemoryAllocateFlagsInfo(featureBits, rootType, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
         {
-            count_VkDeviceGroupRenderPassBeginInfo(featureBits, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), count);
+            count_VkDeviceGroupRenderPassBeginInfo(featureBits, rootType, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
         {
-            count_VkDeviceGroupCommandBufferBeginInfo(featureBits, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), count);
+            count_VkDeviceGroupCommandBufferBeginInfo(featureBits, rootType, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
         {
-            count_VkDeviceGroupSubmitInfo(featureBits, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), count);
+            count_VkDeviceGroupSubmitInfo(featureBits, rootType, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
         {
-            count_VkDeviceGroupBindSparseInfo(featureBits, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), count);
+            count_VkDeviceGroupBindSparseInfo(featureBits, rootType, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
         {
-            count_VkBindBufferMemoryDeviceGroupInfo(featureBits, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), count);
+            count_VkBindBufferMemoryDeviceGroupInfo(featureBits, rootType, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
         {
-            count_VkBindImageMemoryDeviceGroupInfo(featureBits, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), count);
+            count_VkBindImageMemoryDeviceGroupInfo(featureBits, rootType, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
         {
-            count_VkDeviceGroupDeviceCreateInfo(featureBits, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), count);
+            count_VkDeviceGroupDeviceCreateInfo(featureBits, rootType, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
         {
-            count_VkPhysicalDeviceFeatures2(featureBits, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), count);
+            count_VkPhysicalDeviceFeatures2(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
         {
-            count_VkPhysicalDevicePointClippingProperties(featureBits, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), count);
+            count_VkPhysicalDevicePointClippingProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
         {
-            count_VkRenderPassInputAttachmentAspectCreateInfo(featureBits, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), count);
+            count_VkRenderPassInputAttachmentAspectCreateInfo(featureBits, rootType, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
         {
-            count_VkImageViewUsageCreateInfo(featureBits, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), count);
+            count_VkImageViewUsageCreateInfo(featureBits, rootType, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
         {
-            count_VkPipelineTessellationDomainOriginStateCreateInfo(featureBits, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), count);
+            count_VkPipelineTessellationDomainOriginStateCreateInfo(featureBits, rootType, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
         {
-            count_VkRenderPassMultiviewCreateInfo(featureBits, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), count);
+            count_VkRenderPassMultiviewCreateInfo(featureBits, rootType, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
         {
-            count_VkPhysicalDeviceMultiviewFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceMultiviewFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
         {
-            count_VkPhysicalDeviceMultiviewProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), count);
+            count_VkPhysicalDeviceMultiviewProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
         {
-            count_VkPhysicalDeviceVariablePointersFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceVariablePointersFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
         {
-            count_VkPhysicalDeviceProtectedMemoryFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceProtectedMemoryFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
         {
-            count_VkPhysicalDeviceProtectedMemoryProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), count);
+            count_VkPhysicalDeviceProtectedMemoryProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
         {
-            count_VkProtectedSubmitInfo(featureBits, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), count);
+            count_VkProtectedSubmitInfo(featureBits, rootType, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
         {
-            count_VkSamplerYcbcrConversionInfo(featureBits, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), count);
+            count_VkSamplerYcbcrConversionInfo(featureBits, rootType, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
         {
-            count_VkBindImagePlaneMemoryInfo(featureBits, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), count);
+            count_VkBindImagePlaneMemoryInfo(featureBits, rootType, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
         {
-            count_VkImagePlaneMemoryRequirementsInfo(featureBits, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), count);
+            count_VkImagePlaneMemoryRequirementsInfo(featureBits, rootType, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
         {
-            count_VkPhysicalDeviceSamplerYcbcrConversionFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceSamplerYcbcrConversionFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
         {
-            count_VkSamplerYcbcrConversionImageFormatProperties(featureBits, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), count);
+            count_VkSamplerYcbcrConversionImageFormatProperties(featureBits, rootType, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
         {
-            count_VkPhysicalDeviceExternalImageFormatInfo(featureBits, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), count);
+            count_VkPhysicalDeviceExternalImageFormatInfo(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
         {
-            count_VkExternalImageFormatProperties(featureBits, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), count);
+            count_VkExternalImageFormatProperties(featureBits, rootType, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
         {
-            count_VkPhysicalDeviceIDProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), count);
+            count_VkPhysicalDeviceIDProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
         {
-            count_VkExternalMemoryImageCreateInfo(featureBits, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), count);
+            count_VkExternalMemoryImageCreateInfo(featureBits, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
         {
-            count_VkExternalMemoryBufferCreateInfo(featureBits, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), count);
+            count_VkExternalMemoryBufferCreateInfo(featureBits, rootType, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
         {
-            count_VkExportMemoryAllocateInfo(featureBits, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), count);
+            count_VkExportMemoryAllocateInfo(featureBits, rootType, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
         {
-            count_VkExportFenceCreateInfo(featureBits, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), count);
+            count_VkExportFenceCreateInfo(featureBits, rootType, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
         {
-            count_VkExportSemaphoreCreateInfo(featureBits, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), count);
+            count_VkExportSemaphoreCreateInfo(featureBits, rootType, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
         {
-            count_VkPhysicalDeviceMaintenance3Properties(featureBits, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), count);
+            count_VkPhysicalDeviceMaintenance3Properties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
         {
-            count_VkPhysicalDeviceShaderDrawParametersFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceShaderDrawParametersFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_VERSION_1_2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
         {
-            count_VkPhysicalDeviceVulkan11Features(featureBits, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension), count);
+            count_VkPhysicalDeviceVulkan11Features(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
         {
-            count_VkPhysicalDeviceVulkan11Properties(featureBits, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension), count);
+            count_VkPhysicalDeviceVulkan11Properties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
         {
-            count_VkPhysicalDeviceVulkan12Features(featureBits, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension), count);
+            count_VkPhysicalDeviceVulkan12Features(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
         {
-            count_VkPhysicalDeviceVulkan12Properties(featureBits, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension), count);
+            count_VkPhysicalDeviceVulkan12Properties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
         {
-            count_VkImageFormatListCreateInfo(featureBits, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension), count);
+            count_VkImageFormatListCreateInfo(featureBits, rootType, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
         {
-            count_VkPhysicalDevice8BitStorageFeatures(featureBits, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension), count);
+            count_VkPhysicalDevice8BitStorageFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
         {
-            count_VkPhysicalDeviceDriverProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension), count);
+            count_VkPhysicalDeviceDriverProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
         {
-            count_VkPhysicalDeviceShaderAtomicInt64Features(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension), count);
+            count_VkPhysicalDeviceShaderAtomicInt64Features(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
         {
-            count_VkPhysicalDeviceShaderFloat16Int8Features(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension), count);
+            count_VkPhysicalDeviceShaderFloat16Int8Features(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
         {
-            count_VkPhysicalDeviceFloatControlsProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension), count);
+            count_VkPhysicalDeviceFloatControlsProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
         {
-            count_VkDescriptorSetLayoutBindingFlagsCreateInfo(featureBits, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension), count);
+            count_VkDescriptorSetLayoutBindingFlagsCreateInfo(featureBits, rootType, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
         {
-            count_VkPhysicalDeviceDescriptorIndexingFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceDescriptorIndexingFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
         {
-            count_VkPhysicalDeviceDescriptorIndexingProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension), count);
+            count_VkPhysicalDeviceDescriptorIndexingProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
         {
-            count_VkDescriptorSetVariableDescriptorCountAllocateInfo(featureBits, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension), count);
+            count_VkDescriptorSetVariableDescriptorCountAllocateInfo(featureBits, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
         {
-            count_VkDescriptorSetVariableDescriptorCountLayoutSupport(featureBits, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension), count);
+            count_VkDescriptorSetVariableDescriptorCountLayoutSupport(featureBits, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:
         {
-            count_VkSubpassDescriptionDepthStencilResolve(featureBits, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension), count);
+            count_VkSubpassDescriptionDepthStencilResolve(featureBits, rootType, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
         {
-            count_VkPhysicalDeviceDepthStencilResolveProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension), count);
+            count_VkPhysicalDeviceDepthStencilResolveProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
         {
-            count_VkPhysicalDeviceScalarBlockLayoutFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceScalarBlockLayoutFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
         {
-            count_VkImageStencilUsageCreateInfo(featureBits, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension), count);
+            count_VkImageStencilUsageCreateInfo(featureBits, rootType, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
         {
-            count_VkSamplerReductionModeCreateInfo(featureBits, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension), count);
+            count_VkSamplerReductionModeCreateInfo(featureBits, rootType, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
         {
-            count_VkPhysicalDeviceSamplerFilterMinmaxProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension), count);
+            count_VkPhysicalDeviceSamplerFilterMinmaxProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
         {
-            count_VkPhysicalDeviceVulkanMemoryModelFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceVulkanMemoryModelFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
         {
-            count_VkPhysicalDeviceImagelessFramebufferFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceImagelessFramebufferFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
         {
-            count_VkFramebufferAttachmentsCreateInfo(featureBits, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension), count);
+            count_VkFramebufferAttachmentsCreateInfo(featureBits, rootType, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
         {
-            count_VkRenderPassAttachmentBeginInfo(featureBits, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension), count);
+            count_VkRenderPassAttachmentBeginInfo(featureBits, rootType, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
         {
-            count_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
         {
-            count_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
         {
-            count_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
         {
-            count_VkAttachmentReferenceStencilLayout(featureBits, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension), count);
+            count_VkAttachmentReferenceStencilLayout(featureBits, rootType, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:
         {
-            count_VkAttachmentDescriptionStencilLayout(featureBits, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension), count);
+            count_VkAttachmentDescriptionStencilLayout(featureBits, rootType, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
         {
-            count_VkPhysicalDeviceHostQueryResetFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceHostQueryResetFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
         {
-            count_VkPhysicalDeviceTimelineSemaphoreFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceTimelineSemaphoreFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
         {
-            count_VkPhysicalDeviceTimelineSemaphoreProperties(featureBits, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension), count);
+            count_VkPhysicalDeviceTimelineSemaphoreProperties(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
         {
-            count_VkSemaphoreTypeCreateInfo(featureBits, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension), count);
+            count_VkSemaphoreTypeCreateInfo(featureBits, rootType, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
         {
-            count_VkTimelineSemaphoreSubmitInfo(featureBits, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension), count);
+            count_VkTimelineSemaphoreSubmitInfo(featureBits, rootType, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
         {
-            count_VkPhysicalDeviceBufferDeviceAddressFeatures(featureBits, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension), count);
+            count_VkPhysicalDeviceBufferDeviceAddressFeatures(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
         {
-            count_VkBufferOpaqueCaptureAddressCreateInfo(featureBits, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension), count);
+            count_VkBufferOpaqueCaptureAddressCreateInfo(featureBits, rootType, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
         {
-            count_VkMemoryOpaqueCaptureAddressAllocateInfo(featureBits, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension), count);
+            count_VkMemoryOpaqueCaptureAddressAllocateInfo(featureBits, rootType, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_swapchain
         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            count_VkImageSwapchainCreateInfoKHR(featureBits, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), count);
+            count_VkImageSwapchainCreateInfoKHR(featureBits, rootType, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
         {
-            count_VkBindImageMemorySwapchainInfoKHR(featureBits, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), count);
+            count_VkBindImageMemorySwapchainInfoKHR(featureBits, rootType, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
         {
-            count_VkDeviceGroupPresentInfoKHR(featureBits, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), count);
+            count_VkDeviceGroupPresentInfoKHR(featureBits, rootType, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            count_VkDeviceGroupSwapchainCreateInfoKHR(featureBits, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), count);
+            count_VkDeviceGroupSwapchainCreateInfoKHR(featureBits, rootType, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_display_swapchain
         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
         {
-            count_VkDisplayPresentInfoKHR(featureBits, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), count);
+            count_VkDisplayPresentInfoKHR(featureBits, rootType, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            count_VkImportMemoryWin32HandleInfoKHR(featureBits, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), count);
+            count_VkImportMemoryWin32HandleInfoKHR(featureBits, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            count_VkExportMemoryWin32HandleInfoKHR(featureBits, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), count);
+            count_VkExportMemoryWin32HandleInfoKHR(featureBits, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_fd
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
         {
-            count_VkImportMemoryFdInfoKHR(featureBits, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), count);
+            count_VkImportMemoryFdInfoKHR(featureBits, rootType, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
         {
-            count_VkWin32KeyedMutexAcquireReleaseInfoKHR(featureBits, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), count);
+            count_VkWin32KeyedMutexAcquireReleaseInfoKHR(featureBits, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_external_semaphore_win32
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
         {
-            count_VkExportSemaphoreWin32HandleInfoKHR(featureBits, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), count);
+            count_VkExportSemaphoreWin32HandleInfoKHR(featureBits, rootType, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
         {
-            count_VkD3D12FenceSubmitInfoKHR(featureBits, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), count);
+            count_VkD3D12FenceSubmitInfoKHR(featureBits, rootType, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_push_descriptor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
         {
-            count_VkPhysicalDevicePushDescriptorPropertiesKHR(featureBits, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), count);
+            count_VkPhysicalDevicePushDescriptorPropertiesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_incremental_present
         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
         {
-            count_VkPresentRegionsKHR(featureBits, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), count);
+            count_VkPresentRegionsKHR(featureBits, rootType, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_shared_presentable_image
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
         {
-            count_VkSharedPresentSurfaceCapabilitiesKHR(featureBits, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), count);
+            count_VkSharedPresentSurfaceCapabilitiesKHR(featureBits, rootType, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_external_fence_win32
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
         {
-            count_VkExportFenceWin32HandleInfoKHR(featureBits, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), count);
+            count_VkExportFenceWin32HandleInfoKHR(featureBits, rootType, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_performance_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
         {
-            count_VkPhysicalDevicePerformanceQueryFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDevicePerformanceQueryFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
         {
-            count_VkPhysicalDevicePerformanceQueryPropertiesKHR(featureBits, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension), count);
+            count_VkPhysicalDevicePerformanceQueryPropertiesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:
         {
-            count_VkQueryPoolPerformanceCreateInfoKHR(featureBits, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension), count);
+            count_VkQueryPoolPerformanceCreateInfoKHR(featureBits, rootType, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:
         {
-            count_VkPerformanceQuerySubmitInfoKHR(featureBits, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension), count);
+            count_VkPerformanceQuerySubmitInfoKHR(featureBits, rootType, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_portability_subset
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR:
         {
-            count_VkPhysicalDevicePortabilitySubsetFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDevicePortabilitySubsetFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR:
         {
-            count_VkPhysicalDevicePortabilitySubsetPropertiesKHR(featureBits, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension), count);
+            count_VkPhysicalDevicePortabilitySubsetPropertiesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_shader_clock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
         {
-            count_VkPhysicalDeviceShaderClockFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceShaderClockFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_shader_terminate_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
         {
-            count_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_fragment_shading_rate
         case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
         {
-            count_VkFragmentShadingRateAttachmentInfoKHR(featureBits, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension), count);
+            count_VkFragmentShadingRateAttachmentInfoKHR(featureBits, rootType, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:
         {
-            count_VkPipelineFragmentShadingRateStateCreateInfoKHR(featureBits, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension), count);
+            count_VkPipelineFragmentShadingRateStateCreateInfoKHR(featureBits, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
         {
-            count_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
         {
-            count_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_surface_protected_capabilities
         case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:
         {
-            count_VkSurfaceProtectedCapabilitiesKHR(featureBits, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension), count);
+            count_VkSurfaceProtectedCapabilitiesKHR(featureBits, rootType, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_pipeline_executable_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
         {
-            count_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
         {
-            count_VkNativeBufferANDROID(featureBits, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), count);
+            count_VkNativeBufferANDROID(featureBits, rootType, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_debug_report
         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
         {
-            count_VkDebugReportCallbackCreateInfoEXT(featureBits, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), count);
+            count_VkDebugReportCallbackCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_rasterization_order
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
         {
-            count_VkPipelineRasterizationStateRasterizationOrderAMD(featureBits, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), count);
+            count_VkPipelineRasterizationStateRasterizationOrderAMD(featureBits, rootType, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
         {
-            count_VkDedicatedAllocationImageCreateInfoNV(featureBits, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), count);
+            count_VkDedicatedAllocationImageCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
         {
-            count_VkDedicatedAllocationBufferCreateInfoNV(featureBits, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), count);
+            count_VkDedicatedAllocationBufferCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
         {
-            count_VkDedicatedAllocationMemoryAllocateInfoNV(featureBits, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), count);
+            count_VkDedicatedAllocationMemoryAllocateInfoNV(featureBits, rootType, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_transform_feedback
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceTransformFeedbackFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceTransformFeedbackFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceTransformFeedbackPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceTransformFeedbackPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
         {
-            count_VkPipelineRasterizationStateStreamCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineRasterizationStateStreamCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
         {
-            count_VkTextureLODGatherFormatPropertiesAMD(featureBits, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), count);
+            count_VkTextureLODGatherFormatPropertiesAMD(featureBits, rootType, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_corner_sampled_image
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
         {
-            count_VkPhysicalDeviceCornerSampledImageFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceCornerSampledImageFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_external_memory
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
         {
-            count_VkExternalMemoryImageCreateInfoNV(featureBits, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), count);
+            count_VkExternalMemoryImageCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
         {
-            count_VkExportMemoryAllocateInfoNV(featureBits, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), count);
+            count_VkExportMemoryAllocateInfoNV(featureBits, rootType, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            count_VkImportMemoryWin32HandleInfoNV(featureBits, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), count);
+            count_VkImportMemoryWin32HandleInfoNV(featureBits, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            count_VkExportMemoryWin32HandleInfoNV(featureBits, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), count);
+            count_VkExportMemoryWin32HandleInfoNV(featureBits, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
         {
-            count_VkWin32KeyedMutexAcquireReleaseInfoNV(featureBits, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), count);
+            count_VkWin32KeyedMutexAcquireReleaseInfoNV(featureBits, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_validation_flags
         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
         {
-            count_VkValidationFlagsEXT(featureBits, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), count);
+            count_VkValidationFlagsEXT(featureBits, rootType, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_texture_compression_astc_hdr
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_astc_decode_mode
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:
         {
-            count_VkImageViewASTCDecodeModeEXT(featureBits, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension), count);
+            count_VkImageViewASTCDecodeModeEXT(featureBits, rootType, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceASTCDecodeFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceASTCDecodeFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_conditional_rendering
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceConditionalRenderingFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceConditionalRenderingFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
         {
-            count_VkCommandBufferInheritanceConditionalRenderingInfoEXT(featureBits, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), count);
+            count_VkCommandBufferInheritanceConditionalRenderingInfoEXT(featureBits, rootType, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_clip_space_w_scaling
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineViewportWScalingStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineViewportWScalingStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_display_control
         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
         {
-            count_VkSwapchainCounterCreateInfoEXT(featureBits, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), count);
+            count_VkSwapchainCounterCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_GOOGLE_display_timing
         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
         {
-            count_VkPresentTimesInfoGOOGLE(featureBits, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), count);
+            count_VkPresentTimesInfoGOOGLE(featureBits, rootType, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
         {
-            count_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(featureBits, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), count);
+            count_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_viewport_swizzle
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineViewportSwizzleStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineViewportSwizzleStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_discard_rectangles
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceDiscardRectanglePropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceDiscardRectanglePropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineDiscardRectangleStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineDiscardRectangleStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_conservative_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineRasterizationConservativeStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineRasterizationConservativeStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_depth_clip_enable
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceDepthClipEnableFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceDepthClipEnableFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineRasterizationDepthClipStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineRasterizationDepthClipStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_debug_utils
         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
         {
-            count_VkDebugUtilsMessengerCreateInfoEXT(featureBits, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), count);
+            count_VkDebugUtilsMessengerCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
         {
-            count_VkAndroidHardwareBufferUsageANDROID(featureBits, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), count);
+            count_VkAndroidHardwareBufferUsageANDROID(featureBits, rootType, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
         {
-            count_VkAndroidHardwareBufferFormatPropertiesANDROID(featureBits, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), count);
+            count_VkAndroidHardwareBufferFormatPropertiesANDROID(featureBits, rootType, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
         {
-            count_VkImportAndroidHardwareBufferInfoANDROID(featureBits, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), count);
+            count_VkImportAndroidHardwareBufferInfoANDROID(featureBits, rootType, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
         {
-            count_VkExternalFormatANDROID(featureBits, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), count);
+            count_VkExternalFormatANDROID(featureBits, rootType, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_inline_uniform_block
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
         {
-            count_VkWriteDescriptorSetInlineUniformBlockEXT(featureBits, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension), count);
+            count_VkWriteDescriptorSetInlineUniformBlockEXT(featureBits, rootType, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
         {
-            count_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(featureBits, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension), count);
+            count_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_sample_locations
         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
         {
-            count_VkSampleLocationsInfoEXT(featureBits, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), count);
+            count_VkSampleLocationsInfoEXT(featureBits, rootType, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
         {
-            count_VkRenderPassSampleLocationsBeginInfoEXT(featureBits, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), count);
+            count_VkRenderPassSampleLocationsBeginInfoEXT(featureBits, rootType, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineSampleLocationsStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineSampleLocationsStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceSampleLocationsPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceSampleLocationsPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_blend_operation_advanced
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineColorBlendAdvancedStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineColorBlendAdvancedStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineCoverageToColorStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineCoverageToColorStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineCoverageModulationStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineCoverageModulationStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_shader_sm_builtins
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
         {
-            count_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_image_drm_format_modifier
         case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
         {
-            count_VkDrmFormatModifierPropertiesListEXT(featureBits, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension), count);
+            count_VkDrmFormatModifierPropertiesListEXT(featureBits, rootType, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
         {
-            count_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension), count);
+            count_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
         {
-            count_VkImageDrmFormatModifierListCreateInfoEXT(featureBits, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension), count);
+            count_VkImageDrmFormatModifierListCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
         {
-            count_VkImageDrmFormatModifierExplicitCreateInfoEXT(featureBits, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension), count);
+            count_VkImageDrmFormatModifierExplicitCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_validation_cache
         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
         {
-            count_VkShaderModuleValidationCacheCreateInfoEXT(featureBits, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), count);
+            count_VkShaderModuleValidationCacheCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_shading_rate_image
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineViewportShadingRateImageStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineViewportShadingRateImageStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
         {
-            count_VkPhysicalDeviceShadingRateImageFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceShadingRateImageFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceShadingRateImagePropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceShadingRateImagePropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_ray_tracing
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
         {
-            count_VkWriteDescriptorSetAccelerationStructureNV(featureBits, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension), count);
+            count_VkWriteDescriptorSetAccelerationStructureNV(featureBits, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceRayTracingPropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceRayTracingPropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_representative_fragment_test
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
         {
-            count_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_filter_cubic
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
         {
-            count_VkPhysicalDeviceImageViewImageFormatInfoEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension), count);
+            count_VkPhysicalDeviceImageViewImageFormatInfoEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:
         {
-            count_VkFilterCubicImageViewImageFormatPropertiesEXT(featureBits, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension), count);
+            count_VkFilterCubicImageViewImageFormatPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_global_priority
         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
         {
-            count_VkDeviceQueueGlobalPriorityCreateInfoEXT(featureBits, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), count);
+            count_VkDeviceQueueGlobalPriorityCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_external_memory_host
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
         {
-            count_VkImportMemoryHostPointerInfoEXT(featureBits, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), count);
+            count_VkImportMemoryHostPointerInfoEXT(featureBits, rootType, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_pipeline_compiler_control
         case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:
         {
-            count_VkPipelineCompilerControlCreateInfoAMD(featureBits, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension), count);
+            count_VkPipelineCompilerControlCreateInfoAMD(featureBits, rootType, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
         {
-            count_VkPhysicalDeviceShaderCorePropertiesAMD(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), count);
+            count_VkPhysicalDeviceShaderCorePropertiesAMD(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_memory_overallocation_behavior
         case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
         {
-            count_VkDeviceMemoryOverallocationCreateInfoAMD(featureBits, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension), count);
+            count_VkDeviceMemoryOverallocationCreateInfoAMD(featureBits, rootType, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineVertexInputDivisorStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineVertexInputDivisorStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_GGP_frame_token
         case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:
         {
-            count_VkPresentFrameTokenGGP(featureBits, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension), count);
+            count_VkPresentFrameTokenGGP(featureBits, rootType, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_feedback
         case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
         {
-            count_VkPipelineCreationFeedbackCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineCreationFeedbackCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_compute_shader_derivatives
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
         {
-            count_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_mesh_shader
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
         {
-            count_VkPhysicalDeviceMeshShaderFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceMeshShaderFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceMeshShaderPropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceMeshShaderPropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shader_barycentric
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
         {
-            count_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_shader_image_footprint
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
         {
-            count_VkPhysicalDeviceShaderImageFootprintFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceShaderImageFootprintFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_scissor_exclusive
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineViewportExclusiveScissorStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineViewportExclusiveScissorStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
         {
-            count_VkPhysicalDeviceExclusiveScissorFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceExclusiveScissorFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
         {
-            count_VkQueueFamilyCheckpointPropertiesNV(featureBits, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), count);
+            count_VkQueueFamilyCheckpointPropertiesNV(featureBits, rootType, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_INTEL_shader_integer_functions2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
         {
-            count_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension), count);
+            count_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_INTEL_performance_query
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL:
         {
-            count_VkQueryPoolPerformanceQueryCreateInfoINTEL(featureBits, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension), count);
+            count_VkQueryPoolPerformanceQueryCreateInfoINTEL(featureBits, rootType, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_pci_bus_info
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
         {
-            count_VkPhysicalDevicePCIBusInfoPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDevicePCIBusInfoPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_display_native_hdr
         case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:
         {
-            count_VkDisplayNativeHdrSurfaceCapabilitiesAMD(featureBits, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension), count);
+            count_VkDisplayNativeHdrSurfaceCapabilitiesAMD(featureBits, rootType, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
         {
-            count_VkSwapchainDisplayNativeHdrCreateInfoAMD(featureBits, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension), count);
+            count_VkSwapchainDisplayNativeHdrCreateInfoAMD(featureBits, rootType, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension), count);
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            count_VkImportColorBufferGOOGLE(featureBits, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), count);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), count);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), count);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    count_VkImportColorBufferGOOGLE(featureBits, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), count);
+                    break;
+                }
+                default:
+                {
+                    count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), count);
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            count_VkImportBufferGOOGLE(featureBits, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), count);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension), count);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    count_VkImportPhysicalAddressGOOGLE(featureBits, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), count);
+                    break;
+                }
+                default:
+                {
+                    count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension), count);
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            count_VkImportPhysicalAddressGOOGLE(featureBits, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), count);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    count_VkRenderPassFragmentDensityMapCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), count);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    count_VkRenderPassFragmentDensityMapCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), count);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    count_VkImportBufferGOOGLE(featureBits, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), count);
+                    break;
+                }
+                default:
+                {
+                    count_VkRenderPassFragmentDensityMapCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), count);
+                    break;
+                }
+            }
             break;
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
         {
-            count_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:
         {
-            count_VkPhysicalDeviceShaderCoreProperties2AMD(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension), count);
+            count_VkPhysicalDeviceShaderCoreProperties2AMD(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_AMD_device_coherent_memory
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
         {
-            count_VkPhysicalDeviceCoherentMemoryFeaturesAMD(featureBits, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension), count);
+            count_VkPhysicalDeviceCoherentMemoryFeaturesAMD(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_shader_image_atomic_int64
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_memory_budget
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceMemoryBudgetPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceMemoryBudgetPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_memory_priority
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceMemoryPriorityFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceMemoryPriorityFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:
         {
-            count_VkMemoryPriorityAllocateInfoEXT(featureBits, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension), count);
+            count_VkMemoryPriorityAllocateInfoEXT(featureBits, rootType, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation_image_aliasing
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
         {
-            count_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_buffer_device_address
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
         {
-            count_VkBufferDeviceAddressCreateInfoEXT(featureBits, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension), count);
+            count_VkBufferDeviceAddressCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_validation_features
         case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:
         {
-            count_VkValidationFeaturesEXT(featureBits, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension), count);
+            count_VkValidationFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_cooperative_matrix
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
         {
-            count_VkPhysicalDeviceCooperativeMatrixFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceCooperativeMatrixFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceCooperativeMatrixPropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceCooperativeMatrixPropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_coverage_reduction_mode
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
         {
-            count_VkPhysicalDeviceCoverageReductionModeFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceCoverageReductionModeFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineCoverageReductionStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineCoverageReductionStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_shader_interlock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_full_screen_exclusive
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:
         {
-            count_VkSurfaceFullScreenExclusiveInfoEXT(featureBits, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension), count);
+            count_VkSurfaceFullScreenExclusiveInfoEXT(featureBits, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:
         {
-            count_VkSurfaceCapabilitiesFullScreenExclusiveEXT(featureBits, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension), count);
+            count_VkSurfaceCapabilitiesFullScreenExclusiveEXT(featureBits, rootType, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:
         {
-            count_VkSurfaceFullScreenExclusiveWin32InfoEXT(featureBits, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension), count);
+            count_VkSurfaceFullScreenExclusiveWin32InfoEXT(featureBits, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_line_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceLineRasterizationFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceLineRasterizationFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceLineRasterizationPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceLineRasterizationPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
         {
-            count_VkPipelineRasterizationLineStateCreateInfoEXT(featureBits, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension), count);
+            count_VkPipelineRasterizationLineStateCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_shader_atomic_float
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_index_type_uint8
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_extended_dynamic_state
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_device_generated_commands
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
         {
-            count_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV:
         {
-            count_VkGraphicsPipelineShaderGroupsCreateInfoNV(featureBits, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension), count);
+            count_VkGraphicsPipelineShaderGroupsCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_texel_buffer_alignment
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_QCOM_render_pass_transform
         case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
         {
-            count_VkRenderPassTransformBeginInfoQCOM(featureBits, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension), count);
+            count_VkRenderPassTransformBeginInfoQCOM(featureBits, rootType, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
         {
-            count_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(featureBits, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension), count);
+            count_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(featureBits, rootType, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_device_memory_report
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
         {
-            count_VkDeviceDeviceMemoryReportCreateInfoEXT(featureBits, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension), count);
+            count_VkDeviceDeviceMemoryReportCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_robustness2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceRobustness2FeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceRobustness2FeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceRobustness2PropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceRobustness2PropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_custom_border_color
         case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
         {
-            count_VkSamplerCustomBorderColorCreateInfoEXT(featureBits, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension), count);
+            count_VkSamplerCustomBorderColorCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceCustomBorderColorPropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceCustomBorderColorPropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceCustomBorderColorFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceCustomBorderColorFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_private_data
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
         {
-            count_VkPhysicalDevicePrivateDataFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDevicePrivateDataFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
         {
-            count_VkDevicePrivateDataCreateInfoEXT(featureBits, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension), count);
+            count_VkDevicePrivateDataCreateInfoEXT(featureBits, rootType, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_cache_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
         {
-            count_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostics_config
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
         {
-            count_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV:
         {
-            count_VkDeviceDiagnosticsConfigCreateInfoNV(featureBits, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension), count);
+            count_VkDeviceDiagnosticsConfigCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shading_rate_enums
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
         {
-            count_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:
         {
-            count_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:
         {
-            count_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(featureBits, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension), count);
+            count_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(featureBits, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_density_map2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:
         {
-            count_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
         case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
         {
-            count_VkCopyCommandTransformInfoQCOM(featureBits, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension), count);
+            count_VkCopyCommandTransformInfoQCOM(featureBits, rootType, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_image_robustness
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
         {
-            count_VkPhysicalDeviceImageRobustnessFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDeviceImageRobustnessFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_EXT_4444_formats
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
         {
-            count_VkPhysicalDevice4444FormatsFeaturesEXT(featureBits, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension), count);
+            count_VkPhysicalDevice4444FormatsFeaturesEXT(featureBits, rootType, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension), count);
+            break;
+        }
+#endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            count_VkImportColorBufferGOOGLE(featureBits, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), count);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            count_VkImportBufferGOOGLE(featureBits, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), count);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            count_VkImportPhysicalAddressGOOGLE(featureBits, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
-            count_VkWriteDescriptorSetAccelerationStructureKHR(featureBits, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension), count);
+            count_VkWriteDescriptorSetAccelerationStructureKHR(featureBits, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
         {
-            count_VkPhysicalDeviceAccelerationStructureFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceAccelerationStructureFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
         {
-            count_VkPhysicalDeviceAccelerationStructurePropertiesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceAccelerationStructurePropertiesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_ray_tracing_pipeline
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
         {
-            count_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension), count);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR:
         {
-            count_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension), count);
             break;
         }
 #endif
 #ifdef VK_KHR_ray_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
         {
-            count_VkPhysicalDeviceRayQueryFeaturesKHR(featureBits, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension), count);
+            count_VkPhysicalDeviceRayQueryFeaturesKHR(featureBits, rootType, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension), count);
             break;
         }
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_counting_guest.h b/system/vulkan_enc/goldfish_vk_counting_guest.h
index f31e021..6f4d3a7 100644
--- a/system/vulkan_enc/goldfish_vk_counting_guest.h
+++ b/system/vulkan_enc/goldfish_vk_counting_guest.h
@@ -36,546 +36,655 @@
 #ifdef VK_VERSION_1_0
 void count_VkExtent2D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExtent2D* toCount,
     size_t* count);
 
 void count_VkExtent3D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExtent3D* toCount,
     size_t* count);
 
 void count_VkOffset2D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkOffset2D* toCount,
     size_t* count);
 
 void count_VkOffset3D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkOffset3D* toCount,
     size_t* count);
 
 void count_VkRect2D(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRect2D* toCount,
     size_t* count);
 
 void count_VkBaseInStructure(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBaseInStructure* toCount,
     size_t* count);
 
 void count_VkBaseOutStructure(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBaseOutStructure* toCount,
     size_t* count);
 
 void count_VkBufferMemoryBarrier(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* toCount,
     size_t* count);
 
 void count_VkDispatchIndirectCommand(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* toCount,
     size_t* count);
 
 void count_VkDrawIndexedIndirectCommand(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* toCount,
     size_t* count);
 
 void count_VkDrawIndirectCommand(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* toCount,
     size_t* count);
 
 void count_VkImageSubresourceRange(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSubresourceRange* toCount,
     size_t* count);
 
 void count_VkImageMemoryBarrier(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* toCount,
     size_t* count);
 
 void count_VkMemoryBarrier(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryBarrier* toCount,
     size_t* count);
 
 void count_VkAllocationCallbacks(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAllocationCallbacks* toCount,
     size_t* count);
 
 void count_VkApplicationInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkApplicationInfo* toCount,
     size_t* count);
 
 void count_VkFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFormatProperties* toCount,
     size_t* count);
 
 void count_VkImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageFormatProperties* toCount,
     size_t* count);
 
 void count_VkInstanceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* toCount,
     size_t* count);
 
 void count_VkMemoryHeap(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryHeap* toCount,
     size_t* count);
 
 void count_VkMemoryType(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryType* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceLimits(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceMemoryProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSparseProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* toCount,
     size_t* count);
 
 void count_VkQueueFamilyProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* toCount,
     size_t* count);
 
 void count_VkDeviceQueueCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* toCount,
     size_t* count);
 
 void count_VkDeviceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* toCount,
     size_t* count);
 
 void count_VkExtensionProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExtensionProperties* toCount,
     size_t* count);
 
 void count_VkLayerProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkLayerProperties* toCount,
     size_t* count);
 
 void count_VkSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubmitInfo* toCount,
     size_t* count);
 
 void count_VkMappedMemoryRange(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMappedMemoryRange* toCount,
     size_t* count);
 
 void count_VkMemoryAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* toCount,
     size_t* count);
 
 void count_VkMemoryRequirements(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryRequirements* toCount,
     size_t* count);
 
 void count_VkSparseMemoryBind(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseMemoryBind* toCount,
     size_t* count);
 
 void count_VkSparseBufferMemoryBindInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* toCount,
     size_t* count);
 
 void count_VkSparseImageOpaqueMemoryBindInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* toCount,
     size_t* count);
 
 void count_VkImageSubresource(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSubresource* toCount,
     size_t* count);
 
 void count_VkSparseImageMemoryBind(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* toCount,
     size_t* count);
 
 void count_VkSparseImageMemoryBindInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* toCount,
     size_t* count);
 
 void count_VkBindSparseInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindSparseInfo* toCount,
     size_t* count);
 
 void count_VkSparseImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* toCount,
     size_t* count);
 
 void count_VkSparseImageMemoryRequirements(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* toCount,
     size_t* count);
 
 void count_VkFenceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFenceCreateInfo* toCount,
     size_t* count);
 
 void count_VkSemaphoreCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* toCount,
     size_t* count);
 
 void count_VkEventCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkEventCreateInfo* toCount,
     size_t* count);
 
 void count_VkQueryPoolCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* toCount,
     size_t* count);
 
 void count_VkBufferCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferCreateInfo* toCount,
     size_t* count);
 
 void count_VkBufferViewCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* toCount,
     size_t* count);
 
 void count_VkImageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageCreateInfo* toCount,
     size_t* count);
 
 void count_VkSubresourceLayout(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubresourceLayout* toCount,
     size_t* count);
 
 void count_VkComponentMapping(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkComponentMapping* toCount,
     size_t* count);
 
 void count_VkImageViewCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* toCount,
     size_t* count);
 
 void count_VkShaderModuleCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineCacheCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* toCount,
     size_t* count);
 
 void count_VkSpecializationMapEntry(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* toCount,
     size_t* count);
 
 void count_VkSpecializationInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSpecializationInfo* toCount,
     size_t* count);
 
 void count_VkPipelineShaderStageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* toCount,
     size_t* count);
 
 void count_VkComputePipelineCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* toCount,
     size_t* count);
 
 void count_VkVertexInputBindingDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* toCount,
     size_t* count);
 
 void count_VkVertexInputAttributeDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* toCount,
     size_t* count);
 
 void count_VkPipelineVertexInputStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineInputAssemblyStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineTessellationStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkViewport(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViewport* toCount,
     size_t* count);
 
 void count_VkPipelineViewportStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineRasterizationStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineMultisampleStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkStencilOpState(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkStencilOpState* toCount,
     size_t* count);
 
 void count_VkPipelineDepthStencilStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineColorBlendAttachmentState(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* toCount,
     size_t* count);
 
 void count_VkPipelineColorBlendStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineDynamicStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkGraphicsPipelineCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* toCount,
     size_t* count);
 
 void count_VkPushConstantRange(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPushConstantRange* toCount,
     size_t* count);
 
 void count_VkPipelineLayoutCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* toCount,
     size_t* count);
 
 void count_VkSamplerCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* toCount,
     size_t* count);
 
 void count_VkCopyDescriptorSet(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* toCount,
     size_t* count);
 
 void count_VkDescriptorBufferInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* toCount,
     size_t* count);
 
 void count_VkDescriptorImageInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* toCount,
     size_t* count);
 
 void count_VkDescriptorPoolSize(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* toCount,
     size_t* count);
 
 void count_VkDescriptorPoolCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* toCount,
     size_t* count);
 
 void count_VkDescriptorSetAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* toCount,
     size_t* count);
 
 void count_VkDescriptorSetLayoutBinding(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* toCount,
     size_t* count);
 
 void count_VkDescriptorSetLayoutCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* toCount,
     size_t* count);
 
 void count_VkWriteDescriptorSet(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* toCount,
     size_t* count);
 
 void count_VkAttachmentDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentDescription* toCount,
     size_t* count);
 
 void count_VkAttachmentReference(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentReference* toCount,
     size_t* count);
 
 void count_VkFramebufferCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* toCount,
     size_t* count);
 
 void count_VkSubpassDescription(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDescription* toCount,
     size_t* count);
 
 void count_VkSubpassDependency(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDependency* toCount,
     size_t* count);
 
 void count_VkRenderPassCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* toCount,
     size_t* count);
 
 void count_VkCommandPoolCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* toCount,
     size_t* count);
 
 void count_VkCommandBufferAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* toCount,
     size_t* count);
 
 void count_VkCommandBufferInheritanceInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* toCount,
     size_t* count);
 
 void count_VkCommandBufferBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* toCount,
     size_t* count);
 
 void count_VkBufferCopy(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferCopy* toCount,
     size_t* count);
 
 void count_VkImageSubresourceLayers(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* toCount,
     size_t* count);
 
 void count_VkBufferImageCopy(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferImageCopy* toCount,
     size_t* count);
 
 void count_VkClearColorValue(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearColorValue* toCount,
     size_t* count);
 
 void count_VkClearDepthStencilValue(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* toCount,
     size_t* count);
 
 void count_VkClearValue(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearValue* toCount,
     size_t* count);
 
 void count_VkClearAttachment(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearAttachment* toCount,
     size_t* count);
 
 void count_VkClearRect(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkClearRect* toCount,
     size_t* count);
 
 void count_VkImageBlit(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageBlit* toCount,
     size_t* count);
 
 void count_VkImageCopy(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageCopy* toCount,
     size_t* count);
 
 void count_VkImageResolve(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageResolve* toCount,
     size_t* count);
 
 void count_VkRenderPassBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* toCount,
     size_t* count);
 
@@ -583,191 +692,229 @@
 #ifdef VK_VERSION_1_1
 void count_VkPhysicalDeviceSubgroupProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* toCount,
     size_t* count);
 
 void count_VkBindBufferMemoryInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* toCount,
     size_t* count);
 
 void count_VkBindImageMemoryInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDevice16BitStorageFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* toCount,
     size_t* count);
 
 void count_VkMemoryDedicatedRequirements(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* toCount,
     size_t* count);
 
 void count_VkMemoryDedicatedAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* toCount,
     size_t* count);
 
 void count_VkMemoryAllocateFlagsInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* toCount,
     size_t* count);
 
 void count_VkDeviceGroupRenderPassBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* toCount,
     size_t* count);
 
 void count_VkDeviceGroupCommandBufferBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* toCount,
     size_t* count);
 
 void count_VkDeviceGroupSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* toCount,
     size_t* count);
 
 void count_VkDeviceGroupBindSparseInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* toCount,
     size_t* count);
 
 void count_VkBindBufferMemoryDeviceGroupInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* toCount,
     size_t* count);
 
 void count_VkBindImageMemoryDeviceGroupInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceGroupProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* toCount,
     size_t* count);
 
 void count_VkDeviceGroupDeviceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* toCount,
     size_t* count);
 
 void count_VkBufferMemoryRequirementsInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* toCount,
     size_t* count);
 
 void count_VkImageMemoryRequirementsInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* toCount,
     size_t* count);
 
 void count_VkImageSparseMemoryRequirementsInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* toCount,
     size_t* count);
 
 void count_VkMemoryRequirements2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryRequirements2* toCount,
     size_t* count);
 
 void count_VkSparseImageMemoryRequirements2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFeatures2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* toCount,
     size_t* count);
 
 void count_VkFormatProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFormatProperties2* toCount,
     size_t* count);
 
 void count_VkImageFormatProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageFormatProperties2* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceImageFormatInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* toCount,
     size_t* count);
 
 void count_VkQueueFamilyProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceMemoryProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* toCount,
     size_t* count);
 
 void count_VkSparseImageFormatProperties2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSparseImageFormatInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* toCount,
     size_t* count);
 
 void count_VkPhysicalDevicePointClippingProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* toCount,
     size_t* count);
 
 void count_VkInputAttachmentAspectReference(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* toCount,
     size_t* count);
 
 void count_VkRenderPassInputAttachmentAspectCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* toCount,
     size_t* count);
 
 void count_VkImageViewUsageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* toCount,
     size_t* count);
 
 void count_VkPipelineTessellationDomainOriginStateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* toCount,
     size_t* count);
 
 void count_VkRenderPassMultiviewCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceMultiviewFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceMultiviewProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceVariablePointersFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* toCount,
     size_t* count);
 
@@ -775,151 +922,181 @@
 
 void count_VkPhysicalDeviceProtectedMemoryFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceProtectedMemoryProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* toCount,
     size_t* count);
 
 void count_VkDeviceQueueInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* toCount,
     size_t* count);
 
 void count_VkProtectedSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* toCount,
     size_t* count);
 
 void count_VkSamplerYcbcrConversionCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* toCount,
     size_t* count);
 
 void count_VkSamplerYcbcrConversionInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* toCount,
     size_t* count);
 
 void count_VkBindImagePlaneMemoryInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* toCount,
     size_t* count);
 
 void count_VkImagePlaneMemoryRequirementsInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* toCount,
     size_t* count);
 
 void count_VkSamplerYcbcrConversionImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* toCount,
     size_t* count);
 
 void count_VkDescriptorUpdateTemplateEntry(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* toCount,
     size_t* count);
 
 void count_VkDescriptorUpdateTemplateCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* toCount,
     size_t* count);
 
 void count_VkExternalMemoryProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceExternalImageFormatInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* toCount,
     size_t* count);
 
 void count_VkExternalImageFormatProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceExternalBufferInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* toCount,
     size_t* count);
 
 void count_VkExternalBufferProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalBufferProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceIDProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* toCount,
     size_t* count);
 
 void count_VkExternalMemoryImageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* toCount,
     size_t* count);
 
 void count_VkExternalMemoryBufferCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* toCount,
     size_t* count);
 
 void count_VkExportMemoryAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceExternalFenceInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* toCount,
     size_t* count);
 
 void count_VkExternalFenceProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalFenceProperties* toCount,
     size_t* count);
 
 void count_VkExportFenceCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* toCount,
     size_t* count);
 
 void count_VkExportSemaphoreCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceExternalSemaphoreInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* toCount,
     size_t* count);
 
 void count_VkExternalSemaphoreProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceMaintenance3Properties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* toCount,
     size_t* count);
 
 void count_VkDescriptorSetLayoutSupport(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShaderDrawParametersFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* toCount,
     size_t* count);
 
@@ -929,256 +1106,307 @@
 #ifdef VK_VERSION_1_2
 void count_VkPhysicalDeviceVulkan11Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceVulkan11Properties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceVulkan12Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* toCount,
     size_t* count);
 
 void count_VkConformanceVersion(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkConformanceVersion* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceVulkan12Properties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* toCount,
     size_t* count);
 
 void count_VkImageFormatListCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* toCount,
     size_t* count);
 
 void count_VkAttachmentDescription2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentDescription2* toCount,
     size_t* count);
 
 void count_VkAttachmentReference2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentReference2* toCount,
     size_t* count);
 
 void count_VkSubpassDescription2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDescription2* toCount,
     size_t* count);
 
 void count_VkSubpassDependency2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDependency2* toCount,
     size_t* count);
 
 void count_VkRenderPassCreateInfo2(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* toCount,
     size_t* count);
 
 void count_VkSubpassBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* toCount,
     size_t* count);
 
 void count_VkSubpassEndInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassEndInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDevice8BitStorageFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceDriverProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShaderAtomicInt64Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShaderFloat16Int8Features(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFloatControlsProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* toCount,
     size_t* count);
 
 void count_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceDescriptorIndexingFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceDescriptorIndexingProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* toCount,
     size_t* count);
 
 void count_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* toCount,
     size_t* count);
 
 void count_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* toCount,
     size_t* count);
 
 void count_VkSubpassDescriptionDepthStencilResolve(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceDepthStencilResolveProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceScalarBlockLayoutFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* toCount,
     size_t* count);
 
 void count_VkImageStencilUsageCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* toCount,
     size_t* count);
 
 void count_VkSamplerReductionModeCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceVulkanMemoryModelFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceImagelessFramebufferFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* toCount,
     size_t* count);
 
 void count_VkFramebufferAttachmentImageInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* toCount,
     size_t* count);
 
 void count_VkFramebufferAttachmentsCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* toCount,
     size_t* count);
 
 void count_VkRenderPassAttachmentBeginInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* toCount,
     size_t* count);
 
 void count_VkAttachmentReferenceStencilLayout(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* toCount,
     size_t* count);
 
 void count_VkAttachmentDescriptionStencilLayout(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceHostQueryResetFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceTimelineSemaphoreFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceTimelineSemaphoreProperties(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* toCount,
     size_t* count);
 
 void count_VkSemaphoreTypeCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* toCount,
     size_t* count);
 
 void count_VkTimelineSemaphoreSubmitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* toCount,
     size_t* count);
 
 void count_VkSemaphoreWaitInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* toCount,
     size_t* count);
 
 void count_VkSemaphoreSignalInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceBufferDeviceAddressFeatures(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* toCount,
     size_t* count);
 
 void count_VkBufferDeviceAddressInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* toCount,
     size_t* count);
 
 void count_VkBufferOpaqueCaptureAddressCreateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* toCount,
     size_t* count);
 
 void count_VkMemoryOpaqueCaptureAddressAllocateInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* toCount,
     size_t* count);
 
 void count_VkDeviceMemoryOpaqueCaptureAddressInfo(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* toCount,
     size_t* count);
 
@@ -1186,11 +1414,13 @@
 #ifdef VK_KHR_surface
 void count_VkSurfaceCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* toCount,
     size_t* count);
 
 void count_VkSurfaceFormatKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* toCount,
     size_t* count);
 
@@ -1198,41 +1428,49 @@
 #ifdef VK_KHR_swapchain
 void count_VkSwapchainCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkPresentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentInfoKHR* toCount,
     size_t* count);
 
 void count_VkImageSwapchainCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkBindImageMemorySwapchainInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* toCount,
     size_t* count);
 
 void count_VkAcquireNextImageInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* toCount,
     size_t* count);
 
 void count_VkDeviceGroupPresentCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* toCount,
     size_t* count);
 
 void count_VkDeviceGroupPresentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* toCount,
     size_t* count);
 
 void count_VkDeviceGroupSwapchainCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1240,36 +1478,43 @@
 #ifdef VK_KHR_display
 void count_VkDisplayModeParametersKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* toCount,
     size_t* count);
 
 void count_VkDisplayModeCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkDisplayModePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkDisplayPlaneCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* toCount,
     size_t* count);
 
 void count_VkDisplayPlanePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkDisplayPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* toCount,
     size_t* count);
 
 void count_VkDisplaySurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1277,6 +1522,7 @@
 #ifdef VK_KHR_display_swapchain
 void count_VkDisplayPresentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* toCount,
     size_t* count);
 
@@ -1284,6 +1530,7 @@
 #ifdef VK_KHR_xlib_surface
 void count_VkXlibSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1291,6 +1538,7 @@
 #ifdef VK_KHR_xcb_surface
 void count_VkXcbSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1298,6 +1546,7 @@
 #ifdef VK_KHR_wayland_surface
 void count_VkWaylandSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1305,6 +1554,7 @@
 #ifdef VK_KHR_android_surface
 void count_VkAndroidSurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1312,6 +1562,7 @@
 #ifdef VK_KHR_win32_surface
 void count_VkWin32SurfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1397,21 +1648,25 @@
 #ifdef VK_KHR_external_memory_win32
 void count_VkImportMemoryWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* toCount,
     size_t* count);
 
 void count_VkExportMemoryWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* toCount,
     size_t* count);
 
 void count_VkMemoryWin32HandlePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkMemoryGetWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* toCount,
     size_t* count);
 
@@ -1419,16 +1674,19 @@
 #ifdef VK_KHR_external_memory_fd
 void count_VkImportMemoryFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* toCount,
     size_t* count);
 
 void count_VkMemoryFdPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* toCount,
     size_t* count);
 
 void count_VkMemoryGetFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* toCount,
     size_t* count);
 
@@ -1436,6 +1694,7 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void count_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* toCount,
     size_t* count);
 
@@ -1453,21 +1712,25 @@
 #ifdef VK_KHR_external_semaphore_win32
 void count_VkImportSemaphoreWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* toCount,
     size_t* count);
 
 void count_VkExportSemaphoreWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* toCount,
     size_t* count);
 
 void count_VkD3D12FenceSubmitInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* toCount,
     size_t* count);
 
 void count_VkSemaphoreGetWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* toCount,
     size_t* count);
 
@@ -1475,11 +1738,13 @@
 #ifdef VK_KHR_external_semaphore_fd
 void count_VkImportSemaphoreFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* toCount,
     size_t* count);
 
 void count_VkSemaphoreGetFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* toCount,
     size_t* count);
 
@@ -1487,6 +1752,7 @@
 #ifdef VK_KHR_push_descriptor
 void count_VkPhysicalDevicePushDescriptorPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* toCount,
     size_t* count);
 
@@ -1504,16 +1770,19 @@
 #ifdef VK_KHR_incremental_present
 void count_VkRectLayerKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRectLayerKHR* toCount,
     size_t* count);
 
 void count_VkPresentRegionKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentRegionKHR* toCount,
     size_t* count);
 
 void count_VkPresentRegionsKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* toCount,
     size_t* count);
 
@@ -1553,6 +1822,7 @@
 #ifdef VK_KHR_shared_presentable_image
 void count_VkSharedPresentSurfaceCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* toCount,
     size_t* count);
 
@@ -1570,16 +1840,19 @@
 #ifdef VK_KHR_external_fence_win32
 void count_VkImportFenceWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* toCount,
     size_t* count);
 
 void count_VkExportFenceWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* toCount,
     size_t* count);
 
 void count_VkFenceGetWin32HandleInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* toCount,
     size_t* count);
 
@@ -1587,11 +1860,13 @@
 #ifdef VK_KHR_external_fence_fd
 void count_VkImportFenceFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* toCount,
     size_t* count);
 
 void count_VkFenceGetFdInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* toCount,
     size_t* count);
 
@@ -1599,41 +1874,49 @@
 #ifdef VK_KHR_performance_query
 void count_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* toCount,
     size_t* count);
 
 void count_VkPerformanceCounterKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* toCount,
     size_t* count);
 
 void count_VkPerformanceCounterDescriptionKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* toCount,
     size_t* count);
 
 void count_VkQueryPoolPerformanceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkPerformanceCounterResultKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* toCount,
     size_t* count);
 
 void count_VkAcquireProfilingLockInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* toCount,
     size_t* count);
 
 void count_VkPerformanceQuerySubmitInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* toCount,
     size_t* count);
 
@@ -1653,16 +1936,19 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void count_VkPhysicalDeviceSurfaceInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* toCount,
     size_t* count);
 
 void count_VkSurfaceCapabilities2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* toCount,
     size_t* count);
 
 void count_VkSurfaceFormat2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* toCount,
     size_t* count);
 
@@ -1676,26 +1962,31 @@
 #ifdef VK_KHR_get_display_properties2
 void count_VkDisplayProperties2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* toCount,
     size_t* count);
 
 void count_VkDisplayPlaneProperties2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* toCount,
     size_t* count);
 
 void count_VkDisplayModeProperties2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* toCount,
     size_t* count);
 
 void count_VkDisplayPlaneInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* toCount,
     size_t* count);
 
 void count_VkDisplayPlaneCapabilities2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* toCount,
     size_t* count);
 
@@ -1749,11 +2040,13 @@
 #ifdef VK_KHR_portability_subset
 void count_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* toCount,
     size_t* count);
 
@@ -1781,6 +2074,7 @@
 #ifdef VK_KHR_shader_clock
 void count_VkPhysicalDeviceShaderClockFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* toCount,
     size_t* count);
 
@@ -1824,6 +2118,7 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void count_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* toCount,
     size_t* count);
 
@@ -1831,26 +2126,31 @@
 #ifdef VK_KHR_fragment_shading_rate
 void count_VkFragmentShadingRateAttachmentInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* toCount,
     size_t* count);
 
 void count_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFragmentShadingRateKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* toCount,
     size_t* count);
 
@@ -1860,6 +2160,7 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void count_VkSurfaceProtectedCapabilitiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* toCount,
     size_t* count);
 
@@ -1893,36 +2194,43 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void count_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* toCount,
     size_t* count);
 
 void count_VkPipelineInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* toCount,
     size_t* count);
 
 void count_VkPipelineExecutablePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkPipelineExecutableInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* toCount,
     size_t* count);
 
 void count_VkPipelineExecutableStatisticValueKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* toCount,
     size_t* count);
 
 void count_VkPipelineExecutableStatisticKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* toCount,
     size_t* count);
 
 void count_VkPipelineExecutableInternalRepresentationKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* toCount,
     size_t* count);
 
@@ -1930,6 +2238,7 @@
 #ifdef VK_KHR_pipeline_library
 void count_VkPipelineLibraryCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* toCount,
     size_t* count);
 
@@ -1939,56 +2248,67 @@
 #ifdef VK_KHR_copy_commands2
 void count_VkBufferCopy2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* toCount,
     size_t* count);
 
 void count_VkCopyBufferInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* toCount,
     size_t* count);
 
 void count_VkImageCopy2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageCopy2KHR* toCount,
     size_t* count);
 
 void count_VkCopyImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* toCount,
     size_t* count);
 
 void count_VkBufferImageCopy2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* toCount,
     size_t* count);
 
 void count_VkCopyBufferToImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* toCount,
     size_t* count);
 
 void count_VkCopyImageToBufferInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* toCount,
     size_t* count);
 
 void count_VkImageBlit2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageBlit2KHR* toCount,
     size_t* count);
 
 void count_VkBlitImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* toCount,
     size_t* count);
 
 void count_VkImageResolve2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageResolve2KHR* toCount,
     size_t* count);
 
 void count_VkResolveImageInfo2KHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* toCount,
     size_t* count);
 
@@ -1996,6 +2316,7 @@
 #ifdef VK_ANDROID_native_buffer
 void count_VkNativeBufferANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* toCount,
     size_t* count);
 
@@ -2003,6 +2324,7 @@
 #ifdef VK_EXT_debug_report
 void count_VkDebugReportCallbackCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2016,6 +2338,7 @@
 #ifdef VK_AMD_rasterization_order
 void count_VkPipelineRasterizationStateRasterizationOrderAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* toCount,
     size_t* count);
 
@@ -2027,16 +2350,19 @@
 #ifdef VK_EXT_debug_marker
 void count_VkDebugMarkerObjectNameInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* toCount,
     size_t* count);
 
 void count_VkDebugMarkerObjectTagInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* toCount,
     size_t* count);
 
 void count_VkDebugMarkerMarkerInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* toCount,
     size_t* count);
 
@@ -2046,16 +2372,19 @@
 #ifdef VK_NV_dedicated_allocation
 void count_VkDedicatedAllocationImageCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkDedicatedAllocationBufferCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkDedicatedAllocationMemoryAllocateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* toCount,
     size_t* count);
 
@@ -2063,16 +2392,19 @@
 #ifdef VK_EXT_transform_feedback
 void count_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineRasterizationStateStreamCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2080,11 +2412,13 @@
 #ifdef VK_NVX_image_view_handle
 void count_VkImageViewHandleInfoNVX(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* toCount,
     size_t* count);
 
 void count_VkImageViewAddressPropertiesNVX(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* toCount,
     size_t* count);
 
@@ -2100,6 +2434,7 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void count_VkTextureLODGatherFormatPropertiesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* toCount,
     size_t* count);
 
@@ -2107,11 +2442,13 @@
 #ifdef VK_AMD_shader_info
 void count_VkShaderResourceUsageAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* toCount,
     size_t* count);
 
 void count_VkShaderStatisticsInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* toCount,
     size_t* count);
 
@@ -2121,6 +2458,7 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void count_VkStreamDescriptorSurfaceCreateInfoGGP(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* toCount,
     size_t* count);
 
@@ -2128,6 +2466,7 @@
 #ifdef VK_NV_corner_sampled_image
 void count_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* toCount,
     size_t* count);
 
@@ -2137,6 +2476,7 @@
 #ifdef VK_NV_external_memory_capabilities
 void count_VkExternalImageFormatPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* toCount,
     size_t* count);
 
@@ -2144,11 +2484,13 @@
 #ifdef VK_NV_external_memory
 void count_VkExternalMemoryImageCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkExportMemoryAllocateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* toCount,
     size_t* count);
 
@@ -2156,11 +2498,13 @@
 #ifdef VK_NV_external_memory_win32
 void count_VkImportMemoryWin32HandleInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* toCount,
     size_t* count);
 
 void count_VkExportMemoryWin32HandleInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* toCount,
     size_t* count);
 
@@ -2168,6 +2512,7 @@
 #ifdef VK_NV_win32_keyed_mutex
 void count_VkWin32KeyedMutexAcquireReleaseInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* toCount,
     size_t* count);
 
@@ -2175,6 +2520,7 @@
 #ifdef VK_EXT_validation_flags
 void count_VkValidationFlagsEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* toCount,
     size_t* count);
 
@@ -2182,6 +2528,7 @@
 #ifdef VK_NN_vi_surface
 void count_VkViSurfaceCreateInfoNN(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* toCount,
     size_t* count);
 
@@ -2193,6 +2540,7 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void count_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* toCount,
     size_t* count);
 
@@ -2200,11 +2548,13 @@
 #ifdef VK_EXT_astc_decode_mode
 void count_VkImageViewASTCDecodeModeEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* toCount,
     size_t* count);
 
@@ -2212,16 +2562,19 @@
 #ifdef VK_EXT_conditional_rendering
 void count_VkConditionalRenderingBeginInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* toCount,
     size_t* count);
 
@@ -2229,11 +2582,13 @@
 #ifdef VK_NV_clip_space_w_scaling
 void count_VkViewportWScalingNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViewportWScalingNV* toCount,
     size_t* count);
 
 void count_VkPipelineViewportWScalingStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -2245,6 +2600,7 @@
 #ifdef VK_EXT_display_surface_counter
 void count_VkSurfaceCapabilities2EXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* toCount,
     size_t* count);
 
@@ -2252,21 +2608,25 @@
 #ifdef VK_EXT_display_control
 void count_VkDisplayPowerInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* toCount,
     size_t* count);
 
 void count_VkDeviceEventInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* toCount,
     size_t* count);
 
 void count_VkDisplayEventInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* toCount,
     size_t* count);
 
 void count_VkSwapchainCounterCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2274,21 +2634,25 @@
 #ifdef VK_GOOGLE_display_timing
 void count_VkRefreshCycleDurationGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* toCount,
     size_t* count);
 
 void count_VkPastPresentationTimingGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* toCount,
     size_t* count);
 
 void count_VkPresentTimeGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* toCount,
     size_t* count);
 
 void count_VkPresentTimesInfoGOOGLE(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* toCount,
     size_t* count);
 
@@ -2302,6 +2666,7 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void count_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* toCount,
     size_t* count);
 
@@ -2309,11 +2674,13 @@
 #ifdef VK_NV_viewport_swizzle
 void count_VkViewportSwizzleNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* toCount,
     size_t* count);
 
 void count_VkPipelineViewportSwizzleStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -2321,11 +2688,13 @@
 #ifdef VK_EXT_discard_rectangles
 void count_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineDiscardRectangleStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2333,11 +2702,13 @@
 #ifdef VK_EXT_conservative_rasterization
 void count_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2345,11 +2716,13 @@
 #ifdef VK_EXT_depth_clip_enable
 void count_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2359,11 +2732,13 @@
 #ifdef VK_EXT_hdr_metadata
 void count_VkXYColorEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkXYColorEXT* toCount,
     size_t* count);
 
 void count_VkHdrMetadataEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* toCount,
     size_t* count);
 
@@ -2371,6 +2746,7 @@
 #ifdef VK_MVK_ios_surface
 void count_VkIOSSurfaceCreateInfoMVK(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* toCount,
     size_t* count);
 
@@ -2378,6 +2754,7 @@
 #ifdef VK_MVK_macos_surface
 void count_VkMacOSSurfaceCreateInfoMVK(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* toCount,
     size_t* count);
 
@@ -2391,26 +2768,31 @@
 #ifdef VK_EXT_debug_utils
 void count_VkDebugUtilsLabelEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* toCount,
     size_t* count);
 
 void count_VkDebugUtilsObjectNameInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* toCount,
     size_t* count);
 
 void count_VkDebugUtilsMessengerCallbackDataEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* toCount,
     size_t* count);
 
 void count_VkDebugUtilsMessengerCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkDebugUtilsObjectTagInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* toCount,
     size_t* count);
 
@@ -2418,31 +2800,37 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void count_VkAndroidHardwareBufferUsageANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* toCount,
     size_t* count);
 
 void count_VkAndroidHardwareBufferPropertiesANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* toCount,
     size_t* count);
 
 void count_VkAndroidHardwareBufferFormatPropertiesANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* toCount,
     size_t* count);
 
 void count_VkImportAndroidHardwareBufferInfoANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* toCount,
     size_t* count);
 
 void count_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* toCount,
     size_t* count);
 
 void count_VkExternalFormatANDROID(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* toCount,
     size_t* count);
 
@@ -2462,21 +2850,25 @@
 #ifdef VK_EXT_inline_uniform_block
 void count_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkWriteDescriptorSetInlineUniformBlockEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* toCount,
     size_t* count);
 
 void count_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2486,41 +2878,49 @@
 #ifdef VK_EXT_sample_locations
 void count_VkSampleLocationEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSampleLocationEXT* toCount,
     size_t* count);
 
 void count_VkSampleLocationsInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* toCount,
     size_t* count);
 
 void count_VkAttachmentSampleLocationsEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* toCount,
     size_t* count);
 
 void count_VkSubpassSampleLocationsEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* toCount,
     size_t* count);
 
 void count_VkRenderPassSampleLocationsBeginInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* toCount,
     size_t* count);
 
 void count_VkPipelineSampleLocationsStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkMultisamplePropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* toCount,
     size_t* count);
 
@@ -2528,16 +2928,19 @@
 #ifdef VK_EXT_blend_operation_advanced
 void count_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2545,6 +2948,7 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void count_VkPipelineCoverageToColorStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -2552,6 +2956,7 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void count_VkPipelineCoverageModulationStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -2561,11 +2966,13 @@
 #ifdef VK_NV_shader_sm_builtins
 void count_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* toCount,
     size_t* count);
 
@@ -2575,31 +2982,37 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void count_VkDrmFormatModifierPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkDrmFormatModifierPropertiesListEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* toCount,
     size_t* count);
 
 void count_VkImageDrmFormatModifierListCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkImageDrmFormatModifierPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* toCount,
     size_t* count);
 
@@ -2607,11 +3020,13 @@
 #ifdef VK_EXT_validation_cache
 void count_VkValidationCacheCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkShaderModuleValidationCacheCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2633,36 +3048,43 @@
 #ifdef VK_NV_shading_rate_image
 void count_VkShadingRatePaletteNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* toCount,
     size_t* count);
 
 void count_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShadingRateImageFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceShadingRateImagePropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* toCount,
     size_t* count);
 
 void count_VkCoarseSampleLocationNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* toCount,
     size_t* count);
 
 void count_VkCoarseSampleOrderCustomNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* toCount,
     size_t* count);
 
 void count_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -2670,66 +3092,79 @@
 #ifdef VK_NV_ray_tracing
 void count_VkRayTracingShaderGroupCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkRayTracingPipelineCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkGeometryTrianglesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* toCount,
     size_t* count);
 
 void count_VkGeometryAABBNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryAABBNV* toCount,
     size_t* count);
 
 void count_VkGeometryDataNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryDataNV* toCount,
     size_t* count);
 
 void count_VkGeometryNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeometryNV* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkBindAccelerationStructureMemoryInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* toCount,
     size_t* count);
 
 void count_VkWriteDescriptorSetAccelerationStructureNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureMemoryRequirementsInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceRayTracingPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* toCount,
     size_t* count);
 
 void count_VkTransformMatrixKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* toCount,
     size_t* count);
 
@@ -2737,6 +3172,7 @@
 
 void count_VkAabbPositionsKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* toCount,
     size_t* count);
 
@@ -2744,6 +3180,7 @@
 
 void count_VkAccelerationStructureInstanceKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* toCount,
     size_t* count);
 
@@ -2753,11 +3190,13 @@
 #ifdef VK_NV_representative_fragment_test
 void count_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* toCount,
     size_t* count);
 
 void count_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -2765,11 +3204,13 @@
 #ifdef VK_EXT_filter_cubic
 void count_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* toCount,
     size_t* count);
 
 void count_VkFilterCubicImageViewImageFormatPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* toCount,
     size_t* count);
 
@@ -2779,6 +3220,7 @@
 #ifdef VK_EXT_global_priority
 void count_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2786,16 +3228,19 @@
 #ifdef VK_EXT_external_memory_host
 void count_VkImportMemoryHostPointerInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* toCount,
     size_t* count);
 
 void count_VkMemoryHostPointerPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* toCount,
     size_t* count);
 
@@ -2805,6 +3250,7 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void count_VkPipelineCompilerControlCreateInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* toCount,
     size_t* count);
 
@@ -2812,6 +3258,7 @@
 #ifdef VK_EXT_calibrated_timestamps
 void count_VkCalibratedTimestampInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* toCount,
     size_t* count);
 
@@ -2819,6 +3266,7 @@
 #ifdef VK_AMD_shader_core_properties
 void count_VkPhysicalDeviceShaderCorePropertiesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* toCount,
     size_t* count);
 
@@ -2826,6 +3274,7 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void count_VkDeviceMemoryOverallocationCreateInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* toCount,
     size_t* count);
 
@@ -2833,21 +3282,25 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void count_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkVertexInputBindingDivisorDescriptionEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* toCount,
     size_t* count);
 
 void count_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* toCount,
     size_t* count);
 
@@ -2855,6 +3308,7 @@
 #ifdef VK_GGP_frame_token
 void count_VkPresentFrameTokenGGP(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* toCount,
     size_t* count);
 
@@ -2862,11 +3316,13 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void count_VkPipelineCreationFeedbackEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* toCount,
     size_t* count);
 
 void count_VkPipelineCreationFeedbackCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* toCount,
     size_t* count);
 
@@ -2876,6 +3332,7 @@
 #ifdef VK_NV_compute_shader_derivatives
 void count_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* toCount,
     size_t* count);
 
@@ -2883,16 +3340,19 @@
 #ifdef VK_NV_mesh_shader
 void count_VkPhysicalDeviceMeshShaderFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceMeshShaderPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* toCount,
     size_t* count);
 
 void count_VkDrawMeshTasksIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* toCount,
     size_t* count);
 
@@ -2900,6 +3360,7 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void count_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* toCount,
     size_t* count);
 
@@ -2907,6 +3368,7 @@
 #ifdef VK_NV_shader_image_footprint
 void count_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* toCount,
     size_t* count);
 
@@ -2914,11 +3376,13 @@
 #ifdef VK_NV_scissor_exclusive
 void count_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* toCount,
     size_t* count);
 
@@ -2926,11 +3390,13 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void count_VkQueueFamilyCheckpointPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* toCount,
     size_t* count);
 
 void count_VkCheckpointDataNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCheckpointDataNV* toCount,
     size_t* count);
 
@@ -2938,6 +3404,7 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void count_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* toCount,
     size_t* count);
 
@@ -2945,21 +3412,25 @@
 #ifdef VK_INTEL_performance_query
 void count_VkPerformanceValueDataINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* toCount,
     size_t* count);
 
 void count_VkPerformanceValueINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* toCount,
     size_t* count);
 
 void count_VkInitializePerformanceApiInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* toCount,
     size_t* count);
 
 void count_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* toCount,
     size_t* count);
 
@@ -2967,21 +3438,25 @@
 
 void count_VkPerformanceMarkerInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* toCount,
     size_t* count);
 
 void count_VkPerformanceStreamMarkerInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* toCount,
     size_t* count);
 
 void count_VkPerformanceOverrideInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* toCount,
     size_t* count);
 
 void count_VkPerformanceConfigurationAcquireInfoINTEL(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* toCount,
     size_t* count);
 
@@ -2989,6 +3464,7 @@
 #ifdef VK_EXT_pci_bus_info
 void count_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* toCount,
     size_t* count);
 
@@ -2996,11 +3472,13 @@
 #ifdef VK_AMD_display_native_hdr
 void count_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* toCount,
     size_t* count);
 
 void count_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* toCount,
     size_t* count);
 
@@ -3008,6 +3486,7 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void count_VkImagePipeSurfaceCreateInfoFUCHSIA(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* toCount,
     size_t* count);
 
@@ -3015,24 +3494,28 @@
 #ifdef VK_EXT_metal_surface
 void count_VkMetalSurfaceCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* toCount,
     size_t* count);
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void count_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void count_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     uint32_t featureBits,
-    const VkImportColorBufferGOOGLE* toCount,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toCount,
     size_t* count);
 
-void count_VkImportBufferGOOGLE(
+void count_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     uint32_t featureBits,
-    const VkImportBufferGOOGLE* toCount,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toCount,
     size_t* count);
 
-void count_VkImportPhysicalAddressGOOGLE(
+void count_VkRenderPassFragmentDensityMapCreateInfoEXT(
     uint32_t featureBits,
-    const VkImportPhysicalAddressGOOGLE* toCount,
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* toCount,
     size_t* count);
 
 #endif
@@ -3047,16 +3530,19 @@
 #ifdef VK_EXT_subgroup_size_control
 void count_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* toCount,
     size_t* count);
 
@@ -3064,6 +3550,7 @@
 #ifdef VK_AMD_shader_core_properties2
 void count_VkPhysicalDeviceShaderCoreProperties2AMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* toCount,
     size_t* count);
 
@@ -3071,6 +3558,7 @@
 #ifdef VK_AMD_device_coherent_memory
 void count_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* toCount,
     size_t* count);
 
@@ -3078,6 +3566,7 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void count_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* toCount,
     size_t* count);
 
@@ -3085,6 +3574,7 @@
 #ifdef VK_EXT_memory_budget
 void count_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* toCount,
     size_t* count);
 
@@ -3092,11 +3582,13 @@
 #ifdef VK_EXT_memory_priority
 void count_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkMemoryPriorityAllocateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* toCount,
     size_t* count);
 
@@ -3104,6 +3596,7 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void count_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* toCount,
     size_t* count);
 
@@ -3111,6 +3604,7 @@
 #ifdef VK_EXT_buffer_device_address
 void count_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* toCount,
     size_t* count);
 
@@ -3120,6 +3614,7 @@
 
 void count_VkBufferDeviceAddressCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* toCount,
     size_t* count);
 
@@ -3127,6 +3622,7 @@
 #ifdef VK_EXT_tooling_info
 void count_VkPhysicalDeviceToolPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* toCount,
     size_t* count);
 
@@ -3138,6 +3634,7 @@
 #ifdef VK_EXT_validation_features
 void count_VkValidationFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* toCount,
     size_t* count);
 
@@ -3145,16 +3642,19 @@
 #ifdef VK_NV_cooperative_matrix
 void count_VkCooperativeMatrixPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* toCount,
     size_t* count);
 
@@ -3162,16 +3662,19 @@
 #ifdef VK_NV_coverage_reduction_mode
 void count_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* toCount,
     size_t* count);
 
 void count_VkPipelineCoverageReductionStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkFramebufferMixedSamplesCombinationNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* toCount,
     size_t* count);
 
@@ -3179,6 +3682,7 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void count_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* toCount,
     size_t* count);
 
@@ -3186,6 +3690,7 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void count_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* toCount,
     size_t* count);
 
@@ -3193,16 +3698,19 @@
 #ifdef VK_EXT_full_screen_exclusive
 void count_VkSurfaceFullScreenExclusiveInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* toCount,
     size_t* count);
 
 void count_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* toCount,
     size_t* count);
 
 void count_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* toCount,
     size_t* count);
 
@@ -3210,6 +3718,7 @@
 #ifdef VK_EXT_headless_surface
 void count_VkHeadlessSurfaceCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* toCount,
     size_t* count);
 
@@ -3217,16 +3726,19 @@
 #ifdef VK_EXT_line_rasterization
 void count_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPipelineRasterizationLineStateCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* toCount,
     size_t* count);
 
@@ -3234,6 +3746,7 @@
 #ifdef VK_EXT_shader_atomic_float
 void count_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* toCount,
     size_t* count);
 
@@ -3245,6 +3758,7 @@
 #ifdef VK_EXT_index_type_uint8
 void count_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* toCount,
     size_t* count);
 
@@ -3252,6 +3766,7 @@
 #ifdef VK_EXT_extended_dynamic_state
 void count_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* toCount,
     size_t* count);
 
@@ -3259,6 +3774,7 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void count_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* toCount,
     size_t* count);
 
@@ -3266,66 +3782,79 @@
 #ifdef VK_NV_device_generated_commands
 void count_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* toCount,
     size_t* count);
 
 void count_VkGraphicsShaderGroupCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkBindShaderGroupIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* toCount,
     size_t* count);
 
 void count_VkBindIndexBufferIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* toCount,
     size_t* count);
 
 void count_VkBindVertexBufferIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* toCount,
     size_t* count);
 
 void count_VkSetStateFlagsIndirectCommandNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* toCount,
     size_t* count);
 
 void count_VkIndirectCommandsStreamNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* toCount,
     size_t* count);
 
 void count_VkIndirectCommandsLayoutTokenNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* toCount,
     size_t* count);
 
 void count_VkIndirectCommandsLayoutCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* toCount,
     size_t* count);
 
 void count_VkGeneratedCommandsInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* toCount,
     size_t* count);
 
 void count_VkGeneratedCommandsMemoryRequirementsInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* toCount,
     size_t* count);
 
@@ -3333,11 +3862,13 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void count_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* toCount,
     size_t* count);
 
@@ -3345,11 +3876,13 @@
 #ifdef VK_QCOM_render_pass_transform
 void count_VkRenderPassTransformBeginInfoQCOM(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* toCount,
     size_t* count);
 
 void count_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* toCount,
     size_t* count);
 
@@ -3357,16 +3890,19 @@
 #ifdef VK_EXT_device_memory_report
 void count_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkDeviceMemoryReportCallbackDataEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* toCount,
     size_t* count);
 
 void count_VkDeviceDeviceMemoryReportCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* toCount,
     size_t* count);
 
@@ -3374,11 +3910,13 @@
 #ifdef VK_EXT_robustness2
 void count_VkPhysicalDeviceRobustness2FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceRobustness2PropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* toCount,
     size_t* count);
 
@@ -3386,16 +3924,19 @@
 #ifdef VK_EXT_custom_border_color
 void count_VkSamplerCustomBorderColorCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* toCount,
     size_t* count);
 
@@ -3405,16 +3946,19 @@
 #ifdef VK_EXT_private_data
 void count_VkPhysicalDevicePrivateDataFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* toCount,
     size_t* count);
 
 void count_VkDevicePrivateDataCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* toCount,
     size_t* count);
 
 void count_VkPrivateDataSlotCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* toCount,
     size_t* count);
 
@@ -3422,6 +3966,7 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void count_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* toCount,
     size_t* count);
 
@@ -3429,11 +3974,13 @@
 #ifdef VK_NV_device_diagnostics_config
 void count_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* toCount,
     size_t* count);
 
 void count_VkDeviceDiagnosticsConfigCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* toCount,
     size_t* count);
 
@@ -3443,16 +3990,19 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void count_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* toCount,
     size_t* count);
 
 void count_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* toCount,
     size_t* count);
 
@@ -3460,11 +4010,13 @@
 #ifdef VK_EXT_fragment_density_map2
 void count_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* toCount,
     size_t* count);
 
@@ -3472,6 +4024,7 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void count_VkCopyCommandTransformInfoQCOM(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* toCount,
     size_t* count);
 
@@ -3479,6 +4032,7 @@
 #ifdef VK_EXT_image_robustness
 void count_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* toCount,
     size_t* count);
 
@@ -3486,6 +4040,7 @@
 #ifdef VK_EXT_4444_formats
 void count_VkPhysicalDevice4444FormatsFeaturesEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* toCount,
     size_t* count);
 
@@ -3493,105 +4048,143 @@
 #ifdef VK_EXT_directfb_surface
 void count_VkDirectFBSurfaceCreateInfoEXT(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* toCount,
     size_t* count);
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void count_VkImportColorBufferGOOGLE(
+    uint32_t featureBits,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* toCount,
+    size_t* count);
+
+void count_VkImportBufferGOOGLE(
+    uint32_t featureBits,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* toCount,
+    size_t* count);
+
+void count_VkImportPhysicalAddressGOOGLE(
+    uint32_t featureBits,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* toCount,
+    size_t* count);
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void count_VkDeviceOrHostAddressKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* toCount,
     size_t* count);
 
 void count_VkDeviceOrHostAddressConstKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureBuildRangeInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureGeometryTrianglesDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureGeometryAabbsDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureGeometryInstancesDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureGeometryDataKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureGeometryKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureBuildGeometryInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkWriteDescriptorSetAccelerationStructureKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureDeviceAddressInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureVersionInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* toCount,
     size_t* count);
 
 void count_VkCopyAccelerationStructureToMemoryInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* toCount,
     size_t* count);
 
 void count_VkCopyMemoryToAccelerationStructureInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* toCount,
     size_t* count);
 
 void count_VkCopyAccelerationStructureInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* toCount,
     size_t* count);
 
 void count_VkAccelerationStructureBuildSizesInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* toCount,
     size_t* count);
 
@@ -3599,36 +4192,43 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void count_VkRayTracingShaderGroupCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkRayTracingPipelineInterfaceCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkRayTracingPipelineCreateInfoKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* toCount,
     size_t* count);
 
 void count_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* toCount,
     size_t* count);
 
 void count_VkStridedDeviceAddressRegionKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* toCount,
     size_t* count);
 
 void count_VkTraceRaysIndirectCommandKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* toCount,
     size_t* count);
 
@@ -3636,6 +4236,7 @@
 #ifdef VK_KHR_ray_query
 void count_VkPhysicalDeviceRayQueryFeaturesKHR(
     uint32_t featureBits,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* toCount,
     size_t* count);
 
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
index ba8cc08..f173eb4 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.cpp
@@ -35,210 +35,261 @@
 
 void deepcopy_extension_struct(
     BumpPool* pool,
+    VkStructureType rootType,
     const void* structExtension,
     void* structExtension_out);
 
 #ifdef VK_VERSION_1_0
 void deepcopy_VkExtent2D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExtent2D* from,
     VkExtent2D* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkExtent3D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExtent3D* from,
     VkExtent3D* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkOffset2D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkOffset2D* from,
     VkOffset2D* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkOffset3D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkOffset3D* from,
     VkOffset3D* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkRect2D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRect2D* from,
     VkRect2D* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkOffset2D(pool, &from->offset, (VkOffset2D*)(&to->offset));
-    deepcopy_VkExtent2D(pool, &from->extent, (VkExtent2D*)(&to->extent));
+    deepcopy_VkOffset2D(pool, rootType, &from->offset, (VkOffset2D*)(&to->offset));
+    deepcopy_VkExtent2D(pool, rootType, &from->extent, (VkExtent2D*)(&to->extent));
 }
 
 void deepcopy_VkBaseInStructure(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBaseInStructure* from,
     VkBaseInStructure* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const VkBaseInStructure*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBaseOutStructure(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBaseOutStructure* from,
     VkBaseOutStructure* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (VkBaseOutStructure*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBufferMemoryBarrier(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* from,
     VkBufferMemoryBarrier* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDispatchIndirectCommand(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* from,
     VkDispatchIndirectCommand* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDrawIndexedIndirectCommand(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* from,
     VkDrawIndexedIndirectCommand* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDrawIndirectCommand(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* from,
     VkDrawIndirectCommand* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkImageSubresourceRange(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSubresourceRange* from,
     VkImageSubresourceRange* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkImageMemoryBarrier(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* from,
     VkImageMemoryBarrier* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkImageSubresourceRange(pool, &from->subresourceRange, (VkImageSubresourceRange*)(&to->subresourceRange));
+    deepcopy_VkImageSubresourceRange(pool, rootType, &from->subresourceRange, (VkImageSubresourceRange*)(&to->subresourceRange));
 }
 
 void deepcopy_VkMemoryBarrier(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryBarrier* from,
     VkMemoryBarrier* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAllocationCallbacks(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAllocationCallbacks* from,
     VkAllocationCallbacks* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->pUserData = nullptr;
     if (from->pUserData)
@@ -249,23 +300,29 @@
 
 void deepcopy_VkApplicationInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkApplicationInfo* from,
     VkApplicationInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pApplicationName = nullptr;
     if (from->pApplicationName)
@@ -281,48 +338,58 @@
 
 void deepcopy_VkFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFormatProperties* from,
     VkFormatProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageFormatProperties* from,
     VkImageFormatProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkExtent3D(pool, &from->maxExtent, (VkExtent3D*)(&to->maxExtent));
+    deepcopy_VkExtent3D(pool, rootType, &from->maxExtent, (VkExtent3D*)(&to->maxExtent));
 }
 
 void deepcopy_VkInstanceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* from,
     VkInstanceCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pApplicationInfo = nullptr;
     if (from->pApplicationInfo)
     {
         to->pApplicationInfo = (VkApplicationInfo*)pool->alloc(sizeof(const VkApplicationInfo));
-        deepcopy_VkApplicationInfo(pool, from->pApplicationInfo, (VkApplicationInfo*)(to->pApplicationInfo));
+        deepcopy_VkApplicationInfo(pool, rootType, from->pApplicationInfo, (VkApplicationInfo*)(to->pApplicationInfo));
     }
     to->ppEnabledLayerNames = nullptr;
     if (from->ppEnabledLayerNames && from->enabledLayerCount)
@@ -338,37 +405,45 @@
 
 void deepcopy_VkMemoryHeap(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryHeap* from,
     VkMemoryHeap* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkMemoryType(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryType* from,
     VkMemoryType* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPhysicalDeviceFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* from,
     VkPhysicalDeviceFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPhysicalDeviceLimits(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* from,
     VkPhysicalDeviceLimits* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     memcpy(to->maxComputeWorkGroupCount, from->maxComputeWorkGroupCount, 3 * sizeof(uint32_t));
     memcpy(to->maxComputeWorkGroupSize, from->maxComputeWorkGroupSize, 3 * sizeof(uint32_t));
@@ -380,72 +455,86 @@
 
 void deepcopy_VkPhysicalDeviceMemoryProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* from,
     VkPhysicalDeviceMemoryProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
     {
-        deepcopy_VkMemoryType(pool, from->memoryTypes + i, (VkMemoryType*)(to->memoryTypes + i));
+        deepcopy_VkMemoryType(pool, rootType, from->memoryTypes + i, (VkMemoryType*)(to->memoryTypes + i));
     }
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
     {
-        deepcopy_VkMemoryHeap(pool, from->memoryHeaps + i, (VkMemoryHeap*)(to->memoryHeaps + i));
+        deepcopy_VkMemoryHeap(pool, rootType, from->memoryHeaps + i, (VkMemoryHeap*)(to->memoryHeaps + i));
     }
 }
 
 void deepcopy_VkPhysicalDeviceSparseProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* from,
     VkPhysicalDeviceSparseProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPhysicalDeviceProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* from,
     VkPhysicalDeviceProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     memcpy(to->deviceName, from->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof(char));
     memcpy(to->pipelineCacheUUID, from->pipelineCacheUUID, VK_UUID_SIZE * sizeof(uint8_t));
-    deepcopy_VkPhysicalDeviceLimits(pool, &from->limits, (VkPhysicalDeviceLimits*)(&to->limits));
-    deepcopy_VkPhysicalDeviceSparseProperties(pool, &from->sparseProperties, (VkPhysicalDeviceSparseProperties*)(&to->sparseProperties));
+    deepcopy_VkPhysicalDeviceLimits(pool, rootType, &from->limits, (VkPhysicalDeviceLimits*)(&to->limits));
+    deepcopy_VkPhysicalDeviceSparseProperties(pool, rootType, &from->sparseProperties, (VkPhysicalDeviceSparseProperties*)(&to->sparseProperties));
 }
 
 void deepcopy_VkQueueFamilyProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* from,
     VkQueueFamilyProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkExtent3D(pool, &from->minImageTransferGranularity, (VkExtent3D*)(&to->minImageTransferGranularity));
+    deepcopy_VkExtent3D(pool, rootType, &from->minImageTransferGranularity, (VkExtent3D*)(&to->minImageTransferGranularity));
 }
 
 void deepcopy_VkDeviceQueueCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* from,
     VkDeviceQueueCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pQueuePriorities = nullptr;
     if (from->pQueuePriorities)
@@ -456,23 +545,29 @@
 
 void deepcopy_VkDeviceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* from,
     VkDeviceCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -483,7 +578,7 @@
             to->queueCreateInfoCount = from->queueCreateInfoCount;
             for (uint32_t i = 0; i < (uint32_t)from->queueCreateInfoCount; ++i)
             {
-                deepcopy_VkDeviceQueueCreateInfo(pool, from->pQueueCreateInfos + i, (VkDeviceQueueCreateInfo*)(to->pQueueCreateInfos + i));
+                deepcopy_VkDeviceQueueCreateInfo(pool, rootType, from->pQueueCreateInfos + i, (VkDeviceQueueCreateInfo*)(to->pQueueCreateInfos + i));
             }
         }
     }
@@ -501,26 +596,30 @@
     if (from->pEnabledFeatures)
     {
         to->pEnabledFeatures = (VkPhysicalDeviceFeatures*)pool->alloc(sizeof(const VkPhysicalDeviceFeatures));
-        deepcopy_VkPhysicalDeviceFeatures(pool, from->pEnabledFeatures, (VkPhysicalDeviceFeatures*)(to->pEnabledFeatures));
+        deepcopy_VkPhysicalDeviceFeatures(pool, rootType, from->pEnabledFeatures, (VkPhysicalDeviceFeatures*)(to->pEnabledFeatures));
     }
 }
 
 void deepcopy_VkExtensionProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExtensionProperties* from,
     VkExtensionProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     memcpy(to->extensionName, from->extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
 }
 
 void deepcopy_VkLayerProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkLayerProperties* from,
     VkLayerProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     memcpy(to->layerName, from->layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     memcpy(to->description, from->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -528,23 +627,29 @@
 
 void deepcopy_VkSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubmitInfo* from,
     VkSubmitInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pWaitSemaphores = nullptr;
     if (from->pWaitSemaphores)
@@ -570,72 +675,90 @@
 
 void deepcopy_VkMappedMemoryRange(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMappedMemoryRange* from,
     VkMappedMemoryRange* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* from,
     VkMemoryAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryRequirements(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryRequirements* from,
     VkMemoryRequirements* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkSparseMemoryBind(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseMemoryBind* from,
     VkSparseMemoryBind* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkSparseBufferMemoryBindInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* from,
     VkSparseBufferMemoryBindInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -646,7 +769,7 @@
             to->bindCount = from->bindCount;
             for (uint32_t i = 0; i < (uint32_t)from->bindCount; ++i)
             {
-                deepcopy_VkSparseMemoryBind(pool, from->pBinds + i, (VkSparseMemoryBind*)(to->pBinds + i));
+                deepcopy_VkSparseMemoryBind(pool, rootType, from->pBinds + i, (VkSparseMemoryBind*)(to->pBinds + i));
             }
         }
     }
@@ -654,10 +777,12 @@
 
 void deepcopy_VkSparseImageOpaqueMemoryBindInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* from,
     VkSparseImageOpaqueMemoryBindInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -668,7 +793,7 @@
             to->bindCount = from->bindCount;
             for (uint32_t i = 0; i < (uint32_t)from->bindCount; ++i)
             {
-                deepcopy_VkSparseMemoryBind(pool, from->pBinds + i, (VkSparseMemoryBind*)(to->pBinds + i));
+                deepcopy_VkSparseMemoryBind(pool, rootType, from->pBinds + i, (VkSparseMemoryBind*)(to->pBinds + i));
             }
         }
     }
@@ -676,31 +801,37 @@
 
 void deepcopy_VkImageSubresource(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSubresource* from,
     VkImageSubresource* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkSparseImageMemoryBind(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* from,
     VkSparseImageMemoryBind* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkImageSubresource(pool, &from->subresource, (VkImageSubresource*)(&to->subresource));
-    deepcopy_VkOffset3D(pool, &from->offset, (VkOffset3D*)(&to->offset));
-    deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
+    deepcopy_VkImageSubresource(pool, rootType, &from->subresource, (VkImageSubresource*)(&to->subresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->offset, (VkOffset3D*)(&to->offset));
+    deepcopy_VkExtent3D(pool, rootType, &from->extent, (VkExtent3D*)(&to->extent));
 }
 
 void deepcopy_VkSparseImageMemoryBindInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* from,
     VkSparseImageMemoryBindInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -711,7 +842,7 @@
             to->bindCount = from->bindCount;
             for (uint32_t i = 0; i < (uint32_t)from->bindCount; ++i)
             {
-                deepcopy_VkSparseImageMemoryBind(pool, from->pBinds + i, (VkSparseImageMemoryBind*)(to->pBinds + i));
+                deepcopy_VkSparseImageMemoryBind(pool, rootType, from->pBinds + i, (VkSparseImageMemoryBind*)(to->pBinds + i));
             }
         }
     }
@@ -719,23 +850,29 @@
 
 void deepcopy_VkBindSparseInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindSparseInfo* from,
     VkBindSparseInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pWaitSemaphores = nullptr;
     if (from->pWaitSemaphores)
@@ -751,7 +888,7 @@
             to->bufferBindCount = from->bufferBindCount;
             for (uint32_t i = 0; i < (uint32_t)from->bufferBindCount; ++i)
             {
-                deepcopy_VkSparseBufferMemoryBindInfo(pool, from->pBufferBinds + i, (VkSparseBufferMemoryBindInfo*)(to->pBufferBinds + i));
+                deepcopy_VkSparseBufferMemoryBindInfo(pool, rootType, from->pBufferBinds + i, (VkSparseBufferMemoryBindInfo*)(to->pBufferBinds + i));
             }
         }
     }
@@ -764,7 +901,7 @@
             to->imageOpaqueBindCount = from->imageOpaqueBindCount;
             for (uint32_t i = 0; i < (uint32_t)from->imageOpaqueBindCount; ++i)
             {
-                deepcopy_VkSparseImageOpaqueMemoryBindInfo(pool, from->pImageOpaqueBinds + i, (VkSparseImageOpaqueMemoryBindInfo*)(to->pImageOpaqueBinds + i));
+                deepcopy_VkSparseImageOpaqueMemoryBindInfo(pool, rootType, from->pImageOpaqueBinds + i, (VkSparseImageOpaqueMemoryBindInfo*)(to->pImageOpaqueBinds + i));
             }
         }
     }
@@ -777,7 +914,7 @@
             to->imageBindCount = from->imageBindCount;
             for (uint32_t i = 0; i < (uint32_t)from->imageBindCount; ++i)
             {
-                deepcopy_VkSparseImageMemoryBindInfo(pool, from->pImageBinds + i, (VkSparseImageMemoryBindInfo*)(to->pImageBinds + i));
+                deepcopy_VkSparseImageMemoryBindInfo(pool, rootType, from->pImageBinds + i, (VkSparseImageMemoryBindInfo*)(to->pImageBinds + i));
             }
         }
     }
@@ -790,131 +927,165 @@
 
 void deepcopy_VkSparseImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* from,
     VkSparseImageFormatProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkExtent3D(pool, &from->imageGranularity, (VkExtent3D*)(&to->imageGranularity));
+    deepcopy_VkExtent3D(pool, rootType, &from->imageGranularity, (VkExtent3D*)(&to->imageGranularity));
 }
 
 void deepcopy_VkSparseImageMemoryRequirements(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* from,
     VkSparseImageMemoryRequirements* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkSparseImageFormatProperties(pool, &from->formatProperties, (VkSparseImageFormatProperties*)(&to->formatProperties));
+    deepcopy_VkSparseImageFormatProperties(pool, rootType, &from->formatProperties, (VkSparseImageFormatProperties*)(&to->formatProperties));
 }
 
 void deepcopy_VkFenceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFenceCreateInfo* from,
     VkFenceCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSemaphoreCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* from,
     VkSemaphoreCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkEventCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkEventCreateInfo* from,
     VkEventCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkQueryPoolCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* from,
     VkQueryPoolCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBufferCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferCreateInfo* from,
     VkBufferCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pQueueFamilyIndices = nullptr;
     if (from->pQueueFamilyIndices)
@@ -925,47 +1096,59 @@
 
 void deepcopy_VkBufferViewCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* from,
     VkBufferViewCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkImageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageCreateInfo* from,
     VkImageCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
+    deepcopy_VkExtent3D(pool, rootType, &from->extent, (VkExtent3D*)(&to->extent));
     to->pQueueFamilyIndices = nullptr;
     if (from->pQueueFamilyIndices)
     {
@@ -975,65 +1158,81 @@
 
 void deepcopy_VkSubresourceLayout(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubresourceLayout* from,
     VkSubresourceLayout* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkComponentMapping(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkComponentMapping* from,
     VkComponentMapping* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkImageViewCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* from,
     VkImageViewCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkComponentMapping(pool, &from->components, (VkComponentMapping*)(&to->components));
-    deepcopy_VkImageSubresourceRange(pool, &from->subresourceRange, (VkImageSubresourceRange*)(&to->subresourceRange));
+    deepcopy_VkComponentMapping(pool, rootType, &from->components, (VkComponentMapping*)(&to->components));
+    deepcopy_VkImageSubresourceRange(pool, rootType, &from->subresourceRange, (VkImageSubresourceRange*)(&to->subresourceRange));
 }
 
 void deepcopy_VkShaderModuleCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* from,
     VkShaderModuleCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pCode = nullptr;
     if (from->pCode)
@@ -1044,23 +1243,29 @@
 
 void deepcopy_VkPipelineCacheCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* from,
     VkPipelineCacheCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pInitialData = nullptr;
     if (from->pInitialData)
@@ -1071,19 +1276,23 @@
 
 void deepcopy_VkSpecializationMapEntry(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* from,
     VkSpecializationMapEntry* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkSpecializationInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSpecializationInfo* from,
     VkSpecializationInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -1094,7 +1303,7 @@
             to->mapEntryCount = from->mapEntryCount;
             for (uint32_t i = 0; i < (uint32_t)from->mapEntryCount; ++i)
             {
-                deepcopy_VkSpecializationMapEntry(pool, from->pMapEntries + i, (VkSpecializationMapEntry*)(to->pMapEntries + i));
+                deepcopy_VkSpecializationMapEntry(pool, rootType, from->pMapEntries + i, (VkSpecializationMapEntry*)(to->pMapEntries + i));
             }
         }
     }
@@ -1107,23 +1316,29 @@
 
 void deepcopy_VkPipelineShaderStageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* from,
     VkPipelineShaderStageCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pName = nullptr;
     if (from->pName)
@@ -1134,70 +1349,86 @@
     if (from->pSpecializationInfo)
     {
         to->pSpecializationInfo = (VkSpecializationInfo*)pool->alloc(sizeof(const VkSpecializationInfo));
-        deepcopy_VkSpecializationInfo(pool, from->pSpecializationInfo, (VkSpecializationInfo*)(to->pSpecializationInfo));
+        deepcopy_VkSpecializationInfo(pool, rootType, from->pSpecializationInfo, (VkSpecializationInfo*)(to->pSpecializationInfo));
     }
 }
 
 void deepcopy_VkComputePipelineCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* from,
     VkComputePipelineCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkPipelineShaderStageCreateInfo(pool, &from->stage, (VkPipelineShaderStageCreateInfo*)(&to->stage));
+    deepcopy_VkPipelineShaderStageCreateInfo(pool, rootType, &from->stage, (VkPipelineShaderStageCreateInfo*)(&to->stage));
 }
 
 void deepcopy_VkVertexInputBindingDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* from,
     VkVertexInputBindingDescription* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkVertexInputAttributeDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* from,
     VkVertexInputAttributeDescription* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineVertexInputStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* from,
     VkPipelineVertexInputStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1208,7 +1439,7 @@
             to->vertexBindingDescriptionCount = from->vertexBindingDescriptionCount;
             for (uint32_t i = 0; i < (uint32_t)from->vertexBindingDescriptionCount; ++i)
             {
-                deepcopy_VkVertexInputBindingDescription(pool, from->pVertexBindingDescriptions + i, (VkVertexInputBindingDescription*)(to->pVertexBindingDescriptions + i));
+                deepcopy_VkVertexInputBindingDescription(pool, rootType, from->pVertexBindingDescriptions + i, (VkVertexInputBindingDescription*)(to->pVertexBindingDescriptions + i));
             }
         }
     }
@@ -1221,7 +1452,7 @@
             to->vertexAttributeDescriptionCount = from->vertexAttributeDescriptionCount;
             for (uint32_t i = 0; i < (uint32_t)from->vertexAttributeDescriptionCount; ++i)
             {
-                deepcopy_VkVertexInputAttributeDescription(pool, from->pVertexAttributeDescriptions + i, (VkVertexInputAttributeDescription*)(to->pVertexAttributeDescriptions + i));
+                deepcopy_VkVertexInputAttributeDescription(pool, rootType, from->pVertexAttributeDescriptions + i, (VkVertexInputAttributeDescription*)(to->pVertexAttributeDescriptions + i));
             }
         }
     }
@@ -1229,76 +1460,96 @@
 
 void deepcopy_VkPipelineInputAssemblyStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* from,
     VkPipelineInputAssemblyStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineTessellationStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* from,
     VkPipelineTessellationStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkViewport(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViewport* from,
     VkViewport* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineViewportStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* from,
     VkPipelineViewportStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1309,7 +1560,7 @@
             to->viewportCount = from->viewportCount;
             for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
             {
-                deepcopy_VkViewport(pool, from->pViewports + i, (VkViewport*)(to->pViewports + i));
+                deepcopy_VkViewport(pool, rootType, from->pViewports + i, (VkViewport*)(to->pViewports + i));
             }
         }
     }
@@ -1322,7 +1573,7 @@
             to->scissorCount = from->scissorCount;
             for (uint32_t i = 0; i < (uint32_t)from->scissorCount; ++i)
             {
-                deepcopy_VkRect2D(pool, from->pScissors + i, (VkRect2D*)(to->pScissors + i));
+                deepcopy_VkRect2D(pool, rootType, from->pScissors + i, (VkRect2D*)(to->pScissors + i));
             }
         }
     }
@@ -1330,45 +1581,57 @@
 
 void deepcopy_VkPipelineRasterizationStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* from,
     VkPipelineRasterizationStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineMultisampleStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* from,
     VkPipelineMultisampleStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pSampleMask = nullptr;
     if (from->pSampleMask)
@@ -1379,65 +1642,81 @@
 
 void deepcopy_VkStencilOpState(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkStencilOpState* from,
     VkStencilOpState* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineDepthStencilStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* from,
     VkPipelineDepthStencilStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkStencilOpState(pool, &from->front, (VkStencilOpState*)(&to->front));
-    deepcopy_VkStencilOpState(pool, &from->back, (VkStencilOpState*)(&to->back));
+    deepcopy_VkStencilOpState(pool, rootType, &from->front, (VkStencilOpState*)(&to->front));
+    deepcopy_VkStencilOpState(pool, rootType, &from->back, (VkStencilOpState*)(&to->back));
 }
 
 void deepcopy_VkPipelineColorBlendAttachmentState(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* from,
     VkPipelineColorBlendAttachmentState* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineColorBlendStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* from,
     VkPipelineColorBlendStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1448,7 +1727,7 @@
             to->attachmentCount = from->attachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->attachmentCount; ++i)
             {
-                deepcopy_VkPipelineColorBlendAttachmentState(pool, from->pAttachments + i, (VkPipelineColorBlendAttachmentState*)(to->pAttachments + i));
+                deepcopy_VkPipelineColorBlendAttachmentState(pool, rootType, from->pAttachments + i, (VkPipelineColorBlendAttachmentState*)(to->pAttachments + i));
             }
         }
     }
@@ -1457,23 +1736,29 @@
 
 void deepcopy_VkPipelineDynamicStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* from,
     VkPipelineDynamicStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDynamicStates = nullptr;
     if (from->pDynamicStates)
@@ -1484,23 +1769,29 @@
 
 void deepcopy_VkGraphicsPipelineCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* from,
     VkGraphicsPipelineCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1511,7 +1802,7 @@
             to->stageCount = from->stageCount;
             for (uint32_t i = 0; i < (uint32_t)from->stageCount; ++i)
             {
-                deepcopy_VkPipelineShaderStageCreateInfo(pool, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
+                deepcopy_VkPipelineShaderStageCreateInfo(pool, rootType, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
             }
         }
     }
@@ -1519,86 +1810,94 @@
     if (from->pVertexInputState)
     {
         to->pVertexInputState = (VkPipelineVertexInputStateCreateInfo*)pool->alloc(sizeof(const VkPipelineVertexInputStateCreateInfo));
-        deepcopy_VkPipelineVertexInputStateCreateInfo(pool, from->pVertexInputState, (VkPipelineVertexInputStateCreateInfo*)(to->pVertexInputState));
+        deepcopy_VkPipelineVertexInputStateCreateInfo(pool, rootType, from->pVertexInputState, (VkPipelineVertexInputStateCreateInfo*)(to->pVertexInputState));
     }
     to->pInputAssemblyState = nullptr;
     if (from->pInputAssemblyState)
     {
         to->pInputAssemblyState = (VkPipelineInputAssemblyStateCreateInfo*)pool->alloc(sizeof(const VkPipelineInputAssemblyStateCreateInfo));
-        deepcopy_VkPipelineInputAssemblyStateCreateInfo(pool, from->pInputAssemblyState, (VkPipelineInputAssemblyStateCreateInfo*)(to->pInputAssemblyState));
+        deepcopy_VkPipelineInputAssemblyStateCreateInfo(pool, rootType, from->pInputAssemblyState, (VkPipelineInputAssemblyStateCreateInfo*)(to->pInputAssemblyState));
     }
     to->pTessellationState = nullptr;
     if (from->pTessellationState)
     {
         to->pTessellationState = (VkPipelineTessellationStateCreateInfo*)pool->alloc(sizeof(const VkPipelineTessellationStateCreateInfo));
-        deepcopy_VkPipelineTessellationStateCreateInfo(pool, from->pTessellationState, (VkPipelineTessellationStateCreateInfo*)(to->pTessellationState));
+        deepcopy_VkPipelineTessellationStateCreateInfo(pool, rootType, from->pTessellationState, (VkPipelineTessellationStateCreateInfo*)(to->pTessellationState));
     }
     to->pViewportState = nullptr;
     if (from->pViewportState)
     {
         to->pViewportState = (VkPipelineViewportStateCreateInfo*)pool->alloc(sizeof(const VkPipelineViewportStateCreateInfo));
-        deepcopy_VkPipelineViewportStateCreateInfo(pool, from->pViewportState, (VkPipelineViewportStateCreateInfo*)(to->pViewportState));
+        deepcopy_VkPipelineViewportStateCreateInfo(pool, rootType, from->pViewportState, (VkPipelineViewportStateCreateInfo*)(to->pViewportState));
     }
     to->pRasterizationState = nullptr;
     if (from->pRasterizationState)
     {
         to->pRasterizationState = (VkPipelineRasterizationStateCreateInfo*)pool->alloc(sizeof(const VkPipelineRasterizationStateCreateInfo));
-        deepcopy_VkPipelineRasterizationStateCreateInfo(pool, from->pRasterizationState, (VkPipelineRasterizationStateCreateInfo*)(to->pRasterizationState));
+        deepcopy_VkPipelineRasterizationStateCreateInfo(pool, rootType, from->pRasterizationState, (VkPipelineRasterizationStateCreateInfo*)(to->pRasterizationState));
     }
     to->pMultisampleState = nullptr;
     if (from->pMultisampleState)
     {
         to->pMultisampleState = (VkPipelineMultisampleStateCreateInfo*)pool->alloc(sizeof(const VkPipelineMultisampleStateCreateInfo));
-        deepcopy_VkPipelineMultisampleStateCreateInfo(pool, from->pMultisampleState, (VkPipelineMultisampleStateCreateInfo*)(to->pMultisampleState));
+        deepcopy_VkPipelineMultisampleStateCreateInfo(pool, rootType, from->pMultisampleState, (VkPipelineMultisampleStateCreateInfo*)(to->pMultisampleState));
     }
     to->pDepthStencilState = nullptr;
     if (from->pDepthStencilState)
     {
         to->pDepthStencilState = (VkPipelineDepthStencilStateCreateInfo*)pool->alloc(sizeof(const VkPipelineDepthStencilStateCreateInfo));
-        deepcopy_VkPipelineDepthStencilStateCreateInfo(pool, from->pDepthStencilState, (VkPipelineDepthStencilStateCreateInfo*)(to->pDepthStencilState));
+        deepcopy_VkPipelineDepthStencilStateCreateInfo(pool, rootType, from->pDepthStencilState, (VkPipelineDepthStencilStateCreateInfo*)(to->pDepthStencilState));
     }
     to->pColorBlendState = nullptr;
     if (from->pColorBlendState)
     {
         to->pColorBlendState = (VkPipelineColorBlendStateCreateInfo*)pool->alloc(sizeof(const VkPipelineColorBlendStateCreateInfo));
-        deepcopy_VkPipelineColorBlendStateCreateInfo(pool, from->pColorBlendState, (VkPipelineColorBlendStateCreateInfo*)(to->pColorBlendState));
+        deepcopy_VkPipelineColorBlendStateCreateInfo(pool, rootType, from->pColorBlendState, (VkPipelineColorBlendStateCreateInfo*)(to->pColorBlendState));
     }
     to->pDynamicState = nullptr;
     if (from->pDynamicState)
     {
         to->pDynamicState = (VkPipelineDynamicStateCreateInfo*)pool->alloc(sizeof(const VkPipelineDynamicStateCreateInfo));
-        deepcopy_VkPipelineDynamicStateCreateInfo(pool, from->pDynamicState, (VkPipelineDynamicStateCreateInfo*)(to->pDynamicState));
+        deepcopy_VkPipelineDynamicStateCreateInfo(pool, rootType, from->pDynamicState, (VkPipelineDynamicStateCreateInfo*)(to->pDynamicState));
     }
 }
 
 void deepcopy_VkPushConstantRange(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPushConstantRange* from,
     VkPushConstantRange* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineLayoutCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* from,
     VkPipelineLayoutCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pSetLayouts = nullptr;
     if (from->pSetLayouts)
@@ -1614,7 +1913,7 @@
             to->pushConstantRangeCount = from->pushConstantRangeCount;
             for (uint32_t i = 0; i < (uint32_t)from->pushConstantRangeCount; ++i)
             {
-                deepcopy_VkPushConstantRange(pool, from->pPushConstantRanges + i, (VkPushConstantRange*)(to->pPushConstantRanges + i));
+                deepcopy_VkPushConstantRange(pool, rootType, from->pPushConstantRanges + i, (VkPushConstantRange*)(to->pPushConstantRanges + i));
             }
         }
     }
@@ -1622,94 +1921,118 @@
 
 void deepcopy_VkSamplerCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* from,
     VkSamplerCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCopyDescriptorSet(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* from,
     VkCopyDescriptorSet* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDescriptorBufferInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* from,
     VkDescriptorBufferInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDescriptorImageInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* from,
     VkDescriptorImageInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDescriptorPoolSize(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* from,
     VkDescriptorPoolSize* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDescriptorPoolCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* from,
     VkDescriptorPoolCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1720,7 +2043,7 @@
             to->poolSizeCount = from->poolSizeCount;
             for (uint32_t i = 0; i < (uint32_t)from->poolSizeCount; ++i)
             {
-                deepcopy_VkDescriptorPoolSize(pool, from->pPoolSizes + i, (VkDescriptorPoolSize*)(to->pPoolSizes + i));
+                deepcopy_VkDescriptorPoolSize(pool, rootType, from->pPoolSizes + i, (VkDescriptorPoolSize*)(to->pPoolSizes + i));
             }
         }
     }
@@ -1728,23 +2051,29 @@
 
 void deepcopy_VkDescriptorSetAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* from,
     VkDescriptorSetAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pSetLayouts = nullptr;
     if (from->pSetLayouts)
@@ -1755,10 +2084,12 @@
 
 void deepcopy_VkDescriptorSetLayoutBinding(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* from,
     VkDescriptorSetLayoutBinding* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->pImmutableSamplers = nullptr;
     if (from->pImmutableSamplers)
@@ -1769,23 +2100,29 @@
 
 void deepcopy_VkDescriptorSetLayoutCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* from,
     VkDescriptorSetLayoutCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1796,7 +2133,7 @@
             to->bindingCount = from->bindingCount;
             for (uint32_t i = 0; i < (uint32_t)from->bindingCount; ++i)
             {
-                deepcopy_VkDescriptorSetLayoutBinding(pool, from->pBindings + i, (VkDescriptorSetLayoutBinding*)(to->pBindings + i));
+                deepcopy_VkDescriptorSetLayoutBinding(pool, rootType, from->pBindings + i, (VkDescriptorSetLayoutBinding*)(to->pBindings + i));
             }
         }
     }
@@ -1804,23 +2141,29 @@
 
 void deepcopy_VkWriteDescriptorSet(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* from,
     VkWriteDescriptorSet* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1831,7 +2174,7 @@
             to->descriptorCount = from->descriptorCount;
             for (uint32_t i = 0; i < (uint32_t)from->descriptorCount; ++i)
             {
-                deepcopy_VkDescriptorImageInfo(pool, from->pImageInfo + i, (VkDescriptorImageInfo*)(to->pImageInfo + i));
+                deepcopy_VkDescriptorImageInfo(pool, rootType, from->pImageInfo + i, (VkDescriptorImageInfo*)(to->pImageInfo + i));
             }
         }
     }
@@ -1844,7 +2187,7 @@
             to->descriptorCount = from->descriptorCount;
             for (uint32_t i = 0; i < (uint32_t)from->descriptorCount; ++i)
             {
-                deepcopy_VkDescriptorBufferInfo(pool, from->pBufferInfo + i, (VkDescriptorBufferInfo*)(to->pBufferInfo + i));
+                deepcopy_VkDescriptorBufferInfo(pool, rootType, from->pBufferInfo + i, (VkDescriptorBufferInfo*)(to->pBufferInfo + i));
             }
         }
     }
@@ -1857,41 +2200,51 @@
 
 void deepcopy_VkAttachmentDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentDescription* from,
     VkAttachmentDescription* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkAttachmentReference(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentReference* from,
     VkAttachmentReference* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkFramebufferCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* from,
     VkFramebufferCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAttachments = nullptr;
     if (from->pAttachments)
@@ -1902,10 +2255,12 @@
 
 void deepcopy_VkSubpassDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDescription* from,
     VkSubpassDescription* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -1916,7 +2271,7 @@
             to->inputAttachmentCount = from->inputAttachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->inputAttachmentCount; ++i)
             {
-                deepcopy_VkAttachmentReference(pool, from->pInputAttachments + i, (VkAttachmentReference*)(to->pInputAttachments + i));
+                deepcopy_VkAttachmentReference(pool, rootType, from->pInputAttachments + i, (VkAttachmentReference*)(to->pInputAttachments + i));
             }
         }
     }
@@ -1929,7 +2284,7 @@
             to->colorAttachmentCount = from->colorAttachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
             {
-                deepcopy_VkAttachmentReference(pool, from->pColorAttachments + i, (VkAttachmentReference*)(to->pColorAttachments + i));
+                deepcopy_VkAttachmentReference(pool, rootType, from->pColorAttachments + i, (VkAttachmentReference*)(to->pColorAttachments + i));
             }
         }
     }
@@ -1942,7 +2297,7 @@
             to->colorAttachmentCount = from->colorAttachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
             {
-                deepcopy_VkAttachmentReference(pool, from->pResolveAttachments + i, (VkAttachmentReference*)(to->pResolveAttachments + i));
+                deepcopy_VkAttachmentReference(pool, rootType, from->pResolveAttachments + i, (VkAttachmentReference*)(to->pResolveAttachments + i));
             }
         }
     }
@@ -1950,7 +2305,7 @@
     if (from->pDepthStencilAttachment)
     {
         to->pDepthStencilAttachment = (VkAttachmentReference*)pool->alloc(sizeof(const VkAttachmentReference));
-        deepcopy_VkAttachmentReference(pool, from->pDepthStencilAttachment, (VkAttachmentReference*)(to->pDepthStencilAttachment));
+        deepcopy_VkAttachmentReference(pool, rootType, from->pDepthStencilAttachment, (VkAttachmentReference*)(to->pDepthStencilAttachment));
     }
     to->pPreserveAttachments = nullptr;
     if (from->pPreserveAttachments)
@@ -1961,32 +2316,40 @@
 
 void deepcopy_VkSubpassDependency(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDependency* from,
     VkSubpassDependency* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkRenderPassCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* from,
     VkRenderPassCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -1997,7 +2360,7 @@
             to->attachmentCount = from->attachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->attachmentCount; ++i)
             {
-                deepcopy_VkAttachmentDescription(pool, from->pAttachments + i, (VkAttachmentDescription*)(to->pAttachments + i));
+                deepcopy_VkAttachmentDescription(pool, rootType, from->pAttachments + i, (VkAttachmentDescription*)(to->pAttachments + i));
             }
         }
     }
@@ -2010,7 +2373,7 @@
             to->subpassCount = from->subpassCount;
             for (uint32_t i = 0; i < (uint32_t)from->subpassCount; ++i)
             {
-                deepcopy_VkSubpassDescription(pool, from->pSubpasses + i, (VkSubpassDescription*)(to->pSubpasses + i));
+                deepcopy_VkSubpassDescription(pool, rootType, from->pSubpasses + i, (VkSubpassDescription*)(to->pSubpasses + i));
             }
         }
     }
@@ -2023,7 +2386,7 @@
             to->dependencyCount = from->dependencyCount;
             for (uint32_t i = 0; i < (uint32_t)from->dependencyCount; ++i)
             {
-                deepcopy_VkSubpassDependency(pool, from->pDependencies + i, (VkSubpassDependency*)(to->pDependencies + i));
+                deepcopy_VkSubpassDependency(pool, rootType, from->pDependencies + i, (VkSubpassDependency*)(to->pDependencies + i));
             }
         }
     }
@@ -2031,134 +2394,166 @@
 
 void deepcopy_VkCommandPoolCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* from,
     VkCommandPoolCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCommandBufferAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* from,
     VkCommandBufferAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCommandBufferInheritanceInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* from,
     VkCommandBufferInheritanceInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCommandBufferBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* from,
     VkCommandBufferBeginInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pInheritanceInfo = nullptr;
     if (from->pInheritanceInfo)
     {
         to->pInheritanceInfo = (VkCommandBufferInheritanceInfo*)pool->alloc(sizeof(const VkCommandBufferInheritanceInfo));
-        deepcopy_VkCommandBufferInheritanceInfo(pool, from->pInheritanceInfo, (VkCommandBufferInheritanceInfo*)(to->pInheritanceInfo));
+        deepcopy_VkCommandBufferInheritanceInfo(pool, rootType, from->pInheritanceInfo, (VkCommandBufferInheritanceInfo*)(to->pInheritanceInfo));
     }
 }
 
 void deepcopy_VkBufferCopy(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferCopy* from,
     VkBufferCopy* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkImageSubresourceLayers(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* from,
     VkImageSubresourceLayers* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkBufferImageCopy(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferImageCopy* from,
     VkBufferImageCopy* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkImageSubresourceLayers(pool, &from->imageSubresource, (VkImageSubresourceLayers*)(&to->imageSubresource));
-    deepcopy_VkOffset3D(pool, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
-    deepcopy_VkExtent3D(pool, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->imageSubresource, (VkImageSubresourceLayers*)(&to->imageSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
+    deepcopy_VkExtent3D(pool, rootType, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
 }
 
 void deepcopy_VkClearColorValue(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearColorValue* from,
     VkClearColorValue* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     memcpy(to->float32, from->float32, 4 * sizeof(float));
     memcpy(to->int32, from->int32, 4 * sizeof(int32_t));
@@ -2167,112 +2562,132 @@
 
 void deepcopy_VkClearDepthStencilValue(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* from,
     VkClearDepthStencilValue* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkClearValue(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearValue* from,
     VkClearValue* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkClearColorValue(pool, &from->color, (VkClearColorValue*)(&to->color));
-    deepcopy_VkClearDepthStencilValue(pool, &from->depthStencil, (VkClearDepthStencilValue*)(&to->depthStencil));
+    deepcopy_VkClearColorValue(pool, rootType, &from->color, (VkClearColorValue*)(&to->color));
+    deepcopy_VkClearDepthStencilValue(pool, rootType, &from->depthStencil, (VkClearDepthStencilValue*)(&to->depthStencil));
 }
 
 void deepcopy_VkClearAttachment(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearAttachment* from,
     VkClearAttachment* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkClearValue(pool, &from->clearValue, (VkClearValue*)(&to->clearValue));
+    deepcopy_VkClearValue(pool, rootType, &from->clearValue, (VkClearValue*)(&to->clearValue));
 }
 
 void deepcopy_VkClearRect(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearRect* from,
     VkClearRect* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkRect2D(pool, &from->rect, (VkRect2D*)(&to->rect));
+    deepcopy_VkRect2D(pool, rootType, &from->rect, (VkRect2D*)(&to->rect));
 }
 
 void deepcopy_VkImageBlit(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageBlit* from,
     VkImageBlit* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        deepcopy_VkOffset3D(pool, from->srcOffsets + i, (VkOffset3D*)(to->srcOffsets + i));
+        deepcopy_VkOffset3D(pool, rootType, from->srcOffsets + i, (VkOffset3D*)(to->srcOffsets + i));
     }
-    deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        deepcopy_VkOffset3D(pool, from->dstOffsets + i, (VkOffset3D*)(to->dstOffsets + i));
+        deepcopy_VkOffset3D(pool, rootType, from->dstOffsets + i, (VkOffset3D*)(to->dstOffsets + i));
     }
 }
 
 void deepcopy_VkImageCopy(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageCopy* from,
     VkImageCopy* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
-    deepcopy_VkOffset3D(pool, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
-    deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
-    deepcopy_VkOffset3D(pool, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
-    deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
+    deepcopy_VkExtent3D(pool, rootType, &from->extent, (VkExtent3D*)(&to->extent));
 }
 
 void deepcopy_VkImageResolve(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageResolve* from,
     VkImageResolve* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
-    deepcopy_VkOffset3D(pool, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
-    deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
-    deepcopy_VkOffset3D(pool, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
-    deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
+    deepcopy_VkExtent3D(pool, rootType, &from->extent, (VkExtent3D*)(&to->extent));
 }
 
 void deepcopy_VkRenderPassBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* from,
     VkRenderPassBeginInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkRect2D(pool, &from->renderArea, (VkRect2D*)(&to->renderArea));
+    deepcopy_VkRect2D(pool, rootType, &from->renderArea, (VkRect2D*)(&to->renderArea));
     if (from)
     {
         to->pClearValues = nullptr;
@@ -2282,7 +2697,7 @@
             to->clearValueCount = from->clearValueCount;
             for (uint32_t i = 0; i < (uint32_t)from->clearValueCount; ++i)
             {
-                deepcopy_VkClearValue(pool, from->pClearValues + i, (VkClearValue*)(to->pClearValues + i));
+                deepcopy_VkClearValue(pool, rootType, from->pClearValues + i, (VkClearValue*)(to->pClearValues + i));
             }
         }
     }
@@ -2292,177 +2707,225 @@
 #ifdef VK_VERSION_1_1
 void deepcopy_VkPhysicalDeviceSubgroupProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* from,
     VkPhysicalDeviceSubgroupProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBindBufferMemoryInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* from,
     VkBindBufferMemoryInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBindImageMemoryInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* from,
     VkBindImageMemoryInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDevice16BitStorageFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* from,
     VkPhysicalDevice16BitStorageFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryDedicatedRequirements(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* from,
     VkMemoryDedicatedRequirements* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryDedicatedAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* from,
     VkMemoryDedicatedAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryAllocateFlagsInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* from,
     VkMemoryAllocateFlagsInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceGroupRenderPassBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* from,
     VkDeviceGroupRenderPassBeginInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -2473,7 +2936,7 @@
             to->deviceRenderAreaCount = from->deviceRenderAreaCount;
             for (uint32_t i = 0; i < (uint32_t)from->deviceRenderAreaCount; ++i)
             {
-                deepcopy_VkRect2D(pool, from->pDeviceRenderAreas + i, (VkRect2D*)(to->pDeviceRenderAreas + i));
+                deepcopy_VkRect2D(pool, rootType, from->pDeviceRenderAreas + i, (VkRect2D*)(to->pDeviceRenderAreas + i));
             }
         }
     }
@@ -2481,45 +2944,57 @@
 
 void deepcopy_VkDeviceGroupCommandBufferBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* from,
     VkDeviceGroupCommandBufferBeginInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceGroupSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* from,
     VkDeviceGroupSubmitInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pWaitSemaphoreDeviceIndices = nullptr;
     if (from->pWaitSemaphoreDeviceIndices)
@@ -2540,45 +3015,57 @@
 
 void deepcopy_VkDeviceGroupBindSparseInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* from,
     VkDeviceGroupBindSparseInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBindBufferMemoryDeviceGroupInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* from,
     VkBindBufferMemoryDeviceGroupInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDeviceIndices = nullptr;
     if (from->pDeviceIndices)
@@ -2589,23 +3076,29 @@
 
 void deepcopy_VkBindImageMemoryDeviceGroupInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* from,
     VkBindImageMemoryDeviceGroupInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDeviceIndices = nullptr;
     if (from->pDeviceIndices)
@@ -2621,7 +3114,7 @@
             to->splitInstanceBindRegionCount = from->splitInstanceBindRegionCount;
             for (uint32_t i = 0; i < (uint32_t)from->splitInstanceBindRegionCount; ++i)
             {
-                deepcopy_VkRect2D(pool, from->pSplitInstanceBindRegions + i, (VkRect2D*)(to->pSplitInstanceBindRegions + i));
+                deepcopy_VkRect2D(pool, rootType, from->pSplitInstanceBindRegions + i, (VkRect2D*)(to->pSplitInstanceBindRegions + i));
             }
         }
     }
@@ -2629,46 +3122,58 @@
 
 void deepcopy_VkPhysicalDeviceGroupProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* from,
     VkPhysicalDeviceGroupProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->physicalDevices, from->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE * sizeof(VkPhysicalDevice));
 }
 
 void deepcopy_VkDeviceGroupDeviceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* from,
     VkDeviceGroupDeviceCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pPhysicalDevices = nullptr;
     if (from->pPhysicalDevices)
@@ -2679,371 +3184,469 @@
 
 void deepcopy_VkBufferMemoryRequirementsInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* from,
     VkBufferMemoryRequirementsInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkImageMemoryRequirementsInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* from,
     VkImageMemoryRequirementsInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkImageSparseMemoryRequirementsInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* from,
     VkImageSparseMemoryRequirementsInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryRequirements2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryRequirements2* from,
     VkMemoryRequirements2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkMemoryRequirements(pool, &from->memoryRequirements, (VkMemoryRequirements*)(&to->memoryRequirements));
+    deepcopy_VkMemoryRequirements(pool, rootType, &from->memoryRequirements, (VkMemoryRequirements*)(&to->memoryRequirements));
 }
 
 void deepcopy_VkSparseImageMemoryRequirements2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* from,
     VkSparseImageMemoryRequirements2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkSparseImageMemoryRequirements(pool, &from->memoryRequirements, (VkSparseImageMemoryRequirements*)(&to->memoryRequirements));
+    deepcopy_VkSparseImageMemoryRequirements(pool, rootType, &from->memoryRequirements, (VkSparseImageMemoryRequirements*)(&to->memoryRequirements));
 }
 
 void deepcopy_VkPhysicalDeviceFeatures2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* from,
     VkPhysicalDeviceFeatures2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkPhysicalDeviceFeatures(pool, &from->features, (VkPhysicalDeviceFeatures*)(&to->features));
+    deepcopy_VkPhysicalDeviceFeatures(pool, rootType, &from->features, (VkPhysicalDeviceFeatures*)(&to->features));
 }
 
 void deepcopy_VkPhysicalDeviceProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* from,
     VkPhysicalDeviceProperties2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkPhysicalDeviceProperties(pool, &from->properties, (VkPhysicalDeviceProperties*)(&to->properties));
+    deepcopy_VkPhysicalDeviceProperties(pool, rootType, &from->properties, (VkPhysicalDeviceProperties*)(&to->properties));
 }
 
 void deepcopy_VkFormatProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFormatProperties2* from,
     VkFormatProperties2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkFormatProperties(pool, &from->formatProperties, (VkFormatProperties*)(&to->formatProperties));
+    deepcopy_VkFormatProperties(pool, rootType, &from->formatProperties, (VkFormatProperties*)(&to->formatProperties));
 }
 
 void deepcopy_VkImageFormatProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageFormatProperties2* from,
     VkImageFormatProperties2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkImageFormatProperties(pool, &from->imageFormatProperties, (VkImageFormatProperties*)(&to->imageFormatProperties));
+    deepcopy_VkImageFormatProperties(pool, rootType, &from->imageFormatProperties, (VkImageFormatProperties*)(&to->imageFormatProperties));
 }
 
 void deepcopy_VkPhysicalDeviceImageFormatInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* from,
     VkPhysicalDeviceImageFormatInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkQueueFamilyProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* from,
     VkQueueFamilyProperties2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkQueueFamilyProperties(pool, &from->queueFamilyProperties, (VkQueueFamilyProperties*)(&to->queueFamilyProperties));
+    deepcopy_VkQueueFamilyProperties(pool, rootType, &from->queueFamilyProperties, (VkQueueFamilyProperties*)(&to->queueFamilyProperties));
 }
 
 void deepcopy_VkPhysicalDeviceMemoryProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* from,
     VkPhysicalDeviceMemoryProperties2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkPhysicalDeviceMemoryProperties(pool, &from->memoryProperties, (VkPhysicalDeviceMemoryProperties*)(&to->memoryProperties));
+    deepcopy_VkPhysicalDeviceMemoryProperties(pool, rootType, &from->memoryProperties, (VkPhysicalDeviceMemoryProperties*)(&to->memoryProperties));
 }
 
 void deepcopy_VkSparseImageFormatProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* from,
     VkSparseImageFormatProperties2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkSparseImageFormatProperties(pool, &from->properties, (VkSparseImageFormatProperties*)(&to->properties));
+    deepcopy_VkSparseImageFormatProperties(pool, rootType, &from->properties, (VkSparseImageFormatProperties*)(&to->properties));
 }
 
 void deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* from,
     VkPhysicalDeviceSparseImageFormatInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDevicePointClippingProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* from,
     VkPhysicalDevicePointClippingProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkInputAttachmentAspectReference(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* from,
     VkInputAttachmentAspectReference* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkRenderPassInputAttachmentAspectCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* from,
     VkRenderPassInputAttachmentAspectCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -3054,7 +3657,7 @@
             to->aspectReferenceCount = from->aspectReferenceCount;
             for (uint32_t i = 0; i < (uint32_t)from->aspectReferenceCount; ++i)
             {
-                deepcopy_VkInputAttachmentAspectReference(pool, from->pAspectReferences + i, (VkInputAttachmentAspectReference*)(to->pAspectReferences + i));
+                deepcopy_VkInputAttachmentAspectReference(pool, rootType, from->pAspectReferences + i, (VkInputAttachmentAspectReference*)(to->pAspectReferences + i));
             }
         }
     }
@@ -3062,67 +3665,85 @@
 
 void deepcopy_VkImageViewUsageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* from,
     VkImageViewUsageCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineTessellationDomainOriginStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* from,
     VkPipelineTessellationDomainOriginStateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkRenderPassMultiviewCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* from,
     VkRenderPassMultiviewCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pViewMasks = nullptr;
     if (from->pViewMasks)
@@ -3143,319 +3764,405 @@
 
 void deepcopy_VkPhysicalDeviceMultiviewFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* from,
     VkPhysicalDeviceMultiviewFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceMultiviewProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* from,
     VkPhysicalDeviceMultiviewProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceVariablePointersFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* from,
     VkPhysicalDeviceVariablePointersFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceProtectedMemoryFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* from,
     VkPhysicalDeviceProtectedMemoryFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceProtectedMemoryProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* from,
     VkPhysicalDeviceProtectedMemoryProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceQueueInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* from,
     VkDeviceQueueInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkProtectedSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* from,
     VkProtectedSubmitInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSamplerYcbcrConversionCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* from,
     VkSamplerYcbcrConversionCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkComponentMapping(pool, &from->components, (VkComponentMapping*)(&to->components));
+    deepcopy_VkComponentMapping(pool, rootType, &from->components, (VkComponentMapping*)(&to->components));
 }
 
 void deepcopy_VkSamplerYcbcrConversionInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* from,
     VkSamplerYcbcrConversionInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBindImagePlaneMemoryInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* from,
     VkBindImagePlaneMemoryInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkImagePlaneMemoryRequirementsInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* from,
     VkImagePlaneMemoryRequirementsInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* from,
     VkPhysicalDeviceSamplerYcbcrConversionFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSamplerYcbcrConversionImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* from,
     VkSamplerYcbcrConversionImageFormatProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDescriptorUpdateTemplateEntry(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* from,
     VkDescriptorUpdateTemplateEntry* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDescriptorUpdateTemplateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* from,
     VkDescriptorUpdateTemplateCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -3466,7 +4173,7 @@
             to->descriptorUpdateEntryCount = from->descriptorUpdateEntryCount;
             for (uint32_t i = 0; i < (uint32_t)from->descriptorUpdateEntryCount; ++i)
             {
-                deepcopy_VkDescriptorUpdateTemplateEntry(pool, from->pDescriptorUpdateEntries + i, (VkDescriptorUpdateTemplateEntry*)(to->pDescriptorUpdateEntries + i));
+                deepcopy_VkDescriptorUpdateTemplateEntry(pool, rootType, from->pDescriptorUpdateEntries + i, (VkDescriptorUpdateTemplateEntry*)(to->pDescriptorUpdateEntries + i));
             }
         }
     }
@@ -3474,122 +4181,154 @@
 
 void deepcopy_VkExternalMemoryProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* from,
     VkExternalMemoryProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPhysicalDeviceExternalImageFormatInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* from,
     VkPhysicalDeviceExternalImageFormatInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExternalImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* from,
     VkExternalImageFormatProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExternalMemoryProperties(pool, &from->externalMemoryProperties, (VkExternalMemoryProperties*)(&to->externalMemoryProperties));
+    deepcopy_VkExternalMemoryProperties(pool, rootType, &from->externalMemoryProperties, (VkExternalMemoryProperties*)(&to->externalMemoryProperties));
 }
 
 void deepcopy_VkPhysicalDeviceExternalBufferInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* from,
     VkPhysicalDeviceExternalBufferInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExternalBufferProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalBufferProperties* from,
     VkExternalBufferProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExternalMemoryProperties(pool, &from->externalMemoryProperties, (VkExternalMemoryProperties*)(&to->externalMemoryProperties));
+    deepcopy_VkExternalMemoryProperties(pool, rootType, &from->externalMemoryProperties, (VkExternalMemoryProperties*)(&to->externalMemoryProperties));
 }
 
 void deepcopy_VkPhysicalDeviceIDProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* from,
     VkPhysicalDeviceIDProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->deviceUUID, from->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     memcpy(to->driverUUID, from->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
@@ -3598,265 +4337,337 @@
 
 void deepcopy_VkExternalMemoryImageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* from,
     VkExternalMemoryImageCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExternalMemoryBufferCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* from,
     VkExternalMemoryBufferCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportMemoryAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* from,
     VkExportMemoryAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceExternalFenceInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* from,
     VkPhysicalDeviceExternalFenceInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExternalFenceProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalFenceProperties* from,
     VkExternalFenceProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportFenceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* from,
     VkExportFenceCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportSemaphoreCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* from,
     VkExportSemaphoreCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* from,
     VkPhysicalDeviceExternalSemaphoreInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExternalSemaphoreProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* from,
     VkExternalSemaphoreProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceMaintenance3Properties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* from,
     VkPhysicalDeviceMaintenance3Properties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDescriptorSetLayoutSupport(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* from,
     VkDescriptorSetLayoutSupport* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceShaderDrawParametersFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* from,
     VkPhysicalDeviceShaderDrawParametersFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -3864,45 +4675,57 @@
 #ifdef VK_VERSION_1_2
 void deepcopy_VkPhysicalDeviceVulkan11Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* from,
     VkPhysicalDeviceVulkan11Features* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceVulkan11Properties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* from,
     VkPhysicalDeviceVulkan11Properties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->deviceUUID, from->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     memcpy(to->driverUUID, from->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
@@ -3911,79 +4734,99 @@
 
 void deepcopy_VkPhysicalDeviceVulkan12Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* from,
     VkPhysicalDeviceVulkan12Features* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkConformanceVersion(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkConformanceVersion* from,
     VkConformanceVersion* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPhysicalDeviceVulkan12Properties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* from,
     VkPhysicalDeviceVulkan12Properties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->driverName, from->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     memcpy(to->driverInfo, from->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
-    deepcopy_VkConformanceVersion(pool, &from->conformanceVersion, (VkConformanceVersion*)(&to->conformanceVersion));
+    deepcopy_VkConformanceVersion(pool, rootType, &from->conformanceVersion, (VkConformanceVersion*)(&to->conformanceVersion));
 }
 
 void deepcopy_VkImageFormatListCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* from,
     VkImageFormatListCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pViewFormats = nullptr;
     if (from->pViewFormats)
@@ -3994,67 +4837,85 @@
 
 void deepcopy_VkAttachmentDescription2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentDescription2* from,
     VkAttachmentDescription2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAttachmentReference2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentReference2* from,
     VkAttachmentReference2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSubpassDescription2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDescription2* from,
     VkSubpassDescription2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -4065,7 +4926,7 @@
             to->inputAttachmentCount = from->inputAttachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->inputAttachmentCount; ++i)
             {
-                deepcopy_VkAttachmentReference2(pool, from->pInputAttachments + i, (VkAttachmentReference2*)(to->pInputAttachments + i));
+                deepcopy_VkAttachmentReference2(pool, rootType, from->pInputAttachments + i, (VkAttachmentReference2*)(to->pInputAttachments + i));
             }
         }
     }
@@ -4078,7 +4939,7 @@
             to->colorAttachmentCount = from->colorAttachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
             {
-                deepcopy_VkAttachmentReference2(pool, from->pColorAttachments + i, (VkAttachmentReference2*)(to->pColorAttachments + i));
+                deepcopy_VkAttachmentReference2(pool, rootType, from->pColorAttachments + i, (VkAttachmentReference2*)(to->pColorAttachments + i));
             }
         }
     }
@@ -4091,7 +4952,7 @@
             to->colorAttachmentCount = from->colorAttachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
             {
-                deepcopy_VkAttachmentReference2(pool, from->pResolveAttachments + i, (VkAttachmentReference2*)(to->pResolveAttachments + i));
+                deepcopy_VkAttachmentReference2(pool, rootType, from->pResolveAttachments + i, (VkAttachmentReference2*)(to->pResolveAttachments + i));
             }
         }
     }
@@ -4099,7 +4960,7 @@
     if (from->pDepthStencilAttachment)
     {
         to->pDepthStencilAttachment = (VkAttachmentReference2*)pool->alloc(sizeof(const VkAttachmentReference2));
-        deepcopy_VkAttachmentReference2(pool, from->pDepthStencilAttachment, (VkAttachmentReference2*)(to->pDepthStencilAttachment));
+        deepcopy_VkAttachmentReference2(pool, rootType, from->pDepthStencilAttachment, (VkAttachmentReference2*)(to->pDepthStencilAttachment));
     }
     to->pPreserveAttachments = nullptr;
     if (from->pPreserveAttachments)
@@ -4110,45 +4971,57 @@
 
 void deepcopy_VkSubpassDependency2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDependency2* from,
     VkSubpassDependency2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkRenderPassCreateInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* from,
     VkRenderPassCreateInfo2* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -4159,7 +5032,7 @@
             to->attachmentCount = from->attachmentCount;
             for (uint32_t i = 0; i < (uint32_t)from->attachmentCount; ++i)
             {
-                deepcopy_VkAttachmentDescription2(pool, from->pAttachments + i, (VkAttachmentDescription2*)(to->pAttachments + i));
+                deepcopy_VkAttachmentDescription2(pool, rootType, from->pAttachments + i, (VkAttachmentDescription2*)(to->pAttachments + i));
             }
         }
     }
@@ -4172,7 +5045,7 @@
             to->subpassCount = from->subpassCount;
             for (uint32_t i = 0; i < (uint32_t)from->subpassCount; ++i)
             {
-                deepcopy_VkSubpassDescription2(pool, from->pSubpasses + i, (VkSubpassDescription2*)(to->pSubpasses + i));
+                deepcopy_VkSubpassDescription2(pool, rootType, from->pSubpasses + i, (VkSubpassDescription2*)(to->pSubpasses + i));
             }
         }
     }
@@ -4185,7 +5058,7 @@
             to->dependencyCount = from->dependencyCount;
             for (uint32_t i = 0; i < (uint32_t)from->dependencyCount; ++i)
             {
-                deepcopy_VkSubpassDependency2(pool, from->pDependencies + i, (VkSubpassDependency2*)(to->pDependencies + i));
+                deepcopy_VkSubpassDependency2(pool, rootType, from->pDependencies + i, (VkSubpassDependency2*)(to->pDependencies + i));
             }
         }
     }
@@ -4198,180 +5071,228 @@
 
 void deepcopy_VkSubpassBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* from,
     VkSubpassBeginInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSubpassEndInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassEndInfo* from,
     VkSubpassEndInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDevice8BitStorageFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* from,
     VkPhysicalDevice8BitStorageFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceDriverProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* from,
     VkPhysicalDeviceDriverProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->driverName, from->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     memcpy(to->driverInfo, from->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
-    deepcopy_VkConformanceVersion(pool, &from->conformanceVersion, (VkConformanceVersion*)(&to->conformanceVersion));
+    deepcopy_VkConformanceVersion(pool, rootType, &from->conformanceVersion, (VkConformanceVersion*)(&to->conformanceVersion));
 }
 
 void deepcopy_VkPhysicalDeviceShaderAtomicInt64Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* from,
     VkPhysicalDeviceShaderAtomicInt64Features* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceShaderFloat16Int8Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* from,
     VkPhysicalDeviceShaderFloat16Int8Features* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceFloatControlsProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* from,
     VkPhysicalDeviceFloatControlsProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* from,
     VkDescriptorSetLayoutBindingFlagsCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pBindingFlags = nullptr;
     if (from->pBindingFlags)
@@ -4382,67 +5303,85 @@
 
 void deepcopy_VkPhysicalDeviceDescriptorIndexingFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* from,
     VkPhysicalDeviceDescriptorIndexingFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceDescriptorIndexingProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* from,
     VkPhysicalDeviceDescriptorIndexingProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* from,
     VkDescriptorSetVariableDescriptorCountAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDescriptorCounts = nullptr;
     if (from->pDescriptorCounts)
@@ -4453,227 +5392,287 @@
 
 void deepcopy_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* from,
     VkDescriptorSetVariableDescriptorCountLayoutSupport* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSubpassDescriptionDepthStencilResolve(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* from,
     VkSubpassDescriptionDepthStencilResolve* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDepthStencilResolveAttachment = nullptr;
     if (from->pDepthStencilResolveAttachment)
     {
         to->pDepthStencilResolveAttachment = (VkAttachmentReference2*)pool->alloc(sizeof(const VkAttachmentReference2));
-        deepcopy_VkAttachmentReference2(pool, from->pDepthStencilResolveAttachment, (VkAttachmentReference2*)(to->pDepthStencilResolveAttachment));
+        deepcopy_VkAttachmentReference2(pool, rootType, from->pDepthStencilResolveAttachment, (VkAttachmentReference2*)(to->pDepthStencilResolveAttachment));
     }
 }
 
 void deepcopy_VkPhysicalDeviceDepthStencilResolveProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* from,
     VkPhysicalDeviceDepthStencilResolveProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceScalarBlockLayoutFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* from,
     VkPhysicalDeviceScalarBlockLayoutFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkImageStencilUsageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* from,
     VkImageStencilUsageCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSamplerReductionModeCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* from,
     VkSamplerReductionModeCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* from,
     VkPhysicalDeviceSamplerFilterMinmaxProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceVulkanMemoryModelFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* from,
     VkPhysicalDeviceVulkanMemoryModelFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceImagelessFramebufferFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* from,
     VkPhysicalDeviceImagelessFramebufferFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkFramebufferAttachmentImageInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* from,
     VkFramebufferAttachmentImageInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pViewFormats = nullptr;
     if (from->pViewFormats)
@@ -4684,23 +5683,29 @@
 
 void deepcopy_VkFramebufferAttachmentsCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* from,
     VkFramebufferAttachmentsCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -4711,7 +5716,7 @@
             to->attachmentImageInfoCount = from->attachmentImageInfoCount;
             for (uint32_t i = 0; i < (uint32_t)from->attachmentImageInfoCount; ++i)
             {
-                deepcopy_VkFramebufferAttachmentImageInfo(pool, from->pAttachmentImageInfos + i, (VkFramebufferAttachmentImageInfo*)(to->pAttachmentImageInfos + i));
+                deepcopy_VkFramebufferAttachmentImageInfo(pool, rootType, from->pAttachmentImageInfos + i, (VkFramebufferAttachmentImageInfo*)(to->pAttachmentImageInfos + i));
             }
         }
     }
@@ -4719,23 +5724,29 @@
 
 void deepcopy_VkRenderPassAttachmentBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* from,
     VkRenderPassAttachmentBeginInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAttachments = nullptr;
     if (from->pAttachments)
@@ -4746,221 +5757,281 @@
 
 void deepcopy_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* from,
     VkPhysicalDeviceUniformBufferStandardLayoutFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* from,
     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* from,
     VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAttachmentReferenceStencilLayout(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* from,
     VkAttachmentReferenceStencilLayout* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAttachmentDescriptionStencilLayout(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* from,
     VkAttachmentDescriptionStencilLayout* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceHostQueryResetFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* from,
     VkPhysicalDeviceHostQueryResetFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceTimelineSemaphoreFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* from,
     VkPhysicalDeviceTimelineSemaphoreFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceTimelineSemaphoreProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* from,
     VkPhysicalDeviceTimelineSemaphoreProperties* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSemaphoreTypeCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* from,
     VkSemaphoreTypeCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkTimelineSemaphoreSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* from,
     VkTimelineSemaphoreSubmitInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pWaitSemaphoreValues = nullptr;
     if (from->pWaitSemaphoreValues)
@@ -4976,23 +6047,29 @@
 
 void deepcopy_VkSemaphoreWaitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* from,
     VkSemaphoreWaitInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pSemaphores = nullptr;
     if (from->pSemaphores)
@@ -5008,133 +6085,169 @@
 
 void deepcopy_VkSemaphoreSignalInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* from,
     VkSemaphoreSignalInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceBufferDeviceAddressFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* from,
     VkPhysicalDeviceBufferDeviceAddressFeatures* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBufferDeviceAddressInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* from,
     VkBufferDeviceAddressInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBufferOpaqueCaptureAddressCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* from,
     VkBufferOpaqueCaptureAddressCreateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryOpaqueCaptureAddressAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* from,
     VkMemoryOpaqueCaptureAddressAllocateInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* from,
     VkDeviceMemoryOpaqueCaptureAddressInfo* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -5142,22 +6255,26 @@
 #ifdef VK_KHR_surface
 void deepcopy_VkSurfaceCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* from,
     VkSurfaceCapabilitiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkExtent2D(pool, &from->currentExtent, (VkExtent2D*)(&to->currentExtent));
-    deepcopy_VkExtent2D(pool, &from->minImageExtent, (VkExtent2D*)(&to->minImageExtent));
-    deepcopy_VkExtent2D(pool, &from->maxImageExtent, (VkExtent2D*)(&to->maxImageExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->currentExtent, (VkExtent2D*)(&to->currentExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->minImageExtent, (VkExtent2D*)(&to->minImageExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxImageExtent, (VkExtent2D*)(&to->maxImageExtent));
 }
 
 void deepcopy_VkSurfaceFormatKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* from,
     VkSurfaceFormatKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
@@ -5165,25 +6282,31 @@
 #ifdef VK_KHR_swapchain
 void deepcopy_VkSwapchainCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* from,
     VkSwapchainCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->imageExtent, (VkExtent2D*)(&to->imageExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->imageExtent, (VkExtent2D*)(&to->imageExtent));
     to->pQueueFamilyIndices = nullptr;
     if (from->pQueueFamilyIndices)
     {
@@ -5193,23 +6316,29 @@
 
 void deepcopy_VkPresentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentInfoKHR* from,
     VkPresentInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pWaitSemaphores = nullptr;
     if (from->pWaitSemaphores)
@@ -5235,112 +6364,142 @@
 
 void deepcopy_VkImageSwapchainCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* from,
     VkImageSwapchainCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBindImageMemorySwapchainInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* from,
     VkBindImageMemorySwapchainInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAcquireNextImageInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* from,
     VkAcquireNextImageInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceGroupPresentCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* from,
     VkDeviceGroupPresentCapabilitiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->presentMask, from->presentMask, VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t));
 }
 
 void deepcopy_VkDeviceGroupPresentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* from,
     VkDeviceGroupPresentInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDeviceMasks = nullptr;
     if (from->pDeviceMasks)
@@ -5351,23 +6510,29 @@
 
 void deepcopy_VkDeviceGroupSwapchainCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* from,
     VkDeviceGroupSwapchainCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -5375,159 +6540,193 @@
 #ifdef VK_KHR_display
 void deepcopy_VkDisplayModeParametersKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* from,
     VkDisplayModeParametersKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkExtent2D(pool, &from->visibleRegion, (VkExtent2D*)(&to->visibleRegion));
+    deepcopy_VkExtent2D(pool, rootType, &from->visibleRegion, (VkExtent2D*)(&to->visibleRegion));
 }
 
 void deepcopy_VkDisplayModeCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* from,
     VkDisplayModeCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDisplayModeParametersKHR(pool, &from->parameters, (VkDisplayModeParametersKHR*)(&to->parameters));
+    deepcopy_VkDisplayModeParametersKHR(pool, rootType, &from->parameters, (VkDisplayModeParametersKHR*)(&to->parameters));
 }
 
 void deepcopy_VkDisplayModePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* from,
     VkDisplayModePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkDisplayModeParametersKHR(pool, &from->parameters, (VkDisplayModeParametersKHR*)(&to->parameters));
+    deepcopy_VkDisplayModeParametersKHR(pool, rootType, &from->parameters, (VkDisplayModeParametersKHR*)(&to->parameters));
 }
 
 void deepcopy_VkDisplayPlaneCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* from,
     VkDisplayPlaneCapabilitiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkOffset2D(pool, &from->minSrcPosition, (VkOffset2D*)(&to->minSrcPosition));
-    deepcopy_VkOffset2D(pool, &from->maxSrcPosition, (VkOffset2D*)(&to->maxSrcPosition));
-    deepcopy_VkExtent2D(pool, &from->minSrcExtent, (VkExtent2D*)(&to->minSrcExtent));
-    deepcopy_VkExtent2D(pool, &from->maxSrcExtent, (VkExtent2D*)(&to->maxSrcExtent));
-    deepcopy_VkOffset2D(pool, &from->minDstPosition, (VkOffset2D*)(&to->minDstPosition));
-    deepcopy_VkOffset2D(pool, &from->maxDstPosition, (VkOffset2D*)(&to->maxDstPosition));
-    deepcopy_VkExtent2D(pool, &from->minDstExtent, (VkExtent2D*)(&to->minDstExtent));
-    deepcopy_VkExtent2D(pool, &from->maxDstExtent, (VkExtent2D*)(&to->maxDstExtent));
+    deepcopy_VkOffset2D(pool, rootType, &from->minSrcPosition, (VkOffset2D*)(&to->minSrcPosition));
+    deepcopy_VkOffset2D(pool, rootType, &from->maxSrcPosition, (VkOffset2D*)(&to->maxSrcPosition));
+    deepcopy_VkExtent2D(pool, rootType, &from->minSrcExtent, (VkExtent2D*)(&to->minSrcExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxSrcExtent, (VkExtent2D*)(&to->maxSrcExtent));
+    deepcopy_VkOffset2D(pool, rootType, &from->minDstPosition, (VkOffset2D*)(&to->minDstPosition));
+    deepcopy_VkOffset2D(pool, rootType, &from->maxDstPosition, (VkOffset2D*)(&to->maxDstPosition));
+    deepcopy_VkExtent2D(pool, rootType, &from->minDstExtent, (VkExtent2D*)(&to->minDstExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxDstExtent, (VkExtent2D*)(&to->maxDstExtent));
 }
 
 void deepcopy_VkDisplayPlanePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* from,
     VkDisplayPlanePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDisplayPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* from,
     VkDisplayPropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->displayName = nullptr;
     if (from->displayName)
     {
         to->displayName = pool->strDup(from->displayName);
     }
-    deepcopy_VkExtent2D(pool, &from->physicalDimensions, (VkExtent2D*)(&to->physicalDimensions));
-    deepcopy_VkExtent2D(pool, &from->physicalResolution, (VkExtent2D*)(&to->physicalResolution));
+    deepcopy_VkExtent2D(pool, rootType, &from->physicalDimensions, (VkExtent2D*)(&to->physicalDimensions));
+    deepcopy_VkExtent2D(pool, rootType, &from->physicalResolution, (VkExtent2D*)(&to->physicalResolution));
 }
 
 void deepcopy_VkDisplaySurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* from,
     VkDisplaySurfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->imageExtent, (VkExtent2D*)(&to->imageExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->imageExtent, (VkExtent2D*)(&to->imageExtent));
 }
 
 #endif
 #ifdef VK_KHR_display_swapchain
 void deepcopy_VkDisplayPresentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* from,
     VkDisplayPresentInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkRect2D(pool, &from->srcRect, (VkRect2D*)(&to->srcRect));
-    deepcopy_VkRect2D(pool, &from->dstRect, (VkRect2D*)(&to->dstRect));
+    deepcopy_VkRect2D(pool, rootType, &from->srcRect, (VkRect2D*)(&to->srcRect));
+    deepcopy_VkRect2D(pool, rootType, &from->dstRect, (VkRect2D*)(&to->dstRect));
 }
 
 #endif
 #ifdef VK_KHR_xlib_surface
 void deepcopy_VkXlibSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* from,
     VkXlibSurfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->dpy = nullptr;
     if (from->dpy)
@@ -5540,23 +6739,29 @@
 #ifdef VK_KHR_xcb_surface
 void deepcopy_VkXcbSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* from,
     VkXcbSurfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->connection = nullptr;
     if (from->connection)
@@ -5569,23 +6774,29 @@
 #ifdef VK_KHR_wayland_surface
 void deepcopy_VkWaylandSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* from,
     VkWaylandSurfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->display = nullptr;
     if (from->display)
@@ -5603,23 +6814,29 @@
 #ifdef VK_KHR_android_surface
 void deepcopy_VkAndroidSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* from,
     VkAndroidSurfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->window = nullptr;
     if (from->window)
@@ -5632,23 +6849,29 @@
 #ifdef VK_KHR_win32_surface
 void deepcopy_VkWin32SurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* from,
     VkWin32SurfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -5674,45 +6897,57 @@
 #ifdef VK_KHR_external_memory_win32
 void deepcopy_VkImportMemoryWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* from,
     VkImportMemoryWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportMemoryWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* from,
     VkExportMemoryWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAttributes = nullptr;
     if (from->pAttributes)
@@ -5723,45 +6958,57 @@
 
 void deepcopy_VkMemoryWin32HandlePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* from,
     VkMemoryWin32HandlePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryGetWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* from,
     VkMemoryGetWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -5769,67 +7016,85 @@
 #ifdef VK_KHR_external_memory_fd
 void deepcopy_VkImportMemoryFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* from,
     VkImportMemoryFdInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryFdPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* from,
     VkMemoryFdPropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryGetFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* from,
     VkMemoryGetFdInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -5837,23 +7102,29 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void deepcopy_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* from,
     VkWin32KeyedMutexAcquireReleaseInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAcquireSyncs = nullptr;
     if (from->pAcquireSyncs)
@@ -5890,45 +7161,57 @@
 #ifdef VK_KHR_external_semaphore_win32
 void deepcopy_VkImportSemaphoreWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* from,
     VkImportSemaphoreWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportSemaphoreWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* from,
     VkExportSemaphoreWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAttributes = nullptr;
     if (from->pAttributes)
@@ -5939,23 +7222,29 @@
 
 void deepcopy_VkD3D12FenceSubmitInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* from,
     VkD3D12FenceSubmitInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pWaitSemaphoreValues = nullptr;
     if (from->pWaitSemaphoreValues)
@@ -5971,23 +7260,29 @@
 
 void deepcopy_VkSemaphoreGetWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* from,
     VkSemaphoreGetWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -5995,45 +7290,57 @@
 #ifdef VK_KHR_external_semaphore_fd
 void deepcopy_VkImportSemaphoreFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* from,
     VkImportSemaphoreFdInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSemaphoreGetFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* from,
     VkSemaphoreGetFdInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6041,23 +7348,29 @@
 #ifdef VK_KHR_push_descriptor
 void deepcopy_VkPhysicalDevicePushDescriptorPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* from,
     VkPhysicalDevicePushDescriptorPropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6069,21 +7382,25 @@
 #ifdef VK_KHR_incremental_present
 void deepcopy_VkRectLayerKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRectLayerKHR* from,
     VkRectLayerKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkOffset2D(pool, &from->offset, (VkOffset2D*)(&to->offset));
-    deepcopy_VkExtent2D(pool, &from->extent, (VkExtent2D*)(&to->extent));
+    deepcopy_VkOffset2D(pool, rootType, &from->offset, (VkOffset2D*)(&to->offset));
+    deepcopy_VkExtent2D(pool, rootType, &from->extent, (VkExtent2D*)(&to->extent));
 }
 
 void deepcopy_VkPresentRegionKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentRegionKHR* from,
     VkPresentRegionKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -6094,7 +7411,7 @@
             to->rectangleCount = from->rectangleCount;
             for (uint32_t i = 0; i < (uint32_t)from->rectangleCount; ++i)
             {
-                deepcopy_VkRectLayerKHR(pool, from->pRectangles + i, (VkRectLayerKHR*)(to->pRectangles + i));
+                deepcopy_VkRectLayerKHR(pool, rootType, from->pRectangles + i, (VkRectLayerKHR*)(to->pRectangles + i));
             }
         }
     }
@@ -6102,23 +7419,29 @@
 
 void deepcopy_VkPresentRegionsKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* from,
     VkPresentRegionsKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -6129,7 +7452,7 @@
             to->swapchainCount = from->swapchainCount;
             for (uint32_t i = 0; i < (uint32_t)from->swapchainCount; ++i)
             {
-                deepcopy_VkPresentRegionKHR(pool, from->pRegions + i, (VkPresentRegionKHR*)(to->pRegions + i));
+                deepcopy_VkPresentRegionKHR(pool, rootType, from->pRegions + i, (VkPresentRegionKHR*)(to->pRegions + i));
             }
         }
     }
@@ -6145,23 +7468,29 @@
 #ifdef VK_KHR_shared_presentable_image
 void deepcopy_VkSharedPresentSurfaceCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* from,
     VkSharedPresentSurfaceCapabilitiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6173,45 +7502,57 @@
 #ifdef VK_KHR_external_fence_win32
 void deepcopy_VkImportFenceWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* from,
     VkImportFenceWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportFenceWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* from,
     VkExportFenceWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAttributes = nullptr;
     if (from->pAttributes)
@@ -6222,23 +7563,29 @@
 
 void deepcopy_VkFenceGetWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* from,
     VkFenceGetWin32HandleInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6246,45 +7593,57 @@
 #ifdef VK_KHR_external_fence_fd
 void deepcopy_VkImportFenceFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* from,
     VkImportFenceFdInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkFenceGetFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* from,
     VkFenceGetFdInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6292,90 +7651,114 @@
 #ifdef VK_KHR_performance_query
 void deepcopy_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* from,
     VkPhysicalDevicePerformanceQueryFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* from,
     VkPhysicalDevicePerformanceQueryPropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPerformanceCounterKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* from,
     VkPerformanceCounterKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->uuid, from->uuid, VK_UUID_SIZE * sizeof(uint8_t));
 }
 
 void deepcopy_VkPerformanceCounterDescriptionKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* from,
     VkPerformanceCounterDescriptionKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->name, from->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     memcpy(to->category, from->category, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -6384,23 +7767,29 @@
 
 void deepcopy_VkQueryPoolPerformanceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* from,
     VkQueryPoolPerformanceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pCounterIndices = nullptr;
     if (from->pCounterIndices)
@@ -6411,54 +7800,68 @@
 
 void deepcopy_VkPerformanceCounterResultKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* from,
     VkPerformanceCounterResultKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkAcquireProfilingLockInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* from,
     VkAcquireProfilingLockInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPerformanceQuerySubmitInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* from,
     VkPerformanceQuerySubmitInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6468,70 +7871,88 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* from,
     VkPhysicalDeviceSurfaceInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSurfaceCapabilities2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* from,
     VkSurfaceCapabilities2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkSurfaceCapabilitiesKHR(pool, &from->surfaceCapabilities, (VkSurfaceCapabilitiesKHR*)(&to->surfaceCapabilities));
+    deepcopy_VkSurfaceCapabilitiesKHR(pool, rootType, &from->surfaceCapabilities, (VkSurfaceCapabilitiesKHR*)(&to->surfaceCapabilities));
 }
 
 void deepcopy_VkSurfaceFormat2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* from,
     VkSurfaceFormat2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkSurfaceFormatKHR(pool, &from->surfaceFormat, (VkSurfaceFormatKHR*)(&to->surfaceFormat));
+    deepcopy_VkSurfaceFormatKHR(pool, rootType, &from->surfaceFormat, (VkSurfaceFormatKHR*)(&to->surfaceFormat));
 }
 
 #endif
@@ -6540,116 +7961,146 @@
 #ifdef VK_KHR_get_display_properties2
 void deepcopy_VkDisplayProperties2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* from,
     VkDisplayProperties2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDisplayPropertiesKHR(pool, &from->displayProperties, (VkDisplayPropertiesKHR*)(&to->displayProperties));
+    deepcopy_VkDisplayPropertiesKHR(pool, rootType, &from->displayProperties, (VkDisplayPropertiesKHR*)(&to->displayProperties));
 }
 
 void deepcopy_VkDisplayPlaneProperties2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* from,
     VkDisplayPlaneProperties2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDisplayPlanePropertiesKHR(pool, &from->displayPlaneProperties, (VkDisplayPlanePropertiesKHR*)(&to->displayPlaneProperties));
+    deepcopy_VkDisplayPlanePropertiesKHR(pool, rootType, &from->displayPlaneProperties, (VkDisplayPlanePropertiesKHR*)(&to->displayPlaneProperties));
 }
 
 void deepcopy_VkDisplayModeProperties2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* from,
     VkDisplayModeProperties2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDisplayModePropertiesKHR(pool, &from->displayModeProperties, (VkDisplayModePropertiesKHR*)(&to->displayModeProperties));
+    deepcopy_VkDisplayModePropertiesKHR(pool, rootType, &from->displayModeProperties, (VkDisplayModePropertiesKHR*)(&to->displayModeProperties));
 }
 
 void deepcopy_VkDisplayPlaneInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* from,
     VkDisplayPlaneInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDisplayPlaneCapabilities2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* from,
     VkDisplayPlaneCapabilities2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDisplayPlaneCapabilitiesKHR(pool, &from->capabilities, (VkDisplayPlaneCapabilitiesKHR*)(&to->capabilities));
+    deepcopy_VkDisplayPlaneCapabilitiesKHR(pool, rootType, &from->capabilities, (VkDisplayPlaneCapabilitiesKHR*)(&to->capabilities));
 }
 
 #endif
@@ -6670,45 +8121,57 @@
 #ifdef VK_KHR_portability_subset
 void deepcopy_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* from,
     VkPhysicalDevicePortabilitySubsetFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* from,
     VkPhysicalDevicePortabilitySubsetPropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6726,23 +8189,29 @@
 #ifdef VK_KHR_shader_clock
 void deepcopy_VkPhysicalDeviceShaderClockFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* from,
     VkPhysicalDeviceShaderClockFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6762,23 +8231,29 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void deepcopy_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* from,
     VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6786,125 +8261,155 @@
 #ifdef VK_KHR_fragment_shading_rate
 void deepcopy_VkFragmentShadingRateAttachmentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* from,
     VkFragmentShadingRateAttachmentInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pFragmentShadingRateAttachment = nullptr;
     if (from->pFragmentShadingRateAttachment)
     {
         to->pFragmentShadingRateAttachment = (VkAttachmentReference2*)pool->alloc(sizeof(const VkAttachmentReference2));
-        deepcopy_VkAttachmentReference2(pool, from->pFragmentShadingRateAttachment, (VkAttachmentReference2*)(to->pFragmentShadingRateAttachment));
+        deepcopy_VkAttachmentReference2(pool, rootType, from->pFragmentShadingRateAttachment, (VkAttachmentReference2*)(to->pFragmentShadingRateAttachment));
     }
-    deepcopy_VkExtent2D(pool, &from->shadingRateAttachmentTexelSize, (VkExtent2D*)(&to->shadingRateAttachmentTexelSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->shadingRateAttachmentTexelSize, (VkExtent2D*)(&to->shadingRateAttachmentTexelSize));
 }
 
 void deepcopy_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* from,
     VkPipelineFragmentShadingRateStateCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->fragmentSize, (VkExtent2D*)(&to->fragmentSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->fragmentSize, (VkExtent2D*)(&to->fragmentSize));
     memcpy(to->combinerOps, from->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
 }
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* from,
     VkPhysicalDeviceFragmentShadingRateFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* from,
     VkPhysicalDeviceFragmentShadingRatePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->minFragmentShadingRateAttachmentTexelSize, (VkExtent2D*)(&to->minFragmentShadingRateAttachmentTexelSize));
-    deepcopy_VkExtent2D(pool, &from->maxFragmentShadingRateAttachmentTexelSize, (VkExtent2D*)(&to->maxFragmentShadingRateAttachmentTexelSize));
-    deepcopy_VkExtent2D(pool, &from->maxFragmentSize, (VkExtent2D*)(&to->maxFragmentSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->minFragmentShadingRateAttachmentTexelSize, (VkExtent2D*)(&to->minFragmentShadingRateAttachmentTexelSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxFragmentShadingRateAttachmentTexelSize, (VkExtent2D*)(&to->maxFragmentShadingRateAttachmentTexelSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxFragmentSize, (VkExtent2D*)(&to->maxFragmentSize));
 }
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRateKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* from,
     VkPhysicalDeviceFragmentShadingRateKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->fragmentSize, (VkExtent2D*)(&to->fragmentSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->fragmentSize, (VkExtent2D*)(&to->fragmentSize));
 }
 
 #endif
@@ -6913,23 +8418,29 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void deepcopy_VkSurfaceProtectedCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* from,
     VkSurfaceProtectedCapabilitiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -6945,67 +8456,85 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void deepcopy_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* from,
     VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* from,
     VkPipelineInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineExecutablePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* from,
     VkPipelineExecutablePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->name, from->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     memcpy(to->description, from->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -7013,79 +8542,99 @@
 
 void deepcopy_VkPipelineExecutableInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* from,
     VkPipelineExecutableInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineExecutableStatisticValueKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* from,
     VkPipelineExecutableStatisticValueKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineExecutableStatisticKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* from,
     VkPipelineExecutableStatisticKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->name, from->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     memcpy(to->description, from->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
-    deepcopy_VkPipelineExecutableStatisticValueKHR(pool, &from->value, (VkPipelineExecutableStatisticValueKHR*)(&to->value));
+    deepcopy_VkPipelineExecutableStatisticValueKHR(pool, rootType, &from->value, (VkPipelineExecutableStatisticValueKHR*)(&to->value));
 }
 
 void deepcopy_VkPipelineExecutableInternalRepresentationKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* from,
     VkPipelineExecutableInternalRepresentationKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->name, from->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     memcpy(to->description, from->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -7100,23 +8649,29 @@
 #ifdef VK_KHR_pipeline_library
 void deepcopy_VkPipelineLibraryCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* from,
     VkPipelineLibraryCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pLibraries = nullptr;
     if (from->pLibraries)
@@ -7131,45 +8686,57 @@
 #ifdef VK_KHR_copy_commands2
 void deepcopy_VkBufferCopy2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* from,
     VkBufferCopy2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCopyBufferInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* from,
     VkCopyBufferInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -7180,7 +8747,7 @@
             to->regionCount = from->regionCount;
             for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i)
             {
-                deepcopy_VkBufferCopy2KHR(pool, from->pRegions + i, (VkBufferCopy2KHR*)(to->pRegions + i));
+                deepcopy_VkBufferCopy2KHR(pool, rootType, from->pRegions + i, (VkBufferCopy2KHR*)(to->pRegions + i));
             }
         }
     }
@@ -7188,50 +8755,62 @@
 
 void deepcopy_VkImageCopy2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageCopy2KHR* from,
     VkImageCopy2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
-    deepcopy_VkOffset3D(pool, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
-    deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
-    deepcopy_VkOffset3D(pool, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
-    deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
+    deepcopy_VkExtent3D(pool, rootType, &from->extent, (VkExtent3D*)(&to->extent));
 }
 
 void deepcopy_VkCopyImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* from,
     VkCopyImageInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -7242,7 +8821,7 @@
             to->regionCount = from->regionCount;
             for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i)
             {
-                deepcopy_VkImageCopy2KHR(pool, from->pRegions + i, (VkImageCopy2KHR*)(to->pRegions + i));
+                deepcopy_VkImageCopy2KHR(pool, rootType, from->pRegions + i, (VkImageCopy2KHR*)(to->pRegions + i));
             }
         }
     }
@@ -7250,48 +8829,60 @@
 
 void deepcopy_VkBufferImageCopy2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* from,
     VkBufferImageCopy2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkImageSubresourceLayers(pool, &from->imageSubresource, (VkImageSubresourceLayers*)(&to->imageSubresource));
-    deepcopy_VkOffset3D(pool, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
-    deepcopy_VkExtent3D(pool, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->imageSubresource, (VkImageSubresourceLayers*)(&to->imageSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
+    deepcopy_VkExtent3D(pool, rootType, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
 }
 
 void deepcopy_VkCopyBufferToImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* from,
     VkCopyBufferToImageInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -7302,7 +8893,7 @@
             to->regionCount = from->regionCount;
             for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i)
             {
-                deepcopy_VkBufferImageCopy2KHR(pool, from->pRegions + i, (VkBufferImageCopy2KHR*)(to->pRegions + i));
+                deepcopy_VkBufferImageCopy2KHR(pool, rootType, from->pRegions + i, (VkBufferImageCopy2KHR*)(to->pRegions + i));
             }
         }
     }
@@ -7310,23 +8901,29 @@
 
 void deepcopy_VkCopyImageToBufferInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* from,
     VkCopyImageToBufferInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -7337,7 +8934,7 @@
             to->regionCount = from->regionCount;
             for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i)
             {
-                deepcopy_VkBufferImageCopy2KHR(pool, from->pRegions + i, (VkBufferImageCopy2KHR*)(to->pRegions + i));
+                deepcopy_VkBufferImageCopy2KHR(pool, rootType, from->pRegions + i, (VkBufferImageCopy2KHR*)(to->pRegions + i));
             }
         }
     }
@@ -7345,55 +8942,67 @@
 
 void deepcopy_VkImageBlit2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageBlit2KHR* from,
     VkImageBlit2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        deepcopy_VkOffset3D(pool, from->srcOffsets + i, (VkOffset3D*)(to->srcOffsets + i));
+        deepcopy_VkOffset3D(pool, rootType, from->srcOffsets + i, (VkOffset3D*)(to->srcOffsets + i));
     }
-    deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        deepcopy_VkOffset3D(pool, from->dstOffsets + i, (VkOffset3D*)(to->dstOffsets + i));
+        deepcopy_VkOffset3D(pool, rootType, from->dstOffsets + i, (VkOffset3D*)(to->dstOffsets + i));
     }
 }
 
 void deepcopy_VkBlitImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* from,
     VkBlitImageInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -7404,7 +9013,7 @@
             to->regionCount = from->regionCount;
             for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i)
             {
-                deepcopy_VkImageBlit2KHR(pool, from->pRegions + i, (VkImageBlit2KHR*)(to->pRegions + i));
+                deepcopy_VkImageBlit2KHR(pool, rootType, from->pRegions + i, (VkImageBlit2KHR*)(to->pRegions + i));
             }
         }
     }
@@ -7412,50 +9021,62 @@
 
 void deepcopy_VkImageResolve2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageResolve2KHR* from,
     VkImageResolve2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
-    deepcopy_VkOffset3D(pool, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
-    deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
-    deepcopy_VkOffset3D(pool, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
-    deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
+    deepcopy_VkImageSubresourceLayers(pool, rootType, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
+    deepcopy_VkOffset3D(pool, rootType, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
+    deepcopy_VkExtent3D(pool, rootType, &from->extent, (VkExtent3D*)(&to->extent));
 }
 
 void deepcopy_VkResolveImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* from,
     VkResolveImageInfo2KHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -7466,7 +9087,7 @@
             to->regionCount = from->regionCount;
             for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i)
             {
-                deepcopy_VkImageResolve2KHR(pool, from->pRegions + i, (VkImageResolve2KHR*)(to->pRegions + i));
+                deepcopy_VkImageResolve2KHR(pool, rootType, from->pRegions + i, (VkImageResolve2KHR*)(to->pRegions + i));
             }
         }
     }
@@ -7476,23 +9097,29 @@
 #ifdef VK_ANDROID_native_buffer
 void deepcopy_VkNativeBufferANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* from,
     VkNativeBufferANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->handle = nullptr;
     if (from->handle)
@@ -7505,23 +9132,29 @@
 #ifdef VK_EXT_debug_report
 void deepcopy_VkDebugReportCallbackCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* from,
     VkDebugReportCallbackCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pUserData = nullptr;
     if (from->pUserData)
@@ -7540,23 +9173,29 @@
 #ifdef VK_AMD_rasterization_order
 void deepcopy_VkPipelineRasterizationStateRasterizationOrderAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* from,
     VkPipelineRasterizationStateRasterizationOrderAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7568,23 +9207,29 @@
 #ifdef VK_EXT_debug_marker
 void deepcopy_VkDebugMarkerObjectNameInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* from,
     VkDebugMarkerObjectNameInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pObjectName = nullptr;
     if (from->pObjectName)
@@ -7595,23 +9240,29 @@
 
 void deepcopy_VkDebugMarkerObjectTagInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* from,
     VkDebugMarkerObjectTagInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pTag = nullptr;
     if (from->pTag)
@@ -7622,23 +9273,29 @@
 
 void deepcopy_VkDebugMarkerMarkerInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* from,
     VkDebugMarkerMarkerInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pMarkerName = nullptr;
     if (from->pMarkerName)
@@ -7654,67 +9311,85 @@
 #ifdef VK_NV_dedicated_allocation
 void deepcopy_VkDedicatedAllocationImageCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* from,
     VkDedicatedAllocationImageCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDedicatedAllocationBufferCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* from,
     VkDedicatedAllocationBufferCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDedicatedAllocationMemoryAllocateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* from,
     VkDedicatedAllocationMemoryAllocateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7722,67 +9397,85 @@
 #ifdef VK_EXT_transform_feedback
 void deepcopy_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* from,
     VkPhysicalDeviceTransformFeedbackFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* from,
     VkPhysicalDeviceTransformFeedbackPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineRasterizationStateStreamCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* from,
     VkPipelineRasterizationStateStreamCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7790,45 +9483,57 @@
 #ifdef VK_NVX_image_view_handle
 void deepcopy_VkImageViewHandleInfoNVX(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* from,
     VkImageViewHandleInfoNVX* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkImageViewAddressPropertiesNVX(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* from,
     VkImageViewAddressPropertiesNVX* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7844,23 +9549,29 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void deepcopy_VkTextureLODGatherFormatPropertiesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* from,
     VkTextureLODGatherFormatPropertiesAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7868,21 +9579,25 @@
 #ifdef VK_AMD_shader_info
 void deepcopy_VkShaderResourceUsageAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* from,
     VkShaderResourceUsageAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkShaderStatisticsInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* from,
     VkShaderStatisticsInfoAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkShaderResourceUsageAMD(pool, &from->resourceUsage, (VkShaderResourceUsageAMD*)(&to->resourceUsage));
+    deepcopy_VkShaderResourceUsageAMD(pool, rootType, &from->resourceUsage, (VkShaderResourceUsageAMD*)(&to->resourceUsage));
     memcpy(to->computeWorkGroupSize, from->computeWorkGroupSize, 3 * sizeof(uint32_t));
 }
 
@@ -7892,23 +9607,29 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void deepcopy_VkStreamDescriptorSurfaceCreateInfoGGP(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* from,
     VkStreamDescriptorSurfaceCreateInfoGGP* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7916,23 +9637,29 @@
 #ifdef VK_NV_corner_sampled_image
 void deepcopy_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* from,
     VkPhysicalDeviceCornerSampledImageFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -7942,57 +9669,71 @@
 #ifdef VK_NV_external_memory_capabilities
 void deepcopy_VkExternalImageFormatPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* from,
     VkExternalImageFormatPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkImageFormatProperties(pool, &from->imageFormatProperties, (VkImageFormatProperties*)(&to->imageFormatProperties));
+    deepcopy_VkImageFormatProperties(pool, rootType, &from->imageFormatProperties, (VkImageFormatProperties*)(&to->imageFormatProperties));
 }
 
 #endif
 #ifdef VK_NV_external_memory
 void deepcopy_VkExternalMemoryImageCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* from,
     VkExternalMemoryImageCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportMemoryAllocateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* from,
     VkExportMemoryAllocateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8000,45 +9741,57 @@
 #ifdef VK_NV_external_memory_win32
 void deepcopy_VkImportMemoryWin32HandleInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* from,
     VkImportMemoryWin32HandleInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExportMemoryWin32HandleInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* from,
     VkExportMemoryWin32HandleInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAttributes = nullptr;
     if (from->pAttributes)
@@ -8051,23 +9804,29 @@
 #ifdef VK_NV_win32_keyed_mutex
 void deepcopy_VkWin32KeyedMutexAcquireReleaseInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* from,
     VkWin32KeyedMutexAcquireReleaseInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAcquireSyncs = nullptr;
     if (from->pAcquireSyncs)
@@ -8100,23 +9859,29 @@
 #ifdef VK_EXT_validation_flags
 void deepcopy_VkValidationFlagsEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* from,
     VkValidationFlagsEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDisabledValidationChecks = nullptr;
     if (from->pDisabledValidationChecks)
@@ -8129,23 +9894,29 @@
 #ifdef VK_NN_vi_surface
 void deepcopy_VkViSurfaceCreateInfoNN(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* from,
     VkViSurfaceCreateInfoNN* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->window = nullptr;
     if (from->window)
@@ -8162,23 +9933,29 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void deepcopy_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* from,
     VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8186,45 +9963,57 @@
 #ifdef VK_EXT_astc_decode_mode
 void deepcopy_VkImageViewASTCDecodeModeEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* from,
     VkImageViewASTCDecodeModeEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* from,
     VkPhysicalDeviceASTCDecodeFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8232,67 +10021,85 @@
 #ifdef VK_EXT_conditional_rendering
 void deepcopy_VkConditionalRenderingBeginInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* from,
     VkConditionalRenderingBeginInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* from,
     VkPhysicalDeviceConditionalRenderingFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* from,
     VkCommandBufferInheritanceConditionalRenderingInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8300,32 +10107,40 @@
 #ifdef VK_NV_clip_space_w_scaling
 void deepcopy_VkViewportWScalingNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViewportWScalingNV* from,
     VkViewportWScalingNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineViewportWScalingStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* from,
     VkPipelineViewportWScalingStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -8336,7 +10151,7 @@
             to->viewportCount = from->viewportCount;
             for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
             {
-                deepcopy_VkViewportWScalingNV(pool, from->pViewportWScalings + i, (VkViewportWScalingNV*)(to->pViewportWScalings + i));
+                deepcopy_VkViewportWScalingNV(pool, rootType, from->pViewportWScalings + i, (VkViewportWScalingNV*)(to->pViewportWScalings + i));
             }
         }
     }
@@ -8350,116 +10165,146 @@
 #ifdef VK_EXT_display_surface_counter
 void deepcopy_VkSurfaceCapabilities2EXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* from,
     VkSurfaceCapabilities2EXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->currentExtent, (VkExtent2D*)(&to->currentExtent));
-    deepcopy_VkExtent2D(pool, &from->minImageExtent, (VkExtent2D*)(&to->minImageExtent));
-    deepcopy_VkExtent2D(pool, &from->maxImageExtent, (VkExtent2D*)(&to->maxImageExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->currentExtent, (VkExtent2D*)(&to->currentExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->minImageExtent, (VkExtent2D*)(&to->minImageExtent));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxImageExtent, (VkExtent2D*)(&to->maxImageExtent));
 }
 
 #endif
 #ifdef VK_EXT_display_control
 void deepcopy_VkDisplayPowerInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* from,
     VkDisplayPowerInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceEventInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* from,
     VkDeviceEventInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDisplayEventInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* from,
     VkDisplayEventInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSwapchainCounterCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* from,
     VkSwapchainCounterCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8467,50 +10312,62 @@
 #ifdef VK_GOOGLE_display_timing
 void deepcopy_VkRefreshCycleDurationGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* from,
     VkRefreshCycleDurationGOOGLE* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPastPresentationTimingGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* from,
     VkPastPresentationTimingGOOGLE* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPresentTimeGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* from,
     VkPresentTimeGOOGLE* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPresentTimesInfoGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* from,
     VkPresentTimesInfoGOOGLE* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -8521,7 +10378,7 @@
             to->swapchainCount = from->swapchainCount;
             for (uint32_t i = 0; i < (uint32_t)from->swapchainCount; ++i)
             {
-                deepcopy_VkPresentTimeGOOGLE(pool, from->pTimes + i, (VkPresentTimeGOOGLE*)(to->pTimes + i));
+                deepcopy_VkPresentTimeGOOGLE(pool, rootType, from->pTimes + i, (VkPresentTimeGOOGLE*)(to->pTimes + i));
             }
         }
     }
@@ -8537,23 +10394,29 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void deepcopy_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* from,
     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8561,32 +10424,40 @@
 #ifdef VK_NV_viewport_swizzle
 void deepcopy_VkViewportSwizzleNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* from,
     VkViewportSwizzleNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineViewportSwizzleStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* from,
     VkPipelineViewportSwizzleStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -8597,7 +10468,7 @@
             to->viewportCount = from->viewportCount;
             for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
             {
-                deepcopy_VkViewportSwizzleNV(pool, from->pViewportSwizzles + i, (VkViewportSwizzleNV*)(to->pViewportSwizzles + i));
+                deepcopy_VkViewportSwizzleNV(pool, rootType, from->pViewportSwizzles + i, (VkViewportSwizzleNV*)(to->pViewportSwizzles + i));
             }
         }
     }
@@ -8607,45 +10478,57 @@
 #ifdef VK_EXT_discard_rectangles
 void deepcopy_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* from,
     VkPhysicalDeviceDiscardRectanglePropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineDiscardRectangleStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* from,
     VkPipelineDiscardRectangleStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -8656,7 +10539,7 @@
             to->discardRectangleCount = from->discardRectangleCount;
             for (uint32_t i = 0; i < (uint32_t)from->discardRectangleCount; ++i)
             {
-                deepcopy_VkRect2D(pool, from->pDiscardRectangles + i, (VkRect2D*)(to->pDiscardRectangles + i));
+                deepcopy_VkRect2D(pool, rootType, from->pDiscardRectangles + i, (VkRect2D*)(to->pDiscardRectangles + i));
             }
         }
     }
@@ -8666,45 +10549,57 @@
 #ifdef VK_EXT_conservative_rasterization
 void deepcopy_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* from,
     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* from,
     VkPipelineRasterizationConservativeStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8712,45 +10607,57 @@
 #ifdef VK_EXT_depth_clip_enable
 void deepcopy_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* from,
     VkPhysicalDeviceDepthClipEnableFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* from,
     VkPipelineRasterizationDepthClipStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -8760,60 +10667,74 @@
 #ifdef VK_EXT_hdr_metadata
 void deepcopy_VkXYColorEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkXYColorEXT* from,
     VkXYColorEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkHdrMetadataEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* from,
     VkHdrMetadataEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkXYColorEXT(pool, &from->displayPrimaryRed, (VkXYColorEXT*)(&to->displayPrimaryRed));
-    deepcopy_VkXYColorEXT(pool, &from->displayPrimaryGreen, (VkXYColorEXT*)(&to->displayPrimaryGreen));
-    deepcopy_VkXYColorEXT(pool, &from->displayPrimaryBlue, (VkXYColorEXT*)(&to->displayPrimaryBlue));
-    deepcopy_VkXYColorEXT(pool, &from->whitePoint, (VkXYColorEXT*)(&to->whitePoint));
+    deepcopy_VkXYColorEXT(pool, rootType, &from->displayPrimaryRed, (VkXYColorEXT*)(&to->displayPrimaryRed));
+    deepcopy_VkXYColorEXT(pool, rootType, &from->displayPrimaryGreen, (VkXYColorEXT*)(&to->displayPrimaryGreen));
+    deepcopy_VkXYColorEXT(pool, rootType, &from->displayPrimaryBlue, (VkXYColorEXT*)(&to->displayPrimaryBlue));
+    deepcopy_VkXYColorEXT(pool, rootType, &from->whitePoint, (VkXYColorEXT*)(&to->whitePoint));
 }
 
 #endif
 #ifdef VK_MVK_ios_surface
 void deepcopy_VkIOSSurfaceCreateInfoMVK(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* from,
     VkIOSSurfaceCreateInfoMVK* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pView = nullptr;
     if (from->pView)
@@ -8826,23 +10747,29 @@
 #ifdef VK_MVK_macos_surface
 void deepcopy_VkMacOSSurfaceCreateInfoMVK(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* from,
     VkMacOSSurfaceCreateInfoMVK* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pView = nullptr;
     if (from->pView)
@@ -8861,23 +10788,29 @@
 #ifdef VK_EXT_debug_utils
 void deepcopy_VkDebugUtilsLabelEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* from,
     VkDebugUtilsLabelEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pLabelName = nullptr;
     if (from->pLabelName)
@@ -8889,23 +10822,29 @@
 
 void deepcopy_VkDebugUtilsObjectNameInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* from,
     VkDebugUtilsObjectNameInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pObjectName = nullptr;
     if (from->pObjectName)
@@ -8916,23 +10855,29 @@
 
 void deepcopy_VkDebugUtilsMessengerCallbackDataEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* from,
     VkDebugUtilsMessengerCallbackDataEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pMessageIdName = nullptr;
     if (from->pMessageIdName)
@@ -8953,7 +10898,7 @@
             to->queueLabelCount = from->queueLabelCount;
             for (uint32_t i = 0; i < (uint32_t)from->queueLabelCount; ++i)
             {
-                deepcopy_VkDebugUtilsLabelEXT(pool, from->pQueueLabels + i, (VkDebugUtilsLabelEXT*)(to->pQueueLabels + i));
+                deepcopy_VkDebugUtilsLabelEXT(pool, rootType, from->pQueueLabels + i, (VkDebugUtilsLabelEXT*)(to->pQueueLabels + i));
             }
         }
     }
@@ -8966,7 +10911,7 @@
             to->cmdBufLabelCount = from->cmdBufLabelCount;
             for (uint32_t i = 0; i < (uint32_t)from->cmdBufLabelCount; ++i)
             {
-                deepcopy_VkDebugUtilsLabelEXT(pool, from->pCmdBufLabels + i, (VkDebugUtilsLabelEXT*)(to->pCmdBufLabels + i));
+                deepcopy_VkDebugUtilsLabelEXT(pool, rootType, from->pCmdBufLabels + i, (VkDebugUtilsLabelEXT*)(to->pCmdBufLabels + i));
             }
         }
     }
@@ -8979,7 +10924,7 @@
             to->objectCount = from->objectCount;
             for (uint32_t i = 0; i < (uint32_t)from->objectCount; ++i)
             {
-                deepcopy_VkDebugUtilsObjectNameInfoEXT(pool, from->pObjects + i, (VkDebugUtilsObjectNameInfoEXT*)(to->pObjects + i));
+                deepcopy_VkDebugUtilsObjectNameInfoEXT(pool, rootType, from->pObjects + i, (VkDebugUtilsObjectNameInfoEXT*)(to->pObjects + i));
             }
         }
     }
@@ -8987,23 +10932,29 @@
 
 void deepcopy_VkDebugUtilsMessengerCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* from,
     VkDebugUtilsMessengerCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pUserData = nullptr;
     if (from->pUserData)
@@ -9014,23 +10965,29 @@
 
 void deepcopy_VkDebugUtilsObjectTagInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* from,
     VkDebugUtilsObjectTagInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pTag = nullptr;
     if (from->pTag)
@@ -9043,90 +11000,114 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void deepcopy_VkAndroidHardwareBufferUsageANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* from,
     VkAndroidHardwareBufferUsageANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAndroidHardwareBufferPropertiesANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* from,
     VkAndroidHardwareBufferPropertiesANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAndroidHardwareBufferFormatPropertiesANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* from,
     VkAndroidHardwareBufferFormatPropertiesANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkComponentMapping(pool, &from->samplerYcbcrConversionComponents, (VkComponentMapping*)(&to->samplerYcbcrConversionComponents));
+    deepcopy_VkComponentMapping(pool, rootType, &from->samplerYcbcrConversionComponents, (VkComponentMapping*)(&to->samplerYcbcrConversionComponents));
 }
 
 void deepcopy_VkImportAndroidHardwareBufferInfoANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* from,
     VkImportAndroidHardwareBufferInfoANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->buffer = nullptr;
     if (from->buffer)
@@ -9137,45 +11118,57 @@
 
 void deepcopy_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* from,
     VkMemoryGetAndroidHardwareBufferInfoANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkExternalFormatANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* from,
     VkExternalFormatANDROID* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9191,67 +11184,85 @@
 #ifdef VK_EXT_inline_uniform_block
 void deepcopy_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* from,
     VkPhysicalDeviceInlineUniformBlockFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* from,
     VkPhysicalDeviceInlineUniformBlockPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkWriteDescriptorSetInlineUniformBlockEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* from,
     VkWriteDescriptorSetInlineUniformBlockEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pData = nullptr;
     if (from->pData)
@@ -9262,23 +11273,29 @@
 
 void deepcopy_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* from,
     VkDescriptorPoolInlineUniformBlockCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9288,34 +11305,42 @@
 #ifdef VK_EXT_sample_locations
 void deepcopy_VkSampleLocationEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSampleLocationEXT* from,
     VkSampleLocationEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkSampleLocationsInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* from,
     VkSampleLocationsInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->sampleLocationGridSize, (VkExtent2D*)(&to->sampleLocationGridSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->sampleLocationGridSize, (VkExtent2D*)(&to->sampleLocationGridSize));
     if (from)
     {
         to->pSampleLocations = nullptr;
@@ -9325,7 +11350,7 @@
             to->sampleLocationsCount = from->sampleLocationsCount;
             for (uint32_t i = 0; i < (uint32_t)from->sampleLocationsCount; ++i)
             {
-                deepcopy_VkSampleLocationEXT(pool, from->pSampleLocations + i, (VkSampleLocationEXT*)(to->pSampleLocations + i));
+                deepcopy_VkSampleLocationEXT(pool, rootType, from->pSampleLocations + i, (VkSampleLocationEXT*)(to->pSampleLocations + i));
             }
         }
     }
@@ -9333,43 +11358,53 @@
 
 void deepcopy_VkAttachmentSampleLocationsEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* from,
     VkAttachmentSampleLocationsEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkSampleLocationsInfoEXT(pool, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
+    deepcopy_VkSampleLocationsInfoEXT(pool, rootType, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
 }
 
 void deepcopy_VkSubpassSampleLocationsEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* from,
     VkSubpassSampleLocationsEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkSampleLocationsInfoEXT(pool, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
+    deepcopy_VkSampleLocationsInfoEXT(pool, rootType, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
 }
 
 void deepcopy_VkRenderPassSampleLocationsBeginInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* from,
     VkRenderPassSampleLocationsBeginInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -9380,7 +11415,7 @@
             to->attachmentInitialSampleLocationsCount = from->attachmentInitialSampleLocationsCount;
             for (uint32_t i = 0; i < (uint32_t)from->attachmentInitialSampleLocationsCount; ++i)
             {
-                deepcopy_VkAttachmentSampleLocationsEXT(pool, from->pAttachmentInitialSampleLocations + i, (VkAttachmentSampleLocationsEXT*)(to->pAttachmentInitialSampleLocations + i));
+                deepcopy_VkAttachmentSampleLocationsEXT(pool, rootType, from->pAttachmentInitialSampleLocations + i, (VkAttachmentSampleLocationsEXT*)(to->pAttachmentInitialSampleLocations + i));
             }
         }
     }
@@ -9393,7 +11428,7 @@
             to->postSubpassSampleLocationsCount = from->postSubpassSampleLocationsCount;
             for (uint32_t i = 0; i < (uint32_t)from->postSubpassSampleLocationsCount; ++i)
             {
-                deepcopy_VkSubpassSampleLocationsEXT(pool, from->pPostSubpassSampleLocations + i, (VkSubpassSampleLocationsEXT*)(to->pPostSubpassSampleLocations + i));
+                deepcopy_VkSubpassSampleLocationsEXT(pool, rootType, from->pPostSubpassSampleLocations + i, (VkSubpassSampleLocationsEXT*)(to->pPostSubpassSampleLocations + i));
             }
         }
     }
@@ -9401,139 +11436,175 @@
 
 void deepcopy_VkPipelineSampleLocationsStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* from,
     VkPipelineSampleLocationsStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkSampleLocationsInfoEXT(pool, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
+    deepcopy_VkSampleLocationsInfoEXT(pool, rootType, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
 }
 
 void deepcopy_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* from,
     VkPhysicalDeviceSampleLocationsPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->maxSampleLocationGridSize, (VkExtent2D*)(&to->maxSampleLocationGridSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxSampleLocationGridSize, (VkExtent2D*)(&to->maxSampleLocationGridSize));
     memcpy(to->sampleLocationCoordinateRange, from->sampleLocationCoordinateRange, 2 * sizeof(float));
 }
 
 void deepcopy_VkMultisamplePropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* from,
     VkMultisamplePropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->maxSampleLocationGridSize, (VkExtent2D*)(&to->maxSampleLocationGridSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxSampleLocationGridSize, (VkExtent2D*)(&to->maxSampleLocationGridSize));
 }
 
 #endif
 #ifdef VK_EXT_blend_operation_advanced
 void deepcopy_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* from,
     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* from,
     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* from,
     VkPipelineColorBlendAdvancedStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9541,23 +11612,29 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void deepcopy_VkPipelineCoverageToColorStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* from,
     VkPipelineCoverageToColorStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9565,23 +11642,29 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void deepcopy_VkPipelineCoverageModulationStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* from,
     VkPipelineCoverageModulationStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pCoverageModulationTable = nullptr;
     if (from->pCoverageModulationTable)
@@ -9596,45 +11679,57 @@
 #ifdef VK_NV_shader_sm_builtins
 void deepcopy_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* from,
     VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* from,
     VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9644,32 +11739,40 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void deepcopy_VkDrmFormatModifierPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* from,
     VkDrmFormatModifierPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkDrmFormatModifierPropertiesListEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* from,
     VkDrmFormatModifierPropertiesListEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -9680,7 +11783,7 @@
             to->drmFormatModifierCount = from->drmFormatModifierCount;
             for (uint32_t i = 0; i < (uint32_t)from->drmFormatModifierCount; ++i)
             {
-                deepcopy_VkDrmFormatModifierPropertiesEXT(pool, from->pDrmFormatModifierProperties + i, (VkDrmFormatModifierPropertiesEXT*)(to->pDrmFormatModifierProperties + i));
+                deepcopy_VkDrmFormatModifierPropertiesEXT(pool, rootType, from->pDrmFormatModifierProperties + i, (VkDrmFormatModifierPropertiesEXT*)(to->pDrmFormatModifierProperties + i));
             }
         }
     }
@@ -9688,23 +11791,29 @@
 
 void deepcopy_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* from,
     VkPhysicalDeviceImageDrmFormatModifierInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pQueueFamilyIndices = nullptr;
     if (from->pQueueFamilyIndices)
@@ -9715,23 +11824,29 @@
 
 void deepcopy_VkImageDrmFormatModifierListCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* from,
     VkImageDrmFormatModifierListCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDrmFormatModifiers = nullptr;
     if (from->pDrmFormatModifiers)
@@ -9742,23 +11857,29 @@
 
 void deepcopy_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* from,
     VkImageDrmFormatModifierExplicitCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -9769,7 +11890,7 @@
             to->drmFormatModifierPlaneCount = from->drmFormatModifierPlaneCount;
             for (uint32_t i = 0; i < (uint32_t)from->drmFormatModifierPlaneCount; ++i)
             {
-                deepcopy_VkSubresourceLayout(pool, from->pPlaneLayouts + i, (VkSubresourceLayout*)(to->pPlaneLayouts + i));
+                deepcopy_VkSubresourceLayout(pool, rootType, from->pPlaneLayouts + i, (VkSubresourceLayout*)(to->pPlaneLayouts + i));
             }
         }
     }
@@ -9777,23 +11898,29 @@
 
 void deepcopy_VkImageDrmFormatModifierPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* from,
     VkImageDrmFormatModifierPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9801,23 +11928,29 @@
 #ifdef VK_EXT_validation_cache
 void deepcopy_VkValidationCacheCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* from,
     VkValidationCacheCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pInitialData = nullptr;
     if (from->pInitialData)
@@ -9828,23 +11961,29 @@
 
 void deepcopy_VkShaderModuleValidationCacheCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* from,
     VkShaderModuleValidationCacheCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -9856,10 +11995,12 @@
 #ifdef VK_NV_shading_rate_image
 void deepcopy_VkShadingRatePaletteNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* from,
     VkShadingRatePaletteNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->pShadingRatePaletteEntries = nullptr;
     if (from->pShadingRatePaletteEntries)
@@ -9870,23 +12011,29 @@
 
 void deepcopy_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* from,
     VkPipelineViewportShadingRateImageStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -9897,7 +12044,7 @@
             to->viewportCount = from->viewportCount;
             for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
             {
-                deepcopy_VkShadingRatePaletteNV(pool, from->pShadingRatePalettes + i, (VkShadingRatePaletteNV*)(to->pShadingRatePalettes + i));
+                deepcopy_VkShadingRatePaletteNV(pool, rootType, from->pShadingRatePalettes + i, (VkShadingRatePaletteNV*)(to->pShadingRatePalettes + i));
             }
         }
     }
@@ -9905,64 +12052,80 @@
 
 void deepcopy_VkPhysicalDeviceShadingRateImageFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* from,
     VkPhysicalDeviceShadingRateImageFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceShadingRateImagePropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* from,
     VkPhysicalDeviceShadingRateImagePropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkExtent2D(pool, &from->shadingRateTexelSize, (VkExtent2D*)(&to->shadingRateTexelSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->shadingRateTexelSize, (VkExtent2D*)(&to->shadingRateTexelSize));
 }
 
 void deepcopy_VkCoarseSampleLocationNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* from,
     VkCoarseSampleLocationNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkCoarseSampleOrderCustomNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* from,
     VkCoarseSampleOrderCustomNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     if (from)
     {
@@ -9973,7 +12136,7 @@
             to->sampleLocationCount = from->sampleLocationCount;
             for (uint32_t i = 0; i < (uint32_t)from->sampleLocationCount; ++i)
             {
-                deepcopy_VkCoarseSampleLocationNV(pool, from->pSampleLocations + i, (VkCoarseSampleLocationNV*)(to->pSampleLocations + i));
+                deepcopy_VkCoarseSampleLocationNV(pool, rootType, from->pSampleLocations + i, (VkCoarseSampleLocationNV*)(to->pSampleLocations + i));
             }
         }
     }
@@ -9981,23 +12144,29 @@
 
 void deepcopy_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* from,
     VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -10008,7 +12177,7 @@
             to->customSampleOrderCount = from->customSampleOrderCount;
             for (uint32_t i = 0; i < (uint32_t)from->customSampleOrderCount; ++i)
             {
-                deepcopy_VkCoarseSampleOrderCustomNV(pool, from->pCustomSampleOrders + i, (VkCoarseSampleOrderCustomNV*)(to->pCustomSampleOrders + i));
+                deepcopy_VkCoarseSampleOrderCustomNV(pool, rootType, from->pCustomSampleOrders + i, (VkCoarseSampleOrderCustomNV*)(to->pCustomSampleOrders + i));
             }
         }
     }
@@ -10018,45 +12187,57 @@
 #ifdef VK_NV_ray_tracing
 void deepcopy_VkRayTracingShaderGroupCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* from,
     VkRayTracingShaderGroupCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkRayTracingPipelineCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* from,
     VkRayTracingPipelineCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -10067,7 +12248,7 @@
             to->stageCount = from->stageCount;
             for (uint32_t i = 0; i < (uint32_t)from->stageCount; ++i)
             {
-                deepcopy_VkPipelineShaderStageCreateInfo(pool, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
+                deepcopy_VkPipelineShaderStageCreateInfo(pool, rootType, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
             }
         }
     }
@@ -10080,7 +12261,7 @@
             to->groupCount = from->groupCount;
             for (uint32_t i = 0; i < (uint32_t)from->groupCount; ++i)
             {
-                deepcopy_VkRayTracingShaderGroupCreateInfoNV(pool, from->pGroups + i, (VkRayTracingShaderGroupCreateInfoNV*)(to->pGroups + i));
+                deepcopy_VkRayTracingShaderGroupCreateInfoNV(pool, rootType, from->pGroups + i, (VkRayTracingShaderGroupCreateInfoNV*)(to->pGroups + i));
             }
         }
     }
@@ -10088,101 +12269,127 @@
 
 void deepcopy_VkGeometryTrianglesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* from,
     VkGeometryTrianglesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkGeometryAABBNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryAABBNV* from,
     VkGeometryAABBNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkGeometryDataNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryDataNV* from,
     VkGeometryDataNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkGeometryTrianglesNV(pool, &from->triangles, (VkGeometryTrianglesNV*)(&to->triangles));
-    deepcopy_VkGeometryAABBNV(pool, &from->aabbs, (VkGeometryAABBNV*)(&to->aabbs));
+    deepcopy_VkGeometryTrianglesNV(pool, rootType, &from->triangles, (VkGeometryTrianglesNV*)(&to->triangles));
+    deepcopy_VkGeometryAABBNV(pool, rootType, &from->aabbs, (VkGeometryAABBNV*)(&to->aabbs));
 }
 
 void deepcopy_VkGeometryNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryNV* from,
     VkGeometryNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkGeometryDataNV(pool, &from->geometry, (VkGeometryDataNV*)(&to->geometry));
+    deepcopy_VkGeometryDataNV(pool, rootType, &from->geometry, (VkGeometryDataNV*)(&to->geometry));
 }
 
 void deepcopy_VkAccelerationStructureInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* from,
     VkAccelerationStructureInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -10193,7 +12400,7 @@
             to->geometryCount = from->geometryCount;
             for (uint32_t i = 0; i < (uint32_t)from->geometryCount; ++i)
             {
-                deepcopy_VkGeometryNV(pool, from->pGeometries + i, (VkGeometryNV*)(to->pGeometries + i));
+                deepcopy_VkGeometryNV(pool, rootType, from->pGeometries + i, (VkGeometryNV*)(to->pGeometries + i));
             }
         }
     }
@@ -10201,46 +12408,58 @@
 
 void deepcopy_VkAccelerationStructureCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* from,
     VkAccelerationStructureCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkAccelerationStructureInfoNV(pool, &from->info, (VkAccelerationStructureInfoNV*)(&to->info));
+    deepcopy_VkAccelerationStructureInfoNV(pool, rootType, &from->info, (VkAccelerationStructureInfoNV*)(&to->info));
 }
 
 void deepcopy_VkBindAccelerationStructureMemoryInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* from,
     VkBindAccelerationStructureMemoryInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pDeviceIndices = nullptr;
     if (from->pDeviceIndices)
@@ -10251,23 +12470,29 @@
 
 void deepcopy_VkWriteDescriptorSetAccelerationStructureNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* from,
     VkWriteDescriptorSetAccelerationStructureNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAccelerationStructures = nullptr;
     if (from->pAccelerationStructures)
@@ -10278,120 +12503,150 @@
 
 void deepcopy_VkAccelerationStructureMemoryRequirementsInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* from,
     VkAccelerationStructureMemoryRequirementsInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceRayTracingPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* from,
     VkPhysicalDeviceRayTracingPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkTransformMatrixKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* from,
     VkTransformMatrixKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     memcpy(to->matrix, from->matrix, ((3)*(4)) * sizeof(float));
 }
 
 void deepcopy_VkAabbPositionsKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* from,
     VkAabbPositionsKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkAccelerationStructureInstanceKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* from,
     VkAccelerationStructureInstanceKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkTransformMatrixKHR(pool, &from->transform, (VkTransformMatrixKHR*)(&to->transform));
+    deepcopy_VkTransformMatrixKHR(pool, rootType, &from->transform, (VkTransformMatrixKHR*)(&to->transform));
 }
 
 #endif
 #ifdef VK_NV_representative_fragment_test
 void deepcopy_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* from,
     VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* from,
     VkPipelineRepresentativeFragmentTestStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10399,45 +12654,57 @@
 #ifdef VK_EXT_filter_cubic
 void deepcopy_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* from,
     VkPhysicalDeviceImageViewImageFormatInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkFilterCubicImageViewImageFormatPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* from,
     VkFilterCubicImageViewImageFormatPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10447,23 +12714,29 @@
 #ifdef VK_EXT_global_priority
 void deepcopy_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* from,
     VkDeviceQueueGlobalPriorityCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10471,23 +12744,29 @@
 #ifdef VK_EXT_external_memory_host
 void deepcopy_VkImportMemoryHostPointerInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* from,
     VkImportMemoryHostPointerInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pHostPointer = nullptr;
     if (from->pHostPointer)
@@ -10498,45 +12777,57 @@
 
 void deepcopy_VkMemoryHostPointerPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* from,
     VkMemoryHostPointerPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* from,
     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10546,23 +12837,29 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void deepcopy_VkPipelineCompilerControlCreateInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* from,
     VkPipelineCompilerControlCreateInfoAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10570,23 +12867,29 @@
 #ifdef VK_EXT_calibrated_timestamps
 void deepcopy_VkCalibratedTimestampInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* from,
     VkCalibratedTimestampInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10594,23 +12897,29 @@
 #ifdef VK_AMD_shader_core_properties
 void deepcopy_VkPhysicalDeviceShaderCorePropertiesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* from,
     VkPhysicalDeviceShaderCorePropertiesAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10618,23 +12927,29 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void deepcopy_VkDeviceMemoryOverallocationCreateInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* from,
     VkDeviceMemoryOverallocationCreateInfoAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10642,54 +12957,68 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void deepcopy_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* from,
     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkVertexInputBindingDivisorDescriptionEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* from,
     VkVertexInputBindingDivisorDescriptionEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* from,
     VkPipelineVertexInputDivisorStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -10700,7 +13029,7 @@
             to->vertexBindingDivisorCount = from->vertexBindingDivisorCount;
             for (uint32_t i = 0; i < (uint32_t)from->vertexBindingDivisorCount; ++i)
             {
-                deepcopy_VkVertexInputBindingDivisorDescriptionEXT(pool, from->pVertexBindingDivisors + i, (VkVertexInputBindingDivisorDescriptionEXT*)(to->pVertexBindingDivisors + i));
+                deepcopy_VkVertexInputBindingDivisorDescriptionEXT(pool, rootType, from->pVertexBindingDivisors + i, (VkVertexInputBindingDivisorDescriptionEXT*)(to->pVertexBindingDivisors + i));
             }
         }
     }
@@ -10708,23 +13037,29 @@
 
 void deepcopy_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* from,
     VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10732,23 +13067,29 @@
 #ifdef VK_GGP_frame_token
 void deepcopy_VkPresentFrameTokenGGP(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* from,
     VkPresentFrameTokenGGP* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10756,38 +13097,46 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void deepcopy_VkPipelineCreationFeedbackEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* from,
     VkPipelineCreationFeedbackEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkPipelineCreationFeedbackCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* from,
     VkPipelineCreationFeedbackCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pPipelineCreationFeedback = nullptr;
     if (from->pPipelineCreationFeedback)
     {
         to->pPipelineCreationFeedback = (VkPipelineCreationFeedbackEXT*)pool->alloc(sizeof(VkPipelineCreationFeedbackEXT));
-        deepcopy_VkPipelineCreationFeedbackEXT(pool, from->pPipelineCreationFeedback, (VkPipelineCreationFeedbackEXT*)(to->pPipelineCreationFeedback));
+        deepcopy_VkPipelineCreationFeedbackEXT(pool, rootType, from->pPipelineCreationFeedback, (VkPipelineCreationFeedbackEXT*)(to->pPipelineCreationFeedback));
     }
     if (from)
     {
@@ -10798,7 +13147,7 @@
             to->pipelineStageCreationFeedbackCount = from->pipelineStageCreationFeedbackCount;
             for (uint32_t i = 0; i < (uint32_t)from->pipelineStageCreationFeedbackCount; ++i)
             {
-                deepcopy_VkPipelineCreationFeedbackEXT(pool, from->pPipelineStageCreationFeedbacks + i, (VkPipelineCreationFeedbackEXT*)(to->pPipelineStageCreationFeedbacks + i));
+                deepcopy_VkPipelineCreationFeedbackEXT(pool, rootType, from->pPipelineStageCreationFeedbacks + i, (VkPipelineCreationFeedbackEXT*)(to->pPipelineStageCreationFeedbacks + i));
             }
         }
     }
@@ -10810,23 +13159,29 @@
 #ifdef VK_NV_compute_shader_derivatives
 void deepcopy_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* from,
     VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10834,45 +13189,57 @@
 #ifdef VK_NV_mesh_shader
 void deepcopy_VkPhysicalDeviceMeshShaderFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* from,
     VkPhysicalDeviceMeshShaderFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceMeshShaderPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* from,
     VkPhysicalDeviceMeshShaderPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->maxTaskWorkGroupSize, from->maxTaskWorkGroupSize, 3 * sizeof(uint32_t));
     memcpy(to->maxMeshWorkGroupSize, from->maxMeshWorkGroupSize, 3 * sizeof(uint32_t));
@@ -10880,10 +13247,12 @@
 
 void deepcopy_VkDrawMeshTasksIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* from,
     VkDrawMeshTasksIndirectCommandNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
@@ -10891,23 +13260,29 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void deepcopy_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* from,
     VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10915,23 +13290,29 @@
 #ifdef VK_NV_shader_image_footprint
 void deepcopy_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* from,
     VkPhysicalDeviceShaderImageFootprintFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10939,23 +13320,29 @@
 #ifdef VK_NV_scissor_exclusive
 void deepcopy_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* from,
     VkPipelineViewportExclusiveScissorStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -10966,7 +13353,7 @@
             to->exclusiveScissorCount = from->exclusiveScissorCount;
             for (uint32_t i = 0; i < (uint32_t)from->exclusiveScissorCount; ++i)
             {
-                deepcopy_VkRect2D(pool, from->pExclusiveScissors + i, (VkRect2D*)(to->pExclusiveScissors + i));
+                deepcopy_VkRect2D(pool, rootType, from->pExclusiveScissors + i, (VkRect2D*)(to->pExclusiveScissors + i));
             }
         }
     }
@@ -10974,23 +13361,29 @@
 
 void deepcopy_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* from,
     VkPhysicalDeviceExclusiveScissorFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -10998,45 +13391,57 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void deepcopy_VkQueueFamilyCheckpointPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* from,
     VkQueueFamilyCheckpointPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCheckpointDataNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCheckpointDataNV* from,
     VkCheckpointDataNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pCheckpointMarker = nullptr;
     if (from->pCheckpointMarker)
@@ -11049,23 +13454,29 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void deepcopy_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* from,
     VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11073,10 +13484,12 @@
 #ifdef VK_INTEL_performance_query
 void deepcopy_VkPerformanceValueDataINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* from,
     VkPerformanceValueDataINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->valueString = nullptr;
     if (from->valueString)
@@ -11087,33 +13500,41 @@
 
 void deepcopy_VkPerformanceValueINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* from,
     VkPerformanceValueINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkPerformanceValueDataINTEL(pool, &from->data, (VkPerformanceValueDataINTEL*)(&to->data));
+    deepcopy_VkPerformanceValueDataINTEL(pool, rootType, &from->data, (VkPerformanceValueDataINTEL*)(&to->data));
 }
 
 void deepcopy_VkInitializePerformanceApiInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* from,
     VkInitializePerformanceApiInfoINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pUserData = nullptr;
     if (from->pUserData)
@@ -11124,111 +13545,141 @@
 
 void deepcopy_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* from,
     VkQueryPoolPerformanceQueryCreateInfoINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPerformanceMarkerInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* from,
     VkPerformanceMarkerInfoINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPerformanceStreamMarkerInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* from,
     VkPerformanceStreamMarkerInfoINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPerformanceOverrideInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* from,
     VkPerformanceOverrideInfoINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPerformanceConfigurationAcquireInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* from,
     VkPerformanceConfigurationAcquireInfoINTEL* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11236,23 +13687,29 @@
 #ifdef VK_EXT_pci_bus_info
 void deepcopy_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* from,
     VkPhysicalDevicePCIBusInfoPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11260,45 +13717,57 @@
 #ifdef VK_AMD_display_native_hdr
 void deepcopy_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* from,
     VkDisplayNativeHdrSurfaceCapabilitiesAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* from,
     VkSwapchainDisplayNativeHdrCreateInfoAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11306,23 +13775,29 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void deepcopy_VkImagePipeSurfaceCreateInfoFUCHSIA(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* from,
     VkImagePipeSurfaceCreateInfoFUCHSIA* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11330,23 +13805,29 @@
 #ifdef VK_EXT_metal_surface
 void deepcopy_VkMetalSurfaceCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* from,
     VkMetalSurfaceCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pLayer = nullptr;
     if (from->pLayer)
@@ -11356,71 +13837,92 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void deepcopy_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     BumpPool* pool,
-    const VkImportColorBufferGOOGLE* from,
-    VkImportColorBufferGOOGLE* to)
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* from,
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
-void deepcopy_VkImportBufferGOOGLE(
+void deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     BumpPool* pool,
-    const VkImportBufferGOOGLE* from,
-    VkImportBufferGOOGLE* to)
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* from,
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
+    deepcopy_VkExtent2D(pool, rootType, &from->minFragmentDensityTexelSize, (VkExtent2D*)(&to->minFragmentDensityTexelSize));
+    deepcopy_VkExtent2D(pool, rootType, &from->maxFragmentDensityTexelSize, (VkExtent2D*)(&to->maxFragmentDensityTexelSize));
 }
 
-void deepcopy_VkImportPhysicalAddressGOOGLE(
+void deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT(
     BumpPool* pool,
-    const VkImportPhysicalAddressGOOGLE* from,
-    VkImportPhysicalAddressGOOGLE* to)
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* from,
+    VkRenderPassFragmentDensityMapCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
-        to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        to->pNext = (const void*)pool->alloc(pNext_size);
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
+    deepcopy_VkAttachmentReference(pool, rootType, &from->fragmentDensityMapAttachment, (VkAttachmentReference*)(&to->fragmentDensityMapAttachment));
 }
 
 #endif
@@ -11433,67 +13935,85 @@
 #ifdef VK_EXT_subgroup_size_control
 void deepcopy_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* from,
     VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* from,
     VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* from,
     VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11501,23 +14021,29 @@
 #ifdef VK_AMD_shader_core_properties2
 void deepcopy_VkPhysicalDeviceShaderCoreProperties2AMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* from,
     VkPhysicalDeviceShaderCoreProperties2AMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11525,23 +14051,29 @@
 #ifdef VK_AMD_device_coherent_memory
 void deepcopy_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* from,
     VkPhysicalDeviceCoherentMemoryFeaturesAMD* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11549,23 +14081,29 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void deepcopy_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* from,
     VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11573,23 +14111,29 @@
 #ifdef VK_EXT_memory_budget
 void deepcopy_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* from,
     VkPhysicalDeviceMemoryBudgetPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->heapBudget, from->heapBudget, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
     memcpy(to->heapUsage, from->heapUsage, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
@@ -11599,45 +14143,57 @@
 #ifdef VK_EXT_memory_priority
 void deepcopy_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* from,
     VkPhysicalDeviceMemoryPriorityFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkMemoryPriorityAllocateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* from,
     VkMemoryPriorityAllocateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11645,23 +14201,29 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void deepcopy_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* from,
     VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11669,45 +14231,57 @@
 #ifdef VK_EXT_buffer_device_address
 void deepcopy_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* from,
     VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkBufferDeviceAddressCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* from,
     VkBufferDeviceAddressCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11715,23 +14289,29 @@
 #ifdef VK_EXT_tooling_info
 void deepcopy_VkPhysicalDeviceToolPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* from,
     VkPhysicalDeviceToolPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->name, from->name, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     memcpy(to->version, from->version, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
@@ -11745,23 +14325,29 @@
 #ifdef VK_EXT_validation_features
 void deepcopy_VkValidationFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* from,
     VkValidationFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pEnabledValidationFeatures = nullptr;
     if (from->pEnabledValidationFeatures)
@@ -11779,67 +14365,85 @@
 #ifdef VK_NV_cooperative_matrix
 void deepcopy_VkCooperativeMatrixPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* from,
     VkCooperativeMatrixPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* from,
     VkPhysicalDeviceCooperativeMatrixFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* from,
     VkPhysicalDeviceCooperativeMatrixPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11847,67 +14451,85 @@
 #ifdef VK_NV_coverage_reduction_mode
 void deepcopy_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* from,
     VkPhysicalDeviceCoverageReductionModeFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineCoverageReductionStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* from,
     VkPipelineCoverageReductionStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkFramebufferMixedSamplesCombinationNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* from,
     VkFramebufferMixedSamplesCombinationNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11915,23 +14537,29 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void deepcopy_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* from,
     VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11939,23 +14567,29 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void deepcopy_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* from,
     VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -11963,67 +14597,85 @@
 #ifdef VK_EXT_full_screen_exclusive
 void deepcopy_VkSurfaceFullScreenExclusiveInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* from,
     VkSurfaceFullScreenExclusiveInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* from,
     VkSurfaceCapabilitiesFullScreenExclusiveEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* from,
     VkSurfaceFullScreenExclusiveWin32InfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12031,23 +14683,29 @@
 #ifdef VK_EXT_headless_surface
 void deepcopy_VkHeadlessSurfaceCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* from,
     VkHeadlessSurfaceCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12055,67 +14713,85 @@
 #ifdef VK_EXT_line_rasterization
 void deepcopy_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* from,
     VkPhysicalDeviceLineRasterizationFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* from,
     VkPhysicalDeviceLineRasterizationPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineRasterizationLineStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* from,
     VkPipelineRasterizationLineStateCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12123,23 +14799,29 @@
 #ifdef VK_EXT_shader_atomic_float
 void deepcopy_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* from,
     VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12149,23 +14831,29 @@
 #ifdef VK_EXT_index_type_uint8
 void deepcopy_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* from,
     VkPhysicalDeviceIndexTypeUint8FeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12173,23 +14861,29 @@
 #ifdef VK_EXT_extended_dynamic_state
 void deepcopy_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* from,
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12197,23 +14891,29 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void deepcopy_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* from,
     VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12221,67 +14921,85 @@
 #ifdef VK_NV_device_generated_commands
 void deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* from,
     VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* from,
     VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkGraphicsShaderGroupCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* from,
     VkGraphicsShaderGroupCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -12292,7 +15010,7 @@
             to->stageCount = from->stageCount;
             for (uint32_t i = 0; i < (uint32_t)from->stageCount; ++i)
             {
-                deepcopy_VkPipelineShaderStageCreateInfo(pool, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
+                deepcopy_VkPipelineShaderStageCreateInfo(pool, rootType, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
             }
         }
     }
@@ -12300,35 +15018,41 @@
     if (from->pVertexInputState)
     {
         to->pVertexInputState = (VkPipelineVertexInputStateCreateInfo*)pool->alloc(sizeof(const VkPipelineVertexInputStateCreateInfo));
-        deepcopy_VkPipelineVertexInputStateCreateInfo(pool, from->pVertexInputState, (VkPipelineVertexInputStateCreateInfo*)(to->pVertexInputState));
+        deepcopy_VkPipelineVertexInputStateCreateInfo(pool, rootType, from->pVertexInputState, (VkPipelineVertexInputStateCreateInfo*)(to->pVertexInputState));
     }
     to->pTessellationState = nullptr;
     if (from->pTessellationState)
     {
         to->pTessellationState = (VkPipelineTessellationStateCreateInfo*)pool->alloc(sizeof(const VkPipelineTessellationStateCreateInfo));
-        deepcopy_VkPipelineTessellationStateCreateInfo(pool, from->pTessellationState, (VkPipelineTessellationStateCreateInfo*)(to->pTessellationState));
+        deepcopy_VkPipelineTessellationStateCreateInfo(pool, rootType, from->pTessellationState, (VkPipelineTessellationStateCreateInfo*)(to->pTessellationState));
     }
 }
 
 void deepcopy_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* from,
     VkGraphicsPipelineShaderGroupsCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -12339,7 +15063,7 @@
             to->groupCount = from->groupCount;
             for (uint32_t i = 0; i < (uint32_t)from->groupCount; ++i)
             {
-                deepcopy_VkGraphicsShaderGroupCreateInfoNV(pool, from->pGroups + i, (VkGraphicsShaderGroupCreateInfoNV*)(to->pGroups + i));
+                deepcopy_VkGraphicsShaderGroupCreateInfoNV(pool, rootType, from->pGroups + i, (VkGraphicsShaderGroupCreateInfoNV*)(to->pGroups + i));
             }
         }
     }
@@ -12352,68 +15076,84 @@
 
 void deepcopy_VkBindShaderGroupIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* from,
     VkBindShaderGroupIndirectCommandNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkBindIndexBufferIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* from,
     VkBindIndexBufferIndirectCommandNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkBindVertexBufferIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* from,
     VkBindVertexBufferIndirectCommandNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkSetStateFlagsIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* from,
     VkSetStateFlagsIndirectCommandNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkIndirectCommandsStreamNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* from,
     VkIndirectCommandsStreamNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkIndirectCommandsLayoutTokenNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* from,
     VkIndirectCommandsLayoutTokenNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pIndexTypes = nullptr;
     if (from->pIndexTypes)
@@ -12429,23 +15169,29 @@
 
 void deepcopy_VkIndirectCommandsLayoutCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* from,
     VkIndirectCommandsLayoutCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -12456,7 +15202,7 @@
             to->tokenCount = from->tokenCount;
             for (uint32_t i = 0; i < (uint32_t)from->tokenCount; ++i)
             {
-                deepcopy_VkIndirectCommandsLayoutTokenNV(pool, from->pTokens + i, (VkIndirectCommandsLayoutTokenNV*)(to->pTokens + i));
+                deepcopy_VkIndirectCommandsLayoutTokenNV(pool, rootType, from->pTokens + i, (VkIndirectCommandsLayoutTokenNV*)(to->pTokens + i));
             }
         }
     }
@@ -12469,23 +15215,29 @@
 
 void deepcopy_VkGeneratedCommandsInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* from,
     VkGeneratedCommandsInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -12496,7 +15248,7 @@
             to->streamCount = from->streamCount;
             for (uint32_t i = 0; i < (uint32_t)from->streamCount; ++i)
             {
-                deepcopy_VkIndirectCommandsStreamNV(pool, from->pStreams + i, (VkIndirectCommandsStreamNV*)(to->pStreams + i));
+                deepcopy_VkIndirectCommandsStreamNV(pool, rootType, from->pStreams + i, (VkIndirectCommandsStreamNV*)(to->pStreams + i));
             }
         }
     }
@@ -12504,23 +15256,29 @@
 
 void deepcopy_VkGeneratedCommandsMemoryRequirementsInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* from,
     VkGeneratedCommandsMemoryRequirementsInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12528,45 +15286,57 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void deepcopy_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* from,
     VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* from,
     VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12574,114 +15344,144 @@
 #ifdef VK_QCOM_render_pass_transform
 void deepcopy_VkRenderPassTransformBeginInfoQCOM(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* from,
     VkRenderPassTransformBeginInfoQCOM* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* from,
     VkCommandBufferInheritanceRenderPassTransformInfoQCOM* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkRect2D(pool, &from->renderArea, (VkRect2D*)(&to->renderArea));
+    deepcopy_VkRect2D(pool, rootType, &from->renderArea, (VkRect2D*)(&to->renderArea));
 }
 
 #endif
 #ifdef VK_EXT_device_memory_report
 void deepcopy_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* from,
     VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceMemoryReportCallbackDataEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* from,
     VkDeviceMemoryReportCallbackDataEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceDeviceMemoryReportCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* from,
     VkDeviceDeviceMemoryReportCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pUserData = nullptr;
     if (from->pUserData)
@@ -12694,45 +15494,57 @@
 #ifdef VK_EXT_robustness2
 void deepcopy_VkPhysicalDeviceRobustness2FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* from,
     VkPhysicalDeviceRobustness2FeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceRobustness2PropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* from,
     VkPhysicalDeviceRobustness2PropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12740,68 +15552,86 @@
 #ifdef VK_EXT_custom_border_color
 void deepcopy_VkSamplerCustomBorderColorCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* from,
     VkSamplerCustomBorderColorCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkClearColorValue(pool, &from->customBorderColor, (VkClearColorValue*)(&to->customBorderColor));
+    deepcopy_VkClearColorValue(pool, rootType, &from->customBorderColor, (VkClearColorValue*)(&to->customBorderColor));
 }
 
 void deepcopy_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* from,
     VkPhysicalDeviceCustomBorderColorPropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* from,
     VkPhysicalDeviceCustomBorderColorFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12811,67 +15641,85 @@
 #ifdef VK_EXT_private_data
 void deepcopy_VkPhysicalDevicePrivateDataFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* from,
     VkPhysicalDevicePrivateDataFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDevicePrivateDataCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* from,
     VkDevicePrivateDataCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPrivateDataSlotCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* from,
     VkPrivateDataSlotCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12879,23 +15727,29 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void deepcopy_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* from,
     VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12903,45 +15757,57 @@
 #ifdef VK_NV_device_diagnostics_config
 void deepcopy_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* from,
     VkPhysicalDeviceDiagnosticsConfigFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkDeviceDiagnosticsConfigCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* from,
     VkDeviceDiagnosticsConfigCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -12951,67 +15817,85 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* from,
     VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* from,
     VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* from,
     VkPipelineFragmentShadingRateEnumStateCreateInfoNV* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     memcpy(to->combinerOps, from->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
 }
@@ -13020,45 +15904,57 @@
 #ifdef VK_EXT_fragment_density_map2
 void deepcopy_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* from,
     VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* from,
     VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -13066,23 +15962,29 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void deepcopy_VkCopyCommandTransformInfoQCOM(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* from,
     VkCopyCommandTransformInfoQCOM* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -13090,23 +15992,29 @@
 #ifdef VK_EXT_image_robustness
 void deepcopy_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* from,
     VkPhysicalDeviceImageRobustnessFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -13114,23 +16022,29 @@
 #ifdef VK_EXT_4444_formats
 void deepcopy_VkPhysicalDevice4444FormatsFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* from,
     VkPhysicalDevice4444FormatsFeaturesEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -13138,23 +16052,29 @@
 #ifdef VK_EXT_directfb_surface
 void deepcopy_VkDirectFBSurfaceCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* from,
     VkDirectFBSurfaceCreateInfoEXT* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->dfb = nullptr;
     if (from->dfb)
@@ -13170,14 +16090,100 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void deepcopy_VkImportColorBufferGOOGLE(
+    BumpPool* pool,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* from,
+    VkImportColorBufferGOOGLE* to)
+{
+    (void)pool;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext)
+    {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size)
+    {
+        to->pNext = (void*)pool->alloc(pNext_size);
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkImportBufferGOOGLE(
+    BumpPool* pool,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* from,
+    VkImportBufferGOOGLE* to)
+{
+    (void)pool;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext)
+    {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size)
+    {
+        to->pNext = (void*)pool->alloc(pNext_size);
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkImportPhysicalAddressGOOGLE(
+    BumpPool* pool,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* from,
+    VkImportPhysicalAddressGOOGLE* to)
+{
+    (void)pool;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext)
+    {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size)
+    {
+        to->pNext = (void*)pool->alloc(pNext_size);
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void deepcopy_VkDeviceOrHostAddressKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* from,
     VkDeviceOrHostAddressKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->hostAddress = nullptr;
     if (from->hostAddress)
@@ -13188,10 +16194,12 @@
 
 void deepcopy_VkDeviceOrHostAddressConstKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* from,
     VkDeviceOrHostAddressConstKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
     to->hostAddress = nullptr;
     if (from->hostAddress)
@@ -13202,138 +16210,172 @@
 
 void deepcopy_VkAccelerationStructureBuildRangeInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* from,
     VkAccelerationStructureBuildRangeInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkAccelerationStructureGeometryTrianglesDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* from,
     VkAccelerationStructureGeometryTrianglesDataKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDeviceOrHostAddressConstKHR(pool, &from->vertexData, (VkDeviceOrHostAddressConstKHR*)(&to->vertexData));
-    deepcopy_VkDeviceOrHostAddressConstKHR(pool, &from->indexData, (VkDeviceOrHostAddressConstKHR*)(&to->indexData));
-    deepcopy_VkDeviceOrHostAddressConstKHR(pool, &from->transformData, (VkDeviceOrHostAddressConstKHR*)(&to->transformData));
+    deepcopy_VkDeviceOrHostAddressConstKHR(pool, rootType, &from->vertexData, (VkDeviceOrHostAddressConstKHR*)(&to->vertexData));
+    deepcopy_VkDeviceOrHostAddressConstKHR(pool, rootType, &from->indexData, (VkDeviceOrHostAddressConstKHR*)(&to->indexData));
+    deepcopy_VkDeviceOrHostAddressConstKHR(pool, rootType, &from->transformData, (VkDeviceOrHostAddressConstKHR*)(&to->transformData));
 }
 
 void deepcopy_VkAccelerationStructureGeometryAabbsDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* from,
     VkAccelerationStructureGeometryAabbsDataKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDeviceOrHostAddressConstKHR(pool, &from->data, (VkDeviceOrHostAddressConstKHR*)(&to->data));
+    deepcopy_VkDeviceOrHostAddressConstKHR(pool, rootType, &from->data, (VkDeviceOrHostAddressConstKHR*)(&to->data));
 }
 
 void deepcopy_VkAccelerationStructureGeometryInstancesDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* from,
     VkAccelerationStructureGeometryInstancesDataKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDeviceOrHostAddressConstKHR(pool, &from->data, (VkDeviceOrHostAddressConstKHR*)(&to->data));
+    deepcopy_VkDeviceOrHostAddressConstKHR(pool, rootType, &from->data, (VkDeviceOrHostAddressConstKHR*)(&to->data));
 }
 
 void deepcopy_VkAccelerationStructureGeometryDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* from,
     VkAccelerationStructureGeometryDataKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
-    deepcopy_VkAccelerationStructureGeometryTrianglesDataKHR(pool, &from->triangles, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&to->triangles));
-    deepcopy_VkAccelerationStructureGeometryAabbsDataKHR(pool, &from->aabbs, (VkAccelerationStructureGeometryAabbsDataKHR*)(&to->aabbs));
-    deepcopy_VkAccelerationStructureGeometryInstancesDataKHR(pool, &from->instances, (VkAccelerationStructureGeometryInstancesDataKHR*)(&to->instances));
+    deepcopy_VkAccelerationStructureGeometryTrianglesDataKHR(pool, rootType, &from->triangles, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&to->triangles));
+    deepcopy_VkAccelerationStructureGeometryAabbsDataKHR(pool, rootType, &from->aabbs, (VkAccelerationStructureGeometryAabbsDataKHR*)(&to->aabbs));
+    deepcopy_VkAccelerationStructureGeometryInstancesDataKHR(pool, rootType, &from->instances, (VkAccelerationStructureGeometryInstancesDataKHR*)(&to->instances));
 }
 
 void deepcopy_VkAccelerationStructureGeometryKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* from,
     VkAccelerationStructureGeometryKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkAccelerationStructureGeometryDataKHR(pool, &from->geometry, (VkAccelerationStructureGeometryDataKHR*)(&to->geometry));
+    deepcopy_VkAccelerationStructureGeometryDataKHR(pool, rootType, &from->geometry, (VkAccelerationStructureGeometryDataKHR*)(&to->geometry));
 }
 
 void deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* from,
     VkAccelerationStructureBuildGeometryInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -13344,54 +16386,66 @@
             to->geometryCount = from->geometryCount;
             for (uint32_t i = 0; i < (uint32_t)from->geometryCount; ++i)
             {
-                deepcopy_VkAccelerationStructureGeometryKHR(pool, from->pGeometries + i, (VkAccelerationStructureGeometryKHR*)(to->pGeometries + i));
+                deepcopy_VkAccelerationStructureGeometryKHR(pool, rootType, from->pGeometries + i, (VkAccelerationStructureGeometryKHR*)(to->pGeometries + i));
             }
         }
     }
-    deepcopy_VkDeviceOrHostAddressKHR(pool, &from->scratchData, (VkDeviceOrHostAddressKHR*)(&to->scratchData));
+    deepcopy_VkDeviceOrHostAddressKHR(pool, rootType, &from->scratchData, (VkDeviceOrHostAddressKHR*)(&to->scratchData));
 }
 
 void deepcopy_VkAccelerationStructureCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* from,
     VkAccelerationStructureCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkWriteDescriptorSetAccelerationStructureKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* from,
     VkWriteDescriptorSetAccelerationStructureKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pAccelerationStructures = nullptr;
     if (from->pAccelerationStructures)
@@ -13402,89 +16456,113 @@
 
 void deepcopy_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* from,
     VkPhysicalDeviceAccelerationStructureFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* from,
     VkPhysicalDeviceAccelerationStructurePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAccelerationStructureDeviceAddressInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* from,
     VkAccelerationStructureDeviceAddressInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAccelerationStructureVersionInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* from,
     VkAccelerationStructureVersionInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pVersionData = nullptr;
     if (from->pVersionData)
@@ -13495,91 +16573,115 @@
 
 void deepcopy_VkCopyAccelerationStructureToMemoryInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* from,
     VkCopyAccelerationStructureToMemoryInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDeviceOrHostAddressKHR(pool, &from->dst, (VkDeviceOrHostAddressKHR*)(&to->dst));
+    deepcopy_VkDeviceOrHostAddressKHR(pool, rootType, &from->dst, (VkDeviceOrHostAddressKHR*)(&to->dst));
 }
 
 void deepcopy_VkCopyMemoryToAccelerationStructureInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* from,
     VkCopyMemoryToAccelerationStructureInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
-    deepcopy_VkDeviceOrHostAddressConstKHR(pool, &from->src, (VkDeviceOrHostAddressConstKHR*)(&to->src));
+    deepcopy_VkDeviceOrHostAddressConstKHR(pool, rootType, &from->src, (VkDeviceOrHostAddressConstKHR*)(&to->src));
 }
 
 void deepcopy_VkCopyAccelerationStructureInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* from,
     VkCopyAccelerationStructureInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkAccelerationStructureBuildSizesInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* from,
     VkAccelerationStructureBuildSizesInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
@@ -13587,23 +16689,29 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void deepcopy_VkRayTracingShaderGroupCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* from,
     VkRayTracingShaderGroupCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     to->pShaderGroupCaptureReplayHandle = nullptr;
     if (from->pShaderGroupCaptureReplayHandle)
@@ -13614,45 +16722,57 @@
 
 void deepcopy_VkRayTracingPipelineInterfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* from,
     VkRayTracingPipelineInterfaceCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkRayTracingPipelineCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* from,
     VkRayTracingPipelineCreateInfoKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (const void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
     if (from)
     {
@@ -13663,7 +16783,7 @@
             to->stageCount = from->stageCount;
             for (uint32_t i = 0; i < (uint32_t)from->stageCount; ++i)
             {
-                deepcopy_VkPipelineShaderStageCreateInfo(pool, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
+                deepcopy_VkPipelineShaderStageCreateInfo(pool, rootType, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
             }
         }
     }
@@ -13676,7 +16796,7 @@
             to->groupCount = from->groupCount;
             for (uint32_t i = 0; i < (uint32_t)from->groupCount; ++i)
             {
-                deepcopy_VkRayTracingShaderGroupCreateInfoKHR(pool, from->pGroups + i, (VkRayTracingShaderGroupCreateInfoKHR*)(to->pGroups + i));
+                deepcopy_VkRayTracingShaderGroupCreateInfoKHR(pool, rootType, from->pGroups + i, (VkRayTracingShaderGroupCreateInfoKHR*)(to->pGroups + i));
             }
         }
     }
@@ -13684,81 +16804,97 @@
     if (from->pLibraryInfo)
     {
         to->pLibraryInfo = (VkPipelineLibraryCreateInfoKHR*)pool->alloc(sizeof(const VkPipelineLibraryCreateInfoKHR));
-        deepcopy_VkPipelineLibraryCreateInfoKHR(pool, from->pLibraryInfo, (VkPipelineLibraryCreateInfoKHR*)(to->pLibraryInfo));
+        deepcopy_VkPipelineLibraryCreateInfoKHR(pool, rootType, from->pLibraryInfo, (VkPipelineLibraryCreateInfoKHR*)(to->pLibraryInfo));
     }
     to->pLibraryInterface = nullptr;
     if (from->pLibraryInterface)
     {
         to->pLibraryInterface = (VkRayTracingPipelineInterfaceCreateInfoKHR*)pool->alloc(sizeof(const VkRayTracingPipelineInterfaceCreateInfoKHR));
-        deepcopy_VkRayTracingPipelineInterfaceCreateInfoKHR(pool, from->pLibraryInterface, (VkRayTracingPipelineInterfaceCreateInfoKHR*)(to->pLibraryInterface));
+        deepcopy_VkRayTracingPipelineInterfaceCreateInfoKHR(pool, rootType, from->pLibraryInterface, (VkRayTracingPipelineInterfaceCreateInfoKHR*)(to->pLibraryInterface));
     }
     to->pDynamicState = nullptr;
     if (from->pDynamicState)
     {
         to->pDynamicState = (VkPipelineDynamicStateCreateInfo*)pool->alloc(sizeof(const VkPipelineDynamicStateCreateInfo));
-        deepcopy_VkPipelineDynamicStateCreateInfo(pool, from->pDynamicState, (VkPipelineDynamicStateCreateInfo*)(to->pDynamicState));
+        deepcopy_VkPipelineDynamicStateCreateInfo(pool, rootType, from->pDynamicState, (VkPipelineDynamicStateCreateInfo*)(to->pDynamicState));
     }
 }
 
 void deepcopy_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* from,
     VkPhysicalDeviceRayTracingPipelineFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* from,
     VkPhysicalDeviceRayTracingPipelinePropertiesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 void deepcopy_VkStridedDeviceAddressRegionKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* from,
     VkStridedDeviceAddressRegionKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
 void deepcopy_VkTraceRaysIndirectCommandKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* from,
     VkTraceRaysIndirectCommandKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
 }
 
@@ -13766,29 +16902,36 @@
 #ifdef VK_KHR_ray_query
 void deepcopy_VkPhysicalDeviceRayQueryFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* from,
     VkPhysicalDeviceRayQueryFeaturesKHR* to)
 {
     (void)pool;
+    (void)rootType;
     *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = from->sType;
+    }
     const void* from_pNext = from;
     size_t pNext_size = 0u;
     while (!pNext_size && from_pNext)
     {
         from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(from_pNext);
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
     }
     to->pNext = nullptr;
     if (pNext_size)
     {
         to->pNext = (void*)pool->alloc(pNext_size);
-        deepcopy_extension_struct(pool, from_pNext, (void*)(to->pNext));
+        deepcopy_extension_struct(pool, rootType, from_pNext, (void*)(to->pNext));
     }
 }
 
 #endif
 void deepcopy_extension_struct(
     BumpPool* pool,
+    VkStructureType rootType,
     const void* structExtension,
     void* structExtension_out)
 {
@@ -13802,1535 +16945,1613 @@
 #ifdef VK_VERSION_1_1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceSubgroupProperties(pool, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSubgroupProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
         {
-            deepcopy_VkPhysicalDevice16BitStorageFeatures(pool, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDevice16BitStorageFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
         {
-            deepcopy_VkMemoryDedicatedRequirements(pool, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
+            deepcopy_VkMemoryDedicatedRequirements(pool, rootType, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
         {
-            deepcopy_VkMemoryDedicatedAllocateInfo(pool, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
+            deepcopy_VkMemoryDedicatedAllocateInfo(pool, rootType, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
         {
-            deepcopy_VkMemoryAllocateFlagsInfo(pool, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
+            deepcopy_VkMemoryAllocateFlagsInfo(pool, rootType, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
         {
-            deepcopy_VkDeviceGroupRenderPassBeginInfo(pool, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
+            deepcopy_VkDeviceGroupRenderPassBeginInfo(pool, rootType, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
         {
-            deepcopy_VkDeviceGroupCommandBufferBeginInfo(pool, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
+            deepcopy_VkDeviceGroupCommandBufferBeginInfo(pool, rootType, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
         {
-            deepcopy_VkDeviceGroupSubmitInfo(pool, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
+            deepcopy_VkDeviceGroupSubmitInfo(pool, rootType, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
         {
-            deepcopy_VkDeviceGroupBindSparseInfo(pool, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
+            deepcopy_VkDeviceGroupBindSparseInfo(pool, rootType, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
         {
-            deepcopy_VkBindBufferMemoryDeviceGroupInfo(pool, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
+            deepcopy_VkBindBufferMemoryDeviceGroupInfo(pool, rootType, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
         {
-            deepcopy_VkBindImageMemoryDeviceGroupInfo(pool, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
+            deepcopy_VkBindImageMemoryDeviceGroupInfo(pool, rootType, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
         {
-            deepcopy_VkDeviceGroupDeviceCreateInfo(pool, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
+            deepcopy_VkDeviceGroupDeviceCreateInfo(pool, rootType, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
         {
-            deepcopy_VkPhysicalDeviceFeatures2(pool, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFeatures2(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
         {
-            deepcopy_VkPhysicalDevicePointClippingProperties(pool, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePointClippingProperties(pool, rootType, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
         {
-            deepcopy_VkRenderPassInputAttachmentAspectCreateInfo(pool, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
+            deepcopy_VkRenderPassInputAttachmentAspectCreateInfo(pool, rootType, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
         {
-            deepcopy_VkImageViewUsageCreateInfo(pool, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
+            deepcopy_VkImageViewUsageCreateInfo(pool, rootType, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
         {
-            deepcopy_VkPipelineTessellationDomainOriginStateCreateInfo(pool, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
+            deepcopy_VkPipelineTessellationDomainOriginStateCreateInfo(pool, rootType, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
         {
-            deepcopy_VkRenderPassMultiviewCreateInfo(pool, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
+            deepcopy_VkRenderPassMultiviewCreateInfo(pool, rootType, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceMultiviewFeatures(pool, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMultiviewFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceMultiviewProperties(pool, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMultiviewProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceVariablePointersFeatures(pool, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceVariablePointersFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVariablePointersFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceVariablePointersFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceProtectedMemoryFeatures(pool, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceProtectedMemoryFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceProtectedMemoryProperties(pool, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceProtectedMemoryProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
         {
-            deepcopy_VkProtectedSubmitInfo(pool, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
+            deepcopy_VkProtectedSubmitInfo(pool, rootType, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
         {
-            deepcopy_VkSamplerYcbcrConversionInfo(pool, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
+            deepcopy_VkSamplerYcbcrConversionInfo(pool, rootType, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
         {
-            deepcopy_VkBindImagePlaneMemoryInfo(pool, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
+            deepcopy_VkBindImagePlaneMemoryInfo(pool, rootType, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
         {
-            deepcopy_VkImagePlaneMemoryRequirementsInfo(pool, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
+            deepcopy_VkImagePlaneMemoryRequirementsInfo(pool, rootType, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceSamplerYcbcrConversionFeatures(pool, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSamplerYcbcrConversionFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
         {
-            deepcopy_VkSamplerYcbcrConversionImageFormatProperties(pool, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
+            deepcopy_VkSamplerYcbcrConversionImageFormatProperties(pool, rootType, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
         {
-            deepcopy_VkPhysicalDeviceExternalImageFormatInfo(pool, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceExternalImageFormatInfo(pool, rootType, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
         {
-            deepcopy_VkExternalImageFormatProperties(pool, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
+            deepcopy_VkExternalImageFormatProperties(pool, rootType, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceIDProperties(pool, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceIDProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
         {
-            deepcopy_VkExternalMemoryImageCreateInfo(pool, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
+            deepcopy_VkExternalMemoryImageCreateInfo(pool, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
         {
-            deepcopy_VkExternalMemoryBufferCreateInfo(pool, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
+            deepcopy_VkExternalMemoryBufferCreateInfo(pool, rootType, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
         {
-            deepcopy_VkExportMemoryAllocateInfo(pool, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
+            deepcopy_VkExportMemoryAllocateInfo(pool, rootType, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
         {
-            deepcopy_VkExportFenceCreateInfo(pool, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
+            deepcopy_VkExportFenceCreateInfo(pool, rootType, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
         {
-            deepcopy_VkExportSemaphoreCreateInfo(pool, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
+            deepcopy_VkExportSemaphoreCreateInfo(pool, rootType, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceMaintenance3Properties(pool, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMaintenance3Properties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceShaderDrawParametersFeatures(pool, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderDrawParametersFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_VERSION_1_2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceVulkan11Features(pool, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan11Features*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVulkan11Features(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan11Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceVulkan11Properties(pool, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan11Properties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVulkan11Properties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan11Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceVulkan12Features(pool, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan12Features*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVulkan12Features(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan12Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceVulkan12Properties(pool, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan12Properties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVulkan12Properties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkan12Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
         {
-            deepcopy_VkImageFormatListCreateInfo(pool, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension), reinterpret_cast<VkImageFormatListCreateInfo*>(structExtension_out));
+            deepcopy_VkImageFormatListCreateInfo(pool, rootType, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension), reinterpret_cast<VkImageFormatListCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
         {
-            deepcopy_VkPhysicalDevice8BitStorageFeatures(pool, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension), reinterpret_cast<VkPhysicalDevice8BitStorageFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDevice8BitStorageFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension), reinterpret_cast<VkPhysicalDevice8BitStorageFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceDriverProperties(pool, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceDriverProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDriverProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceDriverProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceShaderAtomicInt64Features(pool, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderAtomicInt64Features(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceShaderFloat16Int8Features(pool, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderFloat16Int8Features(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceFloatControlsProperties(pool, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceFloatControlsProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFloatControlsProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceFloatControlsProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
         {
-            deepcopy_VkDescriptorSetLayoutBindingFlagsCreateInfo(pool, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension), reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension_out));
+            deepcopy_VkDescriptorSetLayoutBindingFlagsCreateInfo(pool, rootType, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension), reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceDescriptorIndexingFeatures(pool, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDescriptorIndexingFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceDescriptorIndexingProperties(pool, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDescriptorIndexingProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
         {
-            deepcopy_VkDescriptorSetVariableDescriptorCountAllocateInfo(pool, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension), reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension_out));
+            deepcopy_VkDescriptorSetVariableDescriptorCountAllocateInfo(pool, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension), reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
         {
-            deepcopy_VkDescriptorSetVariableDescriptorCountLayoutSupport(pool, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension), reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension_out));
+            deepcopy_VkDescriptorSetVariableDescriptorCountLayoutSupport(pool, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension), reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:
         {
-            deepcopy_VkSubpassDescriptionDepthStencilResolve(pool, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension), reinterpret_cast<VkSubpassDescriptionDepthStencilResolve*>(structExtension_out));
+            deepcopy_VkSubpassDescriptionDepthStencilResolve(pool, rootType, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension), reinterpret_cast<VkSubpassDescriptionDepthStencilResolve*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceDepthStencilResolveProperties(pool, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDepthStencilResolveProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceScalarBlockLayoutFeatures(pool, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceScalarBlockLayoutFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
         {
-            deepcopy_VkImageStencilUsageCreateInfo(pool, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension), reinterpret_cast<VkImageStencilUsageCreateInfo*>(structExtension_out));
+            deepcopy_VkImageStencilUsageCreateInfo(pool, rootType, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension), reinterpret_cast<VkImageStencilUsageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
         {
-            deepcopy_VkSamplerReductionModeCreateInfo(pool, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension), reinterpret_cast<VkSamplerReductionModeCreateInfo*>(structExtension_out));
+            deepcopy_VkSamplerReductionModeCreateInfo(pool, rootType, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension), reinterpret_cast<VkSamplerReductionModeCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceSamplerFilterMinmaxProperties(pool, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSamplerFilterMinmaxProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceVulkanMemoryModelFeatures(pool, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVulkanMemoryModelFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceImagelessFramebufferFeatures(pool, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceImagelessFramebufferFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
         {
-            deepcopy_VkFramebufferAttachmentsCreateInfo(pool, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension), reinterpret_cast<VkFramebufferAttachmentsCreateInfo*>(structExtension_out));
+            deepcopy_VkFramebufferAttachmentsCreateInfo(pool, rootType, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension), reinterpret_cast<VkFramebufferAttachmentsCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
         {
-            deepcopy_VkRenderPassAttachmentBeginInfo(pool, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension), reinterpret_cast<VkRenderPassAttachmentBeginInfo*>(structExtension_out));
+            deepcopy_VkRenderPassAttachmentBeginInfo(pool, rootType, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension), reinterpret_cast<VkRenderPassAttachmentBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(pool, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(pool, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(pool, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
         {
-            deepcopy_VkAttachmentReferenceStencilLayout(pool, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension), reinterpret_cast<VkAttachmentReferenceStencilLayout*>(structExtension_out));
+            deepcopy_VkAttachmentReferenceStencilLayout(pool, rootType, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension), reinterpret_cast<VkAttachmentReferenceStencilLayout*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:
         {
-            deepcopy_VkAttachmentDescriptionStencilLayout(pool, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension), reinterpret_cast<VkAttachmentDescriptionStencilLayout*>(structExtension_out));
+            deepcopy_VkAttachmentDescriptionStencilLayout(pool, rootType, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension), reinterpret_cast<VkAttachmentDescriptionStencilLayout*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceHostQueryResetFeatures(pool, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceHostQueryResetFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceHostQueryResetFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceHostQueryResetFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceTimelineSemaphoreFeatures(pool, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTimelineSemaphoreFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
         {
-            deepcopy_VkPhysicalDeviceTimelineSemaphoreProperties(pool, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTimelineSemaphoreProperties(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
         {
-            deepcopy_VkSemaphoreTypeCreateInfo(pool, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension), reinterpret_cast<VkSemaphoreTypeCreateInfo*>(structExtension_out));
+            deepcopy_VkSemaphoreTypeCreateInfo(pool, rootType, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension), reinterpret_cast<VkSemaphoreTypeCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
         {
-            deepcopy_VkTimelineSemaphoreSubmitInfo(pool, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension), reinterpret_cast<VkTimelineSemaphoreSubmitInfo*>(structExtension_out));
+            deepcopy_VkTimelineSemaphoreSubmitInfo(pool, rootType, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension), reinterpret_cast<VkTimelineSemaphoreSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
         {
-            deepcopy_VkPhysicalDeviceBufferDeviceAddressFeatures(pool, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceBufferDeviceAddressFeatures(pool, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
         {
-            deepcopy_VkBufferOpaqueCaptureAddressCreateInfo(pool, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension), reinterpret_cast<VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension_out));
+            deepcopy_VkBufferOpaqueCaptureAddressCreateInfo(pool, rootType, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension), reinterpret_cast<VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
         {
-            deepcopy_VkMemoryOpaqueCaptureAddressAllocateInfo(pool, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension), reinterpret_cast<VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension_out));
+            deepcopy_VkMemoryOpaqueCaptureAddressAllocateInfo(pool, rootType, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension), reinterpret_cast<VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_swapchain
         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            deepcopy_VkImageSwapchainCreateInfoKHR(pool, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
+            deepcopy_VkImageSwapchainCreateInfoKHR(pool, rootType, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
         {
-            deepcopy_VkBindImageMemorySwapchainInfoKHR(pool, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
+            deepcopy_VkBindImageMemorySwapchainInfoKHR(pool, rootType, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
         {
-            deepcopy_VkDeviceGroupPresentInfoKHR(pool, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
+            deepcopy_VkDeviceGroupPresentInfoKHR(pool, rootType, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            deepcopy_VkDeviceGroupSwapchainCreateInfoKHR(pool, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
+            deepcopy_VkDeviceGroupSwapchainCreateInfoKHR(pool, rootType, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_display_swapchain
         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
         {
-            deepcopy_VkDisplayPresentInfoKHR(pool, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
+            deepcopy_VkDisplayPresentInfoKHR(pool, rootType, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            deepcopy_VkImportMemoryWin32HandleInfoKHR(pool, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            deepcopy_VkImportMemoryWin32HandleInfoKHR(pool, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            deepcopy_VkExportMemoryWin32HandleInfoKHR(pool, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            deepcopy_VkExportMemoryWin32HandleInfoKHR(pool, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_fd
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
         {
-            deepcopy_VkImportMemoryFdInfoKHR(pool, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
+            deepcopy_VkImportMemoryFdInfoKHR(pool, rootType, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
         {
-            deepcopy_VkWin32KeyedMutexAcquireReleaseInfoKHR(pool, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
+            deepcopy_VkWin32KeyedMutexAcquireReleaseInfoKHR(pool, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_semaphore_win32
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
         {
-            deepcopy_VkExportSemaphoreWin32HandleInfoKHR(pool, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
+            deepcopy_VkExportSemaphoreWin32HandleInfoKHR(pool, rootType, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
         {
-            deepcopy_VkD3D12FenceSubmitInfoKHR(pool, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
+            deepcopy_VkD3D12FenceSubmitInfoKHR(pool, rootType, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_push_descriptor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
         {
-            deepcopy_VkPhysicalDevicePushDescriptorPropertiesKHR(pool, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePushDescriptorPropertiesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_incremental_present
         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
         {
-            deepcopy_VkPresentRegionsKHR(pool, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
+            deepcopy_VkPresentRegionsKHR(pool, rootType, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shared_presentable_image
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
         {
-            deepcopy_VkSharedPresentSurfaceCapabilitiesKHR(pool, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
+            deepcopy_VkSharedPresentSurfaceCapabilitiesKHR(pool, rootType, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_fence_win32
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
         {
-            deepcopy_VkExportFenceWin32HandleInfoKHR(pool, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
+            deepcopy_VkExportFenceWin32HandleInfoKHR(pool, rootType, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_performance_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDevicePerformanceQueryFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePerformanceQueryFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
         {
-            deepcopy_VkPhysicalDevicePerformanceQueryPropertiesKHR(pool, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePerformanceQueryPropertiesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:
         {
-            deepcopy_VkQueryPoolPerformanceCreateInfoKHR(pool, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension), reinterpret_cast<VkQueryPoolPerformanceCreateInfoKHR*>(structExtension_out));
+            deepcopy_VkQueryPoolPerformanceCreateInfoKHR(pool, rootType, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension), reinterpret_cast<VkQueryPoolPerformanceCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:
         {
-            deepcopy_VkPerformanceQuerySubmitInfoKHR(pool, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension), reinterpret_cast<VkPerformanceQuerySubmitInfoKHR*>(structExtension_out));
+            deepcopy_VkPerformanceQuerySubmitInfoKHR(pool, rootType, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension), reinterpret_cast<VkPerformanceQuerySubmitInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_portability_subset
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDevicePortabilitySubsetFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePortabilitySubsetFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR:
         {
-            deepcopy_VkPhysicalDevicePortabilitySubsetPropertiesKHR(pool, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePortabilitySubsetPropertiesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shader_clock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDeviceShaderClockFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderClockFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shader_terminate_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_fragment_shading_rate
         case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
         {
-            deepcopy_VkFragmentShadingRateAttachmentInfoKHR(pool, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension), reinterpret_cast<VkFragmentShadingRateAttachmentInfoKHR*>(structExtension_out));
+            deepcopy_VkFragmentShadingRateAttachmentInfoKHR(pool, rootType, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension), reinterpret_cast<VkFragmentShadingRateAttachmentInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:
         {
-            deepcopy_VkPipelineFragmentShadingRateStateCreateInfoKHR(pool, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension), reinterpret_cast<VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension_out));
+            deepcopy_VkPipelineFragmentShadingRateStateCreateInfoKHR(pool, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension), reinterpret_cast<VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
         {
-            deepcopy_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(pool, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_surface_protected_capabilities
         case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:
         {
-            deepcopy_VkSurfaceProtectedCapabilitiesKHR(pool, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension), reinterpret_cast<VkSurfaceProtectedCapabilitiesKHR*>(structExtension_out));
+            deepcopy_VkSurfaceProtectedCapabilitiesKHR(pool, rootType, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension), reinterpret_cast<VkSurfaceProtectedCapabilitiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_pipeline_executable_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
         {
-            deepcopy_VkNativeBufferANDROID(pool, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
+            deepcopy_VkNativeBufferANDROID(pool, rootType, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_report
         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
         {
-            deepcopy_VkDebugReportCallbackCreateInfoEXT(pool, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkDebugReportCallbackCreateInfoEXT(pool, rootType, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_rasterization_order
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
         {
-            deepcopy_VkPipelineRasterizationStateRasterizationOrderAMD(pool, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
+            deepcopy_VkPipelineRasterizationStateRasterizationOrderAMD(pool, rootType, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
         {
-            deepcopy_VkDedicatedAllocationImageCreateInfoNV(pool, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
+            deepcopy_VkDedicatedAllocationImageCreateInfoNV(pool, rootType, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
         {
-            deepcopy_VkDedicatedAllocationBufferCreateInfoNV(pool, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
+            deepcopy_VkDedicatedAllocationBufferCreateInfoNV(pool, rootType, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
         {
-            deepcopy_VkDedicatedAllocationMemoryAllocateInfoNV(pool, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
+            deepcopy_VkDedicatedAllocationMemoryAllocateInfoNV(pool, rootType, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_transform_feedback
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceTransformFeedbackFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTransformFeedbackFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceTransformFeedbackPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTransformFeedbackPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineRasterizationStateStreamCreateInfoEXT(pool, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineRasterizationStateStreamCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
         {
-            deepcopy_VkTextureLODGatherFormatPropertiesAMD(pool, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
+            deepcopy_VkTextureLODGatherFormatPropertiesAMD(pool, rootType, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_corner_sampled_image
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceCornerSampledImageFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCornerSampledImageFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
         {
-            deepcopy_VkExternalMemoryImageCreateInfoNV(pool, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
+            deepcopy_VkExternalMemoryImageCreateInfoNV(pool, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
         {
-            deepcopy_VkExportMemoryAllocateInfoNV(pool, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
+            deepcopy_VkExportMemoryAllocateInfoNV(pool, rootType, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            deepcopy_VkImportMemoryWin32HandleInfoNV(pool, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
+            deepcopy_VkImportMemoryWin32HandleInfoNV(pool, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            deepcopy_VkExportMemoryWin32HandleInfoNV(pool, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
+            deepcopy_VkExportMemoryWin32HandleInfoNV(pool, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
         {
-            deepcopy_VkWin32KeyedMutexAcquireReleaseInfoNV(pool, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
+            deepcopy_VkWin32KeyedMutexAcquireReleaseInfoNV(pool, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_flags
         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
         {
-            deepcopy_VkValidationFlagsEXT(pool, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
+            deepcopy_VkValidationFlagsEXT(pool, rootType, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_texture_compression_astc_hdr
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_astc_decode_mode
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:
         {
-            deepcopy_VkImageViewASTCDecodeModeEXT(pool, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension), reinterpret_cast<VkImageViewASTCDecodeModeEXT*>(structExtension_out));
+            deepcopy_VkImageViewASTCDecodeModeEXT(pool, rootType, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension), reinterpret_cast<VkImageViewASTCDecodeModeEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceASTCDecodeFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceASTCDecodeFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_conditional_rendering
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceConditionalRenderingFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceConditionalRenderingFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
         {
-            deepcopy_VkCommandBufferInheritanceConditionalRenderingInfoEXT(pool, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension_out));
+            deepcopy_VkCommandBufferInheritanceConditionalRenderingInfoEXT(pool, rootType, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_clip_space_w_scaling
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineViewportWScalingStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineViewportWScalingStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_display_control
         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
         {
-            deepcopy_VkSwapchainCounterCreateInfoEXT(pool, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkSwapchainCounterCreateInfoEXT(pool, rootType, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_GOOGLE_display_timing
         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
         {
-            deepcopy_VkPresentTimesInfoGOOGLE(pool, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), reinterpret_cast<VkPresentTimesInfoGOOGLE*>(structExtension_out));
+            deepcopy_VkPresentTimesInfoGOOGLE(pool, rootType, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), reinterpret_cast<VkPresentTimesInfoGOOGLE*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
         {
-            deepcopy_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(pool, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_viewport_swizzle
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineViewportSwizzleStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineViewportSwizzleStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_discard_rectangles
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceDiscardRectanglePropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDiscardRectanglePropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineDiscardRectangleStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineDiscardRectangleStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_conservative_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineRasterizationConservativeStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineRasterizationConservativeStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_depth_clip_enable
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceDepthClipEnableFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDepthClipEnableFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineRasterizationDepthClipStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineRasterizationDepthClipStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_utils
         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
         {
-            deepcopy_VkDebugUtilsMessengerCreateInfoEXT(pool, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkDebugUtilsMessengerCreateInfoEXT(pool, rootType, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
         {
-            deepcopy_VkAndroidHardwareBufferUsageANDROID(pool, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
+            deepcopy_VkAndroidHardwareBufferUsageANDROID(pool, rootType, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
         {
-            deepcopy_VkAndroidHardwareBufferFormatPropertiesANDROID(pool, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
+            deepcopy_VkAndroidHardwareBufferFormatPropertiesANDROID(pool, rootType, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
         {
-            deepcopy_VkImportAndroidHardwareBufferInfoANDROID(pool, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
+            deepcopy_VkImportAndroidHardwareBufferInfoANDROID(pool, rootType, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
         {
-            deepcopy_VkExternalFormatANDROID(pool, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
+            deepcopy_VkExternalFormatANDROID(pool, rootType, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_inline_uniform_block
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
         {
-            deepcopy_VkWriteDescriptorSetInlineUniformBlockEXT(pool, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension), reinterpret_cast<VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension_out));
+            deepcopy_VkWriteDescriptorSetInlineUniformBlockEXT(pool, rootType, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension), reinterpret_cast<VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
         {
-            deepcopy_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(pool, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension), reinterpret_cast<VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(pool, rootType, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension), reinterpret_cast<VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_sample_locations
         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
         {
-            deepcopy_VkSampleLocationsInfoEXT(pool, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
+            deepcopy_VkSampleLocationsInfoEXT(pool, rootType, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
         {
-            deepcopy_VkRenderPassSampleLocationsBeginInfoEXT(pool, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
+            deepcopy_VkRenderPassSampleLocationsBeginInfoEXT(pool, rootType, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineSampleLocationsStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineSampleLocationsStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceSampleLocationsPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSampleLocationsPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_blend_operation_advanced
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineColorBlendAdvancedStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineColorBlendAdvancedStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineCoverageToColorStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineCoverageToColorStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineCoverageModulationStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineCoverageModulationStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_shader_sm_builtins
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_image_drm_format_modifier
         case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
         {
-            deepcopy_VkDrmFormatModifierPropertiesListEXT(pool, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension), reinterpret_cast<VkDrmFormatModifierPropertiesListEXT*>(structExtension_out));
+            deepcopy_VkDrmFormatModifierPropertiesListEXT(pool, rootType, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension), reinterpret_cast<VkDrmFormatModifierPropertiesListEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
         {
-            deepcopy_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(pool, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
         {
-            deepcopy_VkImageDrmFormatModifierListCreateInfoEXT(pool, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension), reinterpret_cast<VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkImageDrmFormatModifierListCreateInfoEXT(pool, rootType, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension), reinterpret_cast<VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
         {
-            deepcopy_VkImageDrmFormatModifierExplicitCreateInfoEXT(pool, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension), reinterpret_cast<VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkImageDrmFormatModifierExplicitCreateInfoEXT(pool, rootType, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension), reinterpret_cast<VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_cache
         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
         {
-            deepcopy_VkShaderModuleValidationCacheCreateInfoEXT(pool, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkShaderModuleValidationCacheCreateInfoEXT(pool, rootType, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_shading_rate_image
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineViewportShadingRateImageStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineViewportShadingRateImageStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceShadingRateImageFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShadingRateImageFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceShadingRateImagePropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShadingRateImagePropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_ray_tracing
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
         {
-            deepcopy_VkWriteDescriptorSetAccelerationStructureNV(pool, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension), reinterpret_cast<VkWriteDescriptorSetAccelerationStructureNV*>(structExtension_out));
+            deepcopy_VkWriteDescriptorSetAccelerationStructureNV(pool, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension), reinterpret_cast<VkWriteDescriptorSetAccelerationStructureNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceRayTracingPropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRayTracingPropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_representative_fragment_test
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_filter_cubic
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
         {
-            deepcopy_VkPhysicalDeviceImageViewImageFormatInfoEXT(pool, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceImageViewImageFormatInfoEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:
         {
-            deepcopy_VkFilterCubicImageViewImageFormatPropertiesEXT(pool, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension), reinterpret_cast<VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension_out));
+            deepcopy_VkFilterCubicImageViewImageFormatPropertiesEXT(pool, rootType, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension), reinterpret_cast<VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_global_priority
         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
         {
-            deepcopy_VkDeviceQueueGlobalPriorityCreateInfoEXT(pool, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkDeviceQueueGlobalPriorityCreateInfoEXT(pool, rootType, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_external_memory_host
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
         {
-            deepcopy_VkImportMemoryHostPointerInfoEXT(pool, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
+            deepcopy_VkImportMemoryHostPointerInfoEXT(pool, rootType, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_pipeline_compiler_control
         case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:
         {
-            deepcopy_VkPipelineCompilerControlCreateInfoAMD(pool, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension), reinterpret_cast<VkPipelineCompilerControlCreateInfoAMD*>(structExtension_out));
+            deepcopy_VkPipelineCompilerControlCreateInfoAMD(pool, rootType, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension), reinterpret_cast<VkPipelineCompilerControlCreateInfoAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
         {
-            deepcopy_VkPhysicalDeviceShaderCorePropertiesAMD(pool, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderCorePropertiesAMD(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_memory_overallocation_behavior
         case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
         {
-            deepcopy_VkDeviceMemoryOverallocationCreateInfoAMD(pool, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension), reinterpret_cast<VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension_out));
+            deepcopy_VkDeviceMemoryOverallocationCreateInfoAMD(pool, rootType, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension), reinterpret_cast<VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineVertexInputDivisorStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineVertexInputDivisorStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_GGP_frame_token
         case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:
         {
-            deepcopy_VkPresentFrameTokenGGP(pool, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension), reinterpret_cast<VkPresentFrameTokenGGP*>(structExtension_out));
+            deepcopy_VkPresentFrameTokenGGP(pool, rootType, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension), reinterpret_cast<VkPresentFrameTokenGGP*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_feedback
         case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineCreationFeedbackCreateInfoEXT(pool, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineCreationFeedbackCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_compute_shader_derivatives
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_mesh_shader
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceMeshShaderFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMeshShaderFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceMeshShaderPropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMeshShaderPropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shader_barycentric
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_shader_image_footprint
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceShaderImageFootprintFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderImageFootprintFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_scissor_exclusive
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineViewportExclusiveScissorStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineViewportExclusiveScissorStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceExclusiveScissorFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceExclusiveScissorFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
         {
-            deepcopy_VkQueueFamilyCheckpointPropertiesNV(pool, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
+            deepcopy_VkQueueFamilyCheckpointPropertiesNV(pool, rootType, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_INTEL_shader_integer_functions2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
         {
-            deepcopy_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(pool, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_INTEL_performance_query
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL:
         {
-            deepcopy_VkQueryPoolPerformanceQueryCreateInfoINTEL(pool, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension), reinterpret_cast<VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension_out));
+            deepcopy_VkQueryPoolPerformanceQueryCreateInfoINTEL(pool, rootType, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension), reinterpret_cast<VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_pci_bus_info
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDevicePCIBusInfoPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePCIBusInfoPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_display_native_hdr
         case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:
         {
-            deepcopy_VkDisplayNativeHdrSurfaceCapabilitiesAMD(pool, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension), reinterpret_cast<VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension_out));
+            deepcopy_VkDisplayNativeHdrSurfaceCapabilitiesAMD(pool, rootType, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension), reinterpret_cast<VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
         {
-            deepcopy_VkSwapchainDisplayNativeHdrCreateInfoAMD(pool, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension), reinterpret_cast<VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension_out));
+            deepcopy_VkSwapchainDisplayNativeHdrCreateInfoAMD(pool, rootType, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension), reinterpret_cast<VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension_out));
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            deepcopy_VkImportColorBufferGOOGLE(pool, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    deepcopy_VkImportColorBufferGOOGLE(pool, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+                    break;
+                }
+                default:
+                {
+                    deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            deepcopy_VkImportBufferGOOGLE(pool, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    deepcopy_VkImportPhysicalAddressGOOGLE(pool, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+                    break;
+                }
+                default:
+                {
+                    deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            deepcopy_VkImportPhysicalAddressGOOGLE(pool, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT(pool, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT(pool, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    deepcopy_VkImportBufferGOOGLE(pool, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+                    break;
+                }
+                default:
+                {
+                    deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT(pool, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
+                    break;
+                }
+            }
             break;
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(pool, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:
         {
-            deepcopy_VkPhysicalDeviceShaderCoreProperties2AMD(pool, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderCoreProperties2AMD(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_device_coherent_memory
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
         {
-            deepcopy_VkPhysicalDeviceCoherentMemoryFeaturesAMD(pool, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCoherentMemoryFeaturesAMD(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_image_atomic_int64
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_memory_budget
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceMemoryBudgetPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMemoryBudgetPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_memory_priority
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceMemoryPriorityFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceMemoryPriorityFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:
         {
-            deepcopy_VkMemoryPriorityAllocateInfoEXT(pool, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension), reinterpret_cast<VkMemoryPriorityAllocateInfoEXT*>(structExtension_out));
+            deepcopy_VkMemoryPriorityAllocateInfoEXT(pool, rootType, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension), reinterpret_cast<VkMemoryPriorityAllocateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation_image_aliasing
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_buffer_device_address
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
         {
-            deepcopy_VkBufferDeviceAddressCreateInfoEXT(pool, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension), reinterpret_cast<VkBufferDeviceAddressCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkBufferDeviceAddressCreateInfoEXT(pool, rootType, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension), reinterpret_cast<VkBufferDeviceAddressCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_features
         case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:
         {
-            deepcopy_VkValidationFeaturesEXT(pool, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension), reinterpret_cast<VkValidationFeaturesEXT*>(structExtension_out));
+            deepcopy_VkValidationFeaturesEXT(pool, rootType, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension), reinterpret_cast<VkValidationFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_cooperative_matrix
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceCooperativeMatrixFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCooperativeMatrixFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceCooperativeMatrixPropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCooperativeMatrixPropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_coverage_reduction_mode
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceCoverageReductionModeFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCoverageReductionModeFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineCoverageReductionStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineCoverageReductionStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_shader_interlock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_full_screen_exclusive
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:
         {
-            deepcopy_VkSurfaceFullScreenExclusiveInfoEXT(pool, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension), reinterpret_cast<VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension_out));
+            deepcopy_VkSurfaceFullScreenExclusiveInfoEXT(pool, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension), reinterpret_cast<VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:
         {
-            deepcopy_VkSurfaceCapabilitiesFullScreenExclusiveEXT(pool, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension), reinterpret_cast<VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension_out));
+            deepcopy_VkSurfaceCapabilitiesFullScreenExclusiveEXT(pool, rootType, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension), reinterpret_cast<VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:
         {
-            deepcopy_VkSurfaceFullScreenExclusiveWin32InfoEXT(pool, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension), reinterpret_cast<VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension_out));
+            deepcopy_VkSurfaceFullScreenExclusiveWin32InfoEXT(pool, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension), reinterpret_cast<VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_line_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceLineRasterizationFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceLineRasterizationFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceLineRasterizationPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceLineRasterizationPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
         {
-            deepcopy_VkPipelineRasterizationLineStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkPipelineRasterizationLineStateCreateInfoEXT(pool, rootType, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_atomic_float
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_index_type_uint8
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_extended_dynamic_state
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_generated_commands
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV:
         {
-            deepcopy_VkGraphicsPipelineShaderGroupsCreateInfoNV(pool, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension), reinterpret_cast<VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension_out));
+            deepcopy_VkGraphicsPipelineShaderGroupsCreateInfoNV(pool, rootType, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension), reinterpret_cast<VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_texel_buffer_alignment
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_QCOM_render_pass_transform
         case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
         {
-            deepcopy_VkRenderPassTransformBeginInfoQCOM(pool, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension), reinterpret_cast<VkRenderPassTransformBeginInfoQCOM*>(structExtension_out));
+            deepcopy_VkRenderPassTransformBeginInfoQCOM(pool, rootType, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension), reinterpret_cast<VkRenderPassTransformBeginInfoQCOM*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
         {
-            deepcopy_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(pool, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension), reinterpret_cast<VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension_out));
+            deepcopy_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(pool, rootType, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension), reinterpret_cast<VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_device_memory_report
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
         {
-            deepcopy_VkDeviceDeviceMemoryReportCreateInfoEXT(pool, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension), reinterpret_cast<VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkDeviceDeviceMemoryReportCreateInfoEXT(pool, rootType, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension), reinterpret_cast<VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_robustness2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceRobustness2FeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRobustness2FeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceRobustness2PropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRobustness2PropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_custom_border_color
         case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
         {
-            deepcopy_VkSamplerCustomBorderColorCreateInfoEXT(pool, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension), reinterpret_cast<VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkSamplerCustomBorderColorCreateInfoEXT(pool, rootType, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension), reinterpret_cast<VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceCustomBorderColorPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCustomBorderColorPropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceCustomBorderColorFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceCustomBorderColorFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_private_data
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDevicePrivateDataFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePrivateDataFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
         {
-            deepcopy_VkDevicePrivateDataCreateInfoEXT(pool, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension), reinterpret_cast<VkDevicePrivateDataCreateInfoEXT*>(structExtension_out));
+            deepcopy_VkDevicePrivateDataCreateInfoEXT(pool, rootType, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension), reinterpret_cast<VkDevicePrivateDataCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_cache_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostics_config
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV:
         {
-            deepcopy_VkDeviceDiagnosticsConfigCreateInfoNV(pool, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension), reinterpret_cast<VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension_out));
+            deepcopy_VkDeviceDiagnosticsConfigCreateInfoNV(pool, rootType, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension), reinterpret_cast<VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shading_rate_enums
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
         {
-            deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(pool, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:
         {
-            deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(pool, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:
         {
-            deepcopy_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension_out));
+            deepcopy_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(pool, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_density_map2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:
         {
-            deepcopy_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
         case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
         {
-            deepcopy_VkCopyCommandTransformInfoQCOM(pool, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension), reinterpret_cast<VkCopyCommandTransformInfoQCOM*>(structExtension_out));
+            deepcopy_VkCopyCommandTransformInfoQCOM(pool, rootType, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension), reinterpret_cast<VkCopyCommandTransformInfoQCOM*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_image_robustness
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDeviceImageRobustnessFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceImageRobustnessFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_4444_formats
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
         {
-            deepcopy_VkPhysicalDevice4444FormatsFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension_out));
+            deepcopy_VkPhysicalDevice4444FormatsFeaturesEXT(pool, rootType, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            deepcopy_VkImportColorBufferGOOGLE(pool, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            deepcopy_VkImportBufferGOOGLE(pool, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            deepcopy_VkImportPhysicalAddressGOOGLE(pool, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
-            deepcopy_VkWriteDescriptorSetAccelerationStructureKHR(pool, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension), reinterpret_cast<VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension_out));
+            deepcopy_VkWriteDescriptorSetAccelerationStructureKHR(pool, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension), reinterpret_cast<VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDeviceAccelerationStructureFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceAccelerationStructureFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
         {
-            deepcopy_VkPhysicalDeviceAccelerationStructurePropertiesKHR(pool, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceAccelerationStructurePropertiesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_ray_tracing_pipeline
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR:
         {
-            deepcopy_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(pool, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_ray_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
         {
-            deepcopy_VkPhysicalDeviceRayQueryFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension_out));
+            deepcopy_VkPhysicalDeviceRayQueryFeaturesKHR(pool, rootType, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
index ef555eb..38875b1 100644
--- a/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
+++ b/system/vulkan_enc/goldfish_vk_deepcopy_guest.h
@@ -45,546 +45,655 @@
 #ifdef VK_VERSION_1_0
 void deepcopy_VkExtent2D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExtent2D* from,
     VkExtent2D* to);
 
 void deepcopy_VkExtent3D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExtent3D* from,
     VkExtent3D* to);
 
 void deepcopy_VkOffset2D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkOffset2D* from,
     VkOffset2D* to);
 
 void deepcopy_VkOffset3D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkOffset3D* from,
     VkOffset3D* to);
 
 void deepcopy_VkRect2D(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRect2D* from,
     VkRect2D* to);
 
 void deepcopy_VkBaseInStructure(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBaseInStructure* from,
     VkBaseInStructure* to);
 
 void deepcopy_VkBaseOutStructure(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBaseOutStructure* from,
     VkBaseOutStructure* to);
 
 void deepcopy_VkBufferMemoryBarrier(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* from,
     VkBufferMemoryBarrier* to);
 
 void deepcopy_VkDispatchIndirectCommand(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* from,
     VkDispatchIndirectCommand* to);
 
 void deepcopy_VkDrawIndexedIndirectCommand(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* from,
     VkDrawIndexedIndirectCommand* to);
 
 void deepcopy_VkDrawIndirectCommand(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* from,
     VkDrawIndirectCommand* to);
 
 void deepcopy_VkImageSubresourceRange(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSubresourceRange* from,
     VkImageSubresourceRange* to);
 
 void deepcopy_VkImageMemoryBarrier(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* from,
     VkImageMemoryBarrier* to);
 
 void deepcopy_VkMemoryBarrier(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryBarrier* from,
     VkMemoryBarrier* to);
 
 void deepcopy_VkAllocationCallbacks(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAllocationCallbacks* from,
     VkAllocationCallbacks* to);
 
 void deepcopy_VkApplicationInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkApplicationInfo* from,
     VkApplicationInfo* to);
 
 void deepcopy_VkFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFormatProperties* from,
     VkFormatProperties* to);
 
 void deepcopy_VkImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageFormatProperties* from,
     VkImageFormatProperties* to);
 
 void deepcopy_VkInstanceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* from,
     VkInstanceCreateInfo* to);
 
 void deepcopy_VkMemoryHeap(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryHeap* from,
     VkMemoryHeap* to);
 
 void deepcopy_VkMemoryType(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryType* from,
     VkMemoryType* to);
 
 void deepcopy_VkPhysicalDeviceFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* from,
     VkPhysicalDeviceFeatures* to);
 
 void deepcopy_VkPhysicalDeviceLimits(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* from,
     VkPhysicalDeviceLimits* to);
 
 void deepcopy_VkPhysicalDeviceMemoryProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* from,
     VkPhysicalDeviceMemoryProperties* to);
 
 void deepcopy_VkPhysicalDeviceSparseProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* from,
     VkPhysicalDeviceSparseProperties* to);
 
 void deepcopy_VkPhysicalDeviceProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* from,
     VkPhysicalDeviceProperties* to);
 
 void deepcopy_VkQueueFamilyProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* from,
     VkQueueFamilyProperties* to);
 
 void deepcopy_VkDeviceQueueCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* from,
     VkDeviceQueueCreateInfo* to);
 
 void deepcopy_VkDeviceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* from,
     VkDeviceCreateInfo* to);
 
 void deepcopy_VkExtensionProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExtensionProperties* from,
     VkExtensionProperties* to);
 
 void deepcopy_VkLayerProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkLayerProperties* from,
     VkLayerProperties* to);
 
 void deepcopy_VkSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubmitInfo* from,
     VkSubmitInfo* to);
 
 void deepcopy_VkMappedMemoryRange(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMappedMemoryRange* from,
     VkMappedMemoryRange* to);
 
 void deepcopy_VkMemoryAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* from,
     VkMemoryAllocateInfo* to);
 
 void deepcopy_VkMemoryRequirements(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryRequirements* from,
     VkMemoryRequirements* to);
 
 void deepcopy_VkSparseMemoryBind(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseMemoryBind* from,
     VkSparseMemoryBind* to);
 
 void deepcopy_VkSparseBufferMemoryBindInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* from,
     VkSparseBufferMemoryBindInfo* to);
 
 void deepcopy_VkSparseImageOpaqueMemoryBindInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* from,
     VkSparseImageOpaqueMemoryBindInfo* to);
 
 void deepcopy_VkImageSubresource(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSubresource* from,
     VkImageSubresource* to);
 
 void deepcopy_VkSparseImageMemoryBind(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* from,
     VkSparseImageMemoryBind* to);
 
 void deepcopy_VkSparseImageMemoryBindInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* from,
     VkSparseImageMemoryBindInfo* to);
 
 void deepcopy_VkBindSparseInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindSparseInfo* from,
     VkBindSparseInfo* to);
 
 void deepcopy_VkSparseImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* from,
     VkSparseImageFormatProperties* to);
 
 void deepcopy_VkSparseImageMemoryRequirements(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* from,
     VkSparseImageMemoryRequirements* to);
 
 void deepcopy_VkFenceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFenceCreateInfo* from,
     VkFenceCreateInfo* to);
 
 void deepcopy_VkSemaphoreCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* from,
     VkSemaphoreCreateInfo* to);
 
 void deepcopy_VkEventCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkEventCreateInfo* from,
     VkEventCreateInfo* to);
 
 void deepcopy_VkQueryPoolCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* from,
     VkQueryPoolCreateInfo* to);
 
 void deepcopy_VkBufferCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferCreateInfo* from,
     VkBufferCreateInfo* to);
 
 void deepcopy_VkBufferViewCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* from,
     VkBufferViewCreateInfo* to);
 
 void deepcopy_VkImageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageCreateInfo* from,
     VkImageCreateInfo* to);
 
 void deepcopy_VkSubresourceLayout(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubresourceLayout* from,
     VkSubresourceLayout* to);
 
 void deepcopy_VkComponentMapping(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkComponentMapping* from,
     VkComponentMapping* to);
 
 void deepcopy_VkImageViewCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* from,
     VkImageViewCreateInfo* to);
 
 void deepcopy_VkShaderModuleCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* from,
     VkShaderModuleCreateInfo* to);
 
 void deepcopy_VkPipelineCacheCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* from,
     VkPipelineCacheCreateInfo* to);
 
 void deepcopy_VkSpecializationMapEntry(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* from,
     VkSpecializationMapEntry* to);
 
 void deepcopy_VkSpecializationInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSpecializationInfo* from,
     VkSpecializationInfo* to);
 
 void deepcopy_VkPipelineShaderStageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* from,
     VkPipelineShaderStageCreateInfo* to);
 
 void deepcopy_VkComputePipelineCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* from,
     VkComputePipelineCreateInfo* to);
 
 void deepcopy_VkVertexInputBindingDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* from,
     VkVertexInputBindingDescription* to);
 
 void deepcopy_VkVertexInputAttributeDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* from,
     VkVertexInputAttributeDescription* to);
 
 void deepcopy_VkPipelineVertexInputStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* from,
     VkPipelineVertexInputStateCreateInfo* to);
 
 void deepcopy_VkPipelineInputAssemblyStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* from,
     VkPipelineInputAssemblyStateCreateInfo* to);
 
 void deepcopy_VkPipelineTessellationStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* from,
     VkPipelineTessellationStateCreateInfo* to);
 
 void deepcopy_VkViewport(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViewport* from,
     VkViewport* to);
 
 void deepcopy_VkPipelineViewportStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* from,
     VkPipelineViewportStateCreateInfo* to);
 
 void deepcopy_VkPipelineRasterizationStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* from,
     VkPipelineRasterizationStateCreateInfo* to);
 
 void deepcopy_VkPipelineMultisampleStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* from,
     VkPipelineMultisampleStateCreateInfo* to);
 
 void deepcopy_VkStencilOpState(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkStencilOpState* from,
     VkStencilOpState* to);
 
 void deepcopy_VkPipelineDepthStencilStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* from,
     VkPipelineDepthStencilStateCreateInfo* to);
 
 void deepcopy_VkPipelineColorBlendAttachmentState(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* from,
     VkPipelineColorBlendAttachmentState* to);
 
 void deepcopy_VkPipelineColorBlendStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* from,
     VkPipelineColorBlendStateCreateInfo* to);
 
 void deepcopy_VkPipelineDynamicStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* from,
     VkPipelineDynamicStateCreateInfo* to);
 
 void deepcopy_VkGraphicsPipelineCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* from,
     VkGraphicsPipelineCreateInfo* to);
 
 void deepcopy_VkPushConstantRange(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPushConstantRange* from,
     VkPushConstantRange* to);
 
 void deepcopy_VkPipelineLayoutCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* from,
     VkPipelineLayoutCreateInfo* to);
 
 void deepcopy_VkSamplerCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* from,
     VkSamplerCreateInfo* to);
 
 void deepcopy_VkCopyDescriptorSet(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* from,
     VkCopyDescriptorSet* to);
 
 void deepcopy_VkDescriptorBufferInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* from,
     VkDescriptorBufferInfo* to);
 
 void deepcopy_VkDescriptorImageInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* from,
     VkDescriptorImageInfo* to);
 
 void deepcopy_VkDescriptorPoolSize(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* from,
     VkDescriptorPoolSize* to);
 
 void deepcopy_VkDescriptorPoolCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* from,
     VkDescriptorPoolCreateInfo* to);
 
 void deepcopy_VkDescriptorSetAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* from,
     VkDescriptorSetAllocateInfo* to);
 
 void deepcopy_VkDescriptorSetLayoutBinding(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* from,
     VkDescriptorSetLayoutBinding* to);
 
 void deepcopy_VkDescriptorSetLayoutCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* from,
     VkDescriptorSetLayoutCreateInfo* to);
 
 void deepcopy_VkWriteDescriptorSet(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* from,
     VkWriteDescriptorSet* to);
 
 void deepcopy_VkAttachmentDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentDescription* from,
     VkAttachmentDescription* to);
 
 void deepcopy_VkAttachmentReference(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentReference* from,
     VkAttachmentReference* to);
 
 void deepcopy_VkFramebufferCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* from,
     VkFramebufferCreateInfo* to);
 
 void deepcopy_VkSubpassDescription(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDescription* from,
     VkSubpassDescription* to);
 
 void deepcopy_VkSubpassDependency(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDependency* from,
     VkSubpassDependency* to);
 
 void deepcopy_VkRenderPassCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* from,
     VkRenderPassCreateInfo* to);
 
 void deepcopy_VkCommandPoolCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* from,
     VkCommandPoolCreateInfo* to);
 
 void deepcopy_VkCommandBufferAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* from,
     VkCommandBufferAllocateInfo* to);
 
 void deepcopy_VkCommandBufferInheritanceInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* from,
     VkCommandBufferInheritanceInfo* to);
 
 void deepcopy_VkCommandBufferBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* from,
     VkCommandBufferBeginInfo* to);
 
 void deepcopy_VkBufferCopy(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferCopy* from,
     VkBufferCopy* to);
 
 void deepcopy_VkImageSubresourceLayers(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* from,
     VkImageSubresourceLayers* to);
 
 void deepcopy_VkBufferImageCopy(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferImageCopy* from,
     VkBufferImageCopy* to);
 
 void deepcopy_VkClearColorValue(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearColorValue* from,
     VkClearColorValue* to);
 
 void deepcopy_VkClearDepthStencilValue(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* from,
     VkClearDepthStencilValue* to);
 
 void deepcopy_VkClearValue(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearValue* from,
     VkClearValue* to);
 
 void deepcopy_VkClearAttachment(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearAttachment* from,
     VkClearAttachment* to);
 
 void deepcopy_VkClearRect(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkClearRect* from,
     VkClearRect* to);
 
 void deepcopy_VkImageBlit(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageBlit* from,
     VkImageBlit* to);
 
 void deepcopy_VkImageCopy(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageCopy* from,
     VkImageCopy* to);
 
 void deepcopy_VkImageResolve(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageResolve* from,
     VkImageResolve* to);
 
 void deepcopy_VkRenderPassBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* from,
     VkRenderPassBeginInfo* to);
 
@@ -592,191 +701,229 @@
 #ifdef VK_VERSION_1_1
 void deepcopy_VkPhysicalDeviceSubgroupProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* from,
     VkPhysicalDeviceSubgroupProperties* to);
 
 void deepcopy_VkBindBufferMemoryInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* from,
     VkBindBufferMemoryInfo* to);
 
 void deepcopy_VkBindImageMemoryInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* from,
     VkBindImageMemoryInfo* to);
 
 void deepcopy_VkPhysicalDevice16BitStorageFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* from,
     VkPhysicalDevice16BitStorageFeatures* to);
 
 void deepcopy_VkMemoryDedicatedRequirements(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* from,
     VkMemoryDedicatedRequirements* to);
 
 void deepcopy_VkMemoryDedicatedAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* from,
     VkMemoryDedicatedAllocateInfo* to);
 
 void deepcopy_VkMemoryAllocateFlagsInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* from,
     VkMemoryAllocateFlagsInfo* to);
 
 void deepcopy_VkDeviceGroupRenderPassBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* from,
     VkDeviceGroupRenderPassBeginInfo* to);
 
 void deepcopy_VkDeviceGroupCommandBufferBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* from,
     VkDeviceGroupCommandBufferBeginInfo* to);
 
 void deepcopy_VkDeviceGroupSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* from,
     VkDeviceGroupSubmitInfo* to);
 
 void deepcopy_VkDeviceGroupBindSparseInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* from,
     VkDeviceGroupBindSparseInfo* to);
 
 void deepcopy_VkBindBufferMemoryDeviceGroupInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* from,
     VkBindBufferMemoryDeviceGroupInfo* to);
 
 void deepcopy_VkBindImageMemoryDeviceGroupInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* from,
     VkBindImageMemoryDeviceGroupInfo* to);
 
 void deepcopy_VkPhysicalDeviceGroupProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* from,
     VkPhysicalDeviceGroupProperties* to);
 
 void deepcopy_VkDeviceGroupDeviceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* from,
     VkDeviceGroupDeviceCreateInfo* to);
 
 void deepcopy_VkBufferMemoryRequirementsInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* from,
     VkBufferMemoryRequirementsInfo2* to);
 
 void deepcopy_VkImageMemoryRequirementsInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* from,
     VkImageMemoryRequirementsInfo2* to);
 
 void deepcopy_VkImageSparseMemoryRequirementsInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* from,
     VkImageSparseMemoryRequirementsInfo2* to);
 
 void deepcopy_VkMemoryRequirements2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryRequirements2* from,
     VkMemoryRequirements2* to);
 
 void deepcopy_VkSparseImageMemoryRequirements2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* from,
     VkSparseImageMemoryRequirements2* to);
 
 void deepcopy_VkPhysicalDeviceFeatures2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* from,
     VkPhysicalDeviceFeatures2* to);
 
 void deepcopy_VkPhysicalDeviceProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* from,
     VkPhysicalDeviceProperties2* to);
 
 void deepcopy_VkFormatProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFormatProperties2* from,
     VkFormatProperties2* to);
 
 void deepcopy_VkImageFormatProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageFormatProperties2* from,
     VkImageFormatProperties2* to);
 
 void deepcopy_VkPhysicalDeviceImageFormatInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* from,
     VkPhysicalDeviceImageFormatInfo2* to);
 
 void deepcopy_VkQueueFamilyProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* from,
     VkQueueFamilyProperties2* to);
 
 void deepcopy_VkPhysicalDeviceMemoryProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* from,
     VkPhysicalDeviceMemoryProperties2* to);
 
 void deepcopy_VkSparseImageFormatProperties2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* from,
     VkSparseImageFormatProperties2* to);
 
 void deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* from,
     VkPhysicalDeviceSparseImageFormatInfo2* to);
 
 void deepcopy_VkPhysicalDevicePointClippingProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* from,
     VkPhysicalDevicePointClippingProperties* to);
 
 void deepcopy_VkInputAttachmentAspectReference(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* from,
     VkInputAttachmentAspectReference* to);
 
 void deepcopy_VkRenderPassInputAttachmentAspectCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* from,
     VkRenderPassInputAttachmentAspectCreateInfo* to);
 
 void deepcopy_VkImageViewUsageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* from,
     VkImageViewUsageCreateInfo* to);
 
 void deepcopy_VkPipelineTessellationDomainOriginStateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* from,
     VkPipelineTessellationDomainOriginStateCreateInfo* to);
 
 void deepcopy_VkRenderPassMultiviewCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* from,
     VkRenderPassMultiviewCreateInfo* to);
 
 void deepcopy_VkPhysicalDeviceMultiviewFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* from,
     VkPhysicalDeviceMultiviewFeatures* to);
 
 void deepcopy_VkPhysicalDeviceMultiviewProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* from,
     VkPhysicalDeviceMultiviewProperties* to);
 
 void deepcopy_VkPhysicalDeviceVariablePointersFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* from,
     VkPhysicalDeviceVariablePointersFeatures* to);
 
@@ -784,151 +931,181 @@
 
 void deepcopy_VkPhysicalDeviceProtectedMemoryFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* from,
     VkPhysicalDeviceProtectedMemoryFeatures* to);
 
 void deepcopy_VkPhysicalDeviceProtectedMemoryProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* from,
     VkPhysicalDeviceProtectedMemoryProperties* to);
 
 void deepcopy_VkDeviceQueueInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* from,
     VkDeviceQueueInfo2* to);
 
 void deepcopy_VkProtectedSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* from,
     VkProtectedSubmitInfo* to);
 
 void deepcopy_VkSamplerYcbcrConversionCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* from,
     VkSamplerYcbcrConversionCreateInfo* to);
 
 void deepcopy_VkSamplerYcbcrConversionInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* from,
     VkSamplerYcbcrConversionInfo* to);
 
 void deepcopy_VkBindImagePlaneMemoryInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* from,
     VkBindImagePlaneMemoryInfo* to);
 
 void deepcopy_VkImagePlaneMemoryRequirementsInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* from,
     VkImagePlaneMemoryRequirementsInfo* to);
 
 void deepcopy_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* from,
     VkPhysicalDeviceSamplerYcbcrConversionFeatures* to);
 
 void deepcopy_VkSamplerYcbcrConversionImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* from,
     VkSamplerYcbcrConversionImageFormatProperties* to);
 
 void deepcopy_VkDescriptorUpdateTemplateEntry(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* from,
     VkDescriptorUpdateTemplateEntry* to);
 
 void deepcopy_VkDescriptorUpdateTemplateCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* from,
     VkDescriptorUpdateTemplateCreateInfo* to);
 
 void deepcopy_VkExternalMemoryProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* from,
     VkExternalMemoryProperties* to);
 
 void deepcopy_VkPhysicalDeviceExternalImageFormatInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* from,
     VkPhysicalDeviceExternalImageFormatInfo* to);
 
 void deepcopy_VkExternalImageFormatProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* from,
     VkExternalImageFormatProperties* to);
 
 void deepcopy_VkPhysicalDeviceExternalBufferInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* from,
     VkPhysicalDeviceExternalBufferInfo* to);
 
 void deepcopy_VkExternalBufferProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalBufferProperties* from,
     VkExternalBufferProperties* to);
 
 void deepcopy_VkPhysicalDeviceIDProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* from,
     VkPhysicalDeviceIDProperties* to);
 
 void deepcopy_VkExternalMemoryImageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* from,
     VkExternalMemoryImageCreateInfo* to);
 
 void deepcopy_VkExternalMemoryBufferCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* from,
     VkExternalMemoryBufferCreateInfo* to);
 
 void deepcopy_VkExportMemoryAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* from,
     VkExportMemoryAllocateInfo* to);
 
 void deepcopy_VkPhysicalDeviceExternalFenceInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* from,
     VkPhysicalDeviceExternalFenceInfo* to);
 
 void deepcopy_VkExternalFenceProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalFenceProperties* from,
     VkExternalFenceProperties* to);
 
 void deepcopy_VkExportFenceCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* from,
     VkExportFenceCreateInfo* to);
 
 void deepcopy_VkExportSemaphoreCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* from,
     VkExportSemaphoreCreateInfo* to);
 
 void deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* from,
     VkPhysicalDeviceExternalSemaphoreInfo* to);
 
 void deepcopy_VkExternalSemaphoreProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* from,
     VkExternalSemaphoreProperties* to);
 
 void deepcopy_VkPhysicalDeviceMaintenance3Properties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* from,
     VkPhysicalDeviceMaintenance3Properties* to);
 
 void deepcopy_VkDescriptorSetLayoutSupport(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* from,
     VkDescriptorSetLayoutSupport* to);
 
 void deepcopy_VkPhysicalDeviceShaderDrawParametersFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* from,
     VkPhysicalDeviceShaderDrawParametersFeatures* to);
 
@@ -938,256 +1115,307 @@
 #ifdef VK_VERSION_1_2
 void deepcopy_VkPhysicalDeviceVulkan11Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* from,
     VkPhysicalDeviceVulkan11Features* to);
 
 void deepcopy_VkPhysicalDeviceVulkan11Properties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* from,
     VkPhysicalDeviceVulkan11Properties* to);
 
 void deepcopy_VkPhysicalDeviceVulkan12Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* from,
     VkPhysicalDeviceVulkan12Features* to);
 
 void deepcopy_VkConformanceVersion(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkConformanceVersion* from,
     VkConformanceVersion* to);
 
 void deepcopy_VkPhysicalDeviceVulkan12Properties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* from,
     VkPhysicalDeviceVulkan12Properties* to);
 
 void deepcopy_VkImageFormatListCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* from,
     VkImageFormatListCreateInfo* to);
 
 void deepcopy_VkAttachmentDescription2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentDescription2* from,
     VkAttachmentDescription2* to);
 
 void deepcopy_VkAttachmentReference2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentReference2* from,
     VkAttachmentReference2* to);
 
 void deepcopy_VkSubpassDescription2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDescription2* from,
     VkSubpassDescription2* to);
 
 void deepcopy_VkSubpassDependency2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDependency2* from,
     VkSubpassDependency2* to);
 
 void deepcopy_VkRenderPassCreateInfo2(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* from,
     VkRenderPassCreateInfo2* to);
 
 void deepcopy_VkSubpassBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* from,
     VkSubpassBeginInfo* to);
 
 void deepcopy_VkSubpassEndInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassEndInfo* from,
     VkSubpassEndInfo* to);
 
 void deepcopy_VkPhysicalDevice8BitStorageFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* from,
     VkPhysicalDevice8BitStorageFeatures* to);
 
 void deepcopy_VkPhysicalDeviceDriverProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* from,
     VkPhysicalDeviceDriverProperties* to);
 
 void deepcopy_VkPhysicalDeviceShaderAtomicInt64Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* from,
     VkPhysicalDeviceShaderAtomicInt64Features* to);
 
 void deepcopy_VkPhysicalDeviceShaderFloat16Int8Features(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* from,
     VkPhysicalDeviceShaderFloat16Int8Features* to);
 
 void deepcopy_VkPhysicalDeviceFloatControlsProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* from,
     VkPhysicalDeviceFloatControlsProperties* to);
 
 void deepcopy_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* from,
     VkDescriptorSetLayoutBindingFlagsCreateInfo* to);
 
 void deepcopy_VkPhysicalDeviceDescriptorIndexingFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* from,
     VkPhysicalDeviceDescriptorIndexingFeatures* to);
 
 void deepcopy_VkPhysicalDeviceDescriptorIndexingProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* from,
     VkPhysicalDeviceDescriptorIndexingProperties* to);
 
 void deepcopy_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* from,
     VkDescriptorSetVariableDescriptorCountAllocateInfo* to);
 
 void deepcopy_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* from,
     VkDescriptorSetVariableDescriptorCountLayoutSupport* to);
 
 void deepcopy_VkSubpassDescriptionDepthStencilResolve(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* from,
     VkSubpassDescriptionDepthStencilResolve* to);
 
 void deepcopy_VkPhysicalDeviceDepthStencilResolveProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* from,
     VkPhysicalDeviceDepthStencilResolveProperties* to);
 
 void deepcopy_VkPhysicalDeviceScalarBlockLayoutFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* from,
     VkPhysicalDeviceScalarBlockLayoutFeatures* to);
 
 void deepcopy_VkImageStencilUsageCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* from,
     VkImageStencilUsageCreateInfo* to);
 
 void deepcopy_VkSamplerReductionModeCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* from,
     VkSamplerReductionModeCreateInfo* to);
 
 void deepcopy_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* from,
     VkPhysicalDeviceSamplerFilterMinmaxProperties* to);
 
 void deepcopy_VkPhysicalDeviceVulkanMemoryModelFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* from,
     VkPhysicalDeviceVulkanMemoryModelFeatures* to);
 
 void deepcopy_VkPhysicalDeviceImagelessFramebufferFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* from,
     VkPhysicalDeviceImagelessFramebufferFeatures* to);
 
 void deepcopy_VkFramebufferAttachmentImageInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* from,
     VkFramebufferAttachmentImageInfo* to);
 
 void deepcopy_VkFramebufferAttachmentsCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* from,
     VkFramebufferAttachmentsCreateInfo* to);
 
 void deepcopy_VkRenderPassAttachmentBeginInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* from,
     VkRenderPassAttachmentBeginInfo* to);
 
 void deepcopy_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* from,
     VkPhysicalDeviceUniformBufferStandardLayoutFeatures* to);
 
 void deepcopy_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* from,
     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* to);
 
 void deepcopy_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* from,
     VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* to);
 
 void deepcopy_VkAttachmentReferenceStencilLayout(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* from,
     VkAttachmentReferenceStencilLayout* to);
 
 void deepcopy_VkAttachmentDescriptionStencilLayout(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* from,
     VkAttachmentDescriptionStencilLayout* to);
 
 void deepcopy_VkPhysicalDeviceHostQueryResetFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* from,
     VkPhysicalDeviceHostQueryResetFeatures* to);
 
 void deepcopy_VkPhysicalDeviceTimelineSemaphoreFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* from,
     VkPhysicalDeviceTimelineSemaphoreFeatures* to);
 
 void deepcopy_VkPhysicalDeviceTimelineSemaphoreProperties(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* from,
     VkPhysicalDeviceTimelineSemaphoreProperties* to);
 
 void deepcopy_VkSemaphoreTypeCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* from,
     VkSemaphoreTypeCreateInfo* to);
 
 void deepcopy_VkTimelineSemaphoreSubmitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* from,
     VkTimelineSemaphoreSubmitInfo* to);
 
 void deepcopy_VkSemaphoreWaitInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* from,
     VkSemaphoreWaitInfo* to);
 
 void deepcopy_VkSemaphoreSignalInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* from,
     VkSemaphoreSignalInfo* to);
 
 void deepcopy_VkPhysicalDeviceBufferDeviceAddressFeatures(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* from,
     VkPhysicalDeviceBufferDeviceAddressFeatures* to);
 
 void deepcopy_VkBufferDeviceAddressInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* from,
     VkBufferDeviceAddressInfo* to);
 
 void deepcopy_VkBufferOpaqueCaptureAddressCreateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* from,
     VkBufferOpaqueCaptureAddressCreateInfo* to);
 
 void deepcopy_VkMemoryOpaqueCaptureAddressAllocateInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* from,
     VkMemoryOpaqueCaptureAddressAllocateInfo* to);
 
 void deepcopy_VkDeviceMemoryOpaqueCaptureAddressInfo(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* from,
     VkDeviceMemoryOpaqueCaptureAddressInfo* to);
 
@@ -1195,11 +1423,13 @@
 #ifdef VK_KHR_surface
 void deepcopy_VkSurfaceCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* from,
     VkSurfaceCapabilitiesKHR* to);
 
 void deepcopy_VkSurfaceFormatKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* from,
     VkSurfaceFormatKHR* to);
 
@@ -1207,41 +1437,49 @@
 #ifdef VK_KHR_swapchain
 void deepcopy_VkSwapchainCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* from,
     VkSwapchainCreateInfoKHR* to);
 
 void deepcopy_VkPresentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentInfoKHR* from,
     VkPresentInfoKHR* to);
 
 void deepcopy_VkImageSwapchainCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* from,
     VkImageSwapchainCreateInfoKHR* to);
 
 void deepcopy_VkBindImageMemorySwapchainInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* from,
     VkBindImageMemorySwapchainInfoKHR* to);
 
 void deepcopy_VkAcquireNextImageInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* from,
     VkAcquireNextImageInfoKHR* to);
 
 void deepcopy_VkDeviceGroupPresentCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* from,
     VkDeviceGroupPresentCapabilitiesKHR* to);
 
 void deepcopy_VkDeviceGroupPresentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* from,
     VkDeviceGroupPresentInfoKHR* to);
 
 void deepcopy_VkDeviceGroupSwapchainCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* from,
     VkDeviceGroupSwapchainCreateInfoKHR* to);
 
@@ -1249,36 +1487,43 @@
 #ifdef VK_KHR_display
 void deepcopy_VkDisplayModeParametersKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* from,
     VkDisplayModeParametersKHR* to);
 
 void deepcopy_VkDisplayModeCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* from,
     VkDisplayModeCreateInfoKHR* to);
 
 void deepcopy_VkDisplayModePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* from,
     VkDisplayModePropertiesKHR* to);
 
 void deepcopy_VkDisplayPlaneCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* from,
     VkDisplayPlaneCapabilitiesKHR* to);
 
 void deepcopy_VkDisplayPlanePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* from,
     VkDisplayPlanePropertiesKHR* to);
 
 void deepcopy_VkDisplayPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* from,
     VkDisplayPropertiesKHR* to);
 
 void deepcopy_VkDisplaySurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* from,
     VkDisplaySurfaceCreateInfoKHR* to);
 
@@ -1286,6 +1531,7 @@
 #ifdef VK_KHR_display_swapchain
 void deepcopy_VkDisplayPresentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* from,
     VkDisplayPresentInfoKHR* to);
 
@@ -1293,6 +1539,7 @@
 #ifdef VK_KHR_xlib_surface
 void deepcopy_VkXlibSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* from,
     VkXlibSurfaceCreateInfoKHR* to);
 
@@ -1300,6 +1547,7 @@
 #ifdef VK_KHR_xcb_surface
 void deepcopy_VkXcbSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* from,
     VkXcbSurfaceCreateInfoKHR* to);
 
@@ -1307,6 +1555,7 @@
 #ifdef VK_KHR_wayland_surface
 void deepcopy_VkWaylandSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* from,
     VkWaylandSurfaceCreateInfoKHR* to);
 
@@ -1314,6 +1563,7 @@
 #ifdef VK_KHR_android_surface
 void deepcopy_VkAndroidSurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* from,
     VkAndroidSurfaceCreateInfoKHR* to);
 
@@ -1321,6 +1571,7 @@
 #ifdef VK_KHR_win32_surface
 void deepcopy_VkWin32SurfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* from,
     VkWin32SurfaceCreateInfoKHR* to);
 
@@ -1406,21 +1657,25 @@
 #ifdef VK_KHR_external_memory_win32
 void deepcopy_VkImportMemoryWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* from,
     VkImportMemoryWin32HandleInfoKHR* to);
 
 void deepcopy_VkExportMemoryWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* from,
     VkExportMemoryWin32HandleInfoKHR* to);
 
 void deepcopy_VkMemoryWin32HandlePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* from,
     VkMemoryWin32HandlePropertiesKHR* to);
 
 void deepcopy_VkMemoryGetWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* from,
     VkMemoryGetWin32HandleInfoKHR* to);
 
@@ -1428,16 +1683,19 @@
 #ifdef VK_KHR_external_memory_fd
 void deepcopy_VkImportMemoryFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* from,
     VkImportMemoryFdInfoKHR* to);
 
 void deepcopy_VkMemoryFdPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* from,
     VkMemoryFdPropertiesKHR* to);
 
 void deepcopy_VkMemoryGetFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* from,
     VkMemoryGetFdInfoKHR* to);
 
@@ -1445,6 +1703,7 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void deepcopy_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* from,
     VkWin32KeyedMutexAcquireReleaseInfoKHR* to);
 
@@ -1462,21 +1721,25 @@
 #ifdef VK_KHR_external_semaphore_win32
 void deepcopy_VkImportSemaphoreWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* from,
     VkImportSemaphoreWin32HandleInfoKHR* to);
 
 void deepcopy_VkExportSemaphoreWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* from,
     VkExportSemaphoreWin32HandleInfoKHR* to);
 
 void deepcopy_VkD3D12FenceSubmitInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* from,
     VkD3D12FenceSubmitInfoKHR* to);
 
 void deepcopy_VkSemaphoreGetWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* from,
     VkSemaphoreGetWin32HandleInfoKHR* to);
 
@@ -1484,11 +1747,13 @@
 #ifdef VK_KHR_external_semaphore_fd
 void deepcopy_VkImportSemaphoreFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* from,
     VkImportSemaphoreFdInfoKHR* to);
 
 void deepcopy_VkSemaphoreGetFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* from,
     VkSemaphoreGetFdInfoKHR* to);
 
@@ -1496,6 +1761,7 @@
 #ifdef VK_KHR_push_descriptor
 void deepcopy_VkPhysicalDevicePushDescriptorPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* from,
     VkPhysicalDevicePushDescriptorPropertiesKHR* to);
 
@@ -1513,16 +1779,19 @@
 #ifdef VK_KHR_incremental_present
 void deepcopy_VkRectLayerKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRectLayerKHR* from,
     VkRectLayerKHR* to);
 
 void deepcopy_VkPresentRegionKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentRegionKHR* from,
     VkPresentRegionKHR* to);
 
 void deepcopy_VkPresentRegionsKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* from,
     VkPresentRegionsKHR* to);
 
@@ -1562,6 +1831,7 @@
 #ifdef VK_KHR_shared_presentable_image
 void deepcopy_VkSharedPresentSurfaceCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* from,
     VkSharedPresentSurfaceCapabilitiesKHR* to);
 
@@ -1579,16 +1849,19 @@
 #ifdef VK_KHR_external_fence_win32
 void deepcopy_VkImportFenceWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* from,
     VkImportFenceWin32HandleInfoKHR* to);
 
 void deepcopy_VkExportFenceWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* from,
     VkExportFenceWin32HandleInfoKHR* to);
 
 void deepcopy_VkFenceGetWin32HandleInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* from,
     VkFenceGetWin32HandleInfoKHR* to);
 
@@ -1596,11 +1869,13 @@
 #ifdef VK_KHR_external_fence_fd
 void deepcopy_VkImportFenceFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* from,
     VkImportFenceFdInfoKHR* to);
 
 void deepcopy_VkFenceGetFdInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* from,
     VkFenceGetFdInfoKHR* to);
 
@@ -1608,41 +1883,49 @@
 #ifdef VK_KHR_performance_query
 void deepcopy_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* from,
     VkPhysicalDevicePerformanceQueryFeaturesKHR* to);
 
 void deepcopy_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* from,
     VkPhysicalDevicePerformanceQueryPropertiesKHR* to);
 
 void deepcopy_VkPerformanceCounterKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* from,
     VkPerformanceCounterKHR* to);
 
 void deepcopy_VkPerformanceCounterDescriptionKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* from,
     VkPerformanceCounterDescriptionKHR* to);
 
 void deepcopy_VkQueryPoolPerformanceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* from,
     VkQueryPoolPerformanceCreateInfoKHR* to);
 
 void deepcopy_VkPerformanceCounterResultKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* from,
     VkPerformanceCounterResultKHR* to);
 
 void deepcopy_VkAcquireProfilingLockInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* from,
     VkAcquireProfilingLockInfoKHR* to);
 
 void deepcopy_VkPerformanceQuerySubmitInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* from,
     VkPerformanceQuerySubmitInfoKHR* to);
 
@@ -1662,16 +1945,19 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* from,
     VkPhysicalDeviceSurfaceInfo2KHR* to);
 
 void deepcopy_VkSurfaceCapabilities2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* from,
     VkSurfaceCapabilities2KHR* to);
 
 void deepcopy_VkSurfaceFormat2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* from,
     VkSurfaceFormat2KHR* to);
 
@@ -1685,26 +1971,31 @@
 #ifdef VK_KHR_get_display_properties2
 void deepcopy_VkDisplayProperties2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* from,
     VkDisplayProperties2KHR* to);
 
 void deepcopy_VkDisplayPlaneProperties2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* from,
     VkDisplayPlaneProperties2KHR* to);
 
 void deepcopy_VkDisplayModeProperties2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* from,
     VkDisplayModeProperties2KHR* to);
 
 void deepcopy_VkDisplayPlaneInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* from,
     VkDisplayPlaneInfo2KHR* to);
 
 void deepcopy_VkDisplayPlaneCapabilities2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* from,
     VkDisplayPlaneCapabilities2KHR* to);
 
@@ -1758,11 +2049,13 @@
 #ifdef VK_KHR_portability_subset
 void deepcopy_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* from,
     VkPhysicalDevicePortabilitySubsetFeaturesKHR* to);
 
 void deepcopy_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* from,
     VkPhysicalDevicePortabilitySubsetPropertiesKHR* to);
 
@@ -1790,6 +2083,7 @@
 #ifdef VK_KHR_shader_clock
 void deepcopy_VkPhysicalDeviceShaderClockFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* from,
     VkPhysicalDeviceShaderClockFeaturesKHR* to);
 
@@ -1833,6 +2127,7 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void deepcopy_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* from,
     VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* to);
 
@@ -1840,26 +2135,31 @@
 #ifdef VK_KHR_fragment_shading_rate
 void deepcopy_VkFragmentShadingRateAttachmentInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* from,
     VkFragmentShadingRateAttachmentInfoKHR* to);
 
 void deepcopy_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* from,
     VkPipelineFragmentShadingRateStateCreateInfoKHR* to);
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* from,
     VkPhysicalDeviceFragmentShadingRateFeaturesKHR* to);
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* from,
     VkPhysicalDeviceFragmentShadingRatePropertiesKHR* to);
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRateKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* from,
     VkPhysicalDeviceFragmentShadingRateKHR* to);
 
@@ -1869,6 +2169,7 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void deepcopy_VkSurfaceProtectedCapabilitiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* from,
     VkSurfaceProtectedCapabilitiesKHR* to);
 
@@ -1902,36 +2203,43 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void deepcopy_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* from,
     VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* to);
 
 void deepcopy_VkPipelineInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* from,
     VkPipelineInfoKHR* to);
 
 void deepcopy_VkPipelineExecutablePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* from,
     VkPipelineExecutablePropertiesKHR* to);
 
 void deepcopy_VkPipelineExecutableInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* from,
     VkPipelineExecutableInfoKHR* to);
 
 void deepcopy_VkPipelineExecutableStatisticValueKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* from,
     VkPipelineExecutableStatisticValueKHR* to);
 
 void deepcopy_VkPipelineExecutableStatisticKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* from,
     VkPipelineExecutableStatisticKHR* to);
 
 void deepcopy_VkPipelineExecutableInternalRepresentationKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* from,
     VkPipelineExecutableInternalRepresentationKHR* to);
 
@@ -1939,6 +2247,7 @@
 #ifdef VK_KHR_pipeline_library
 void deepcopy_VkPipelineLibraryCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* from,
     VkPipelineLibraryCreateInfoKHR* to);
 
@@ -1948,56 +2257,67 @@
 #ifdef VK_KHR_copy_commands2
 void deepcopy_VkBufferCopy2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* from,
     VkBufferCopy2KHR* to);
 
 void deepcopy_VkCopyBufferInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* from,
     VkCopyBufferInfo2KHR* to);
 
 void deepcopy_VkImageCopy2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageCopy2KHR* from,
     VkImageCopy2KHR* to);
 
 void deepcopy_VkCopyImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* from,
     VkCopyImageInfo2KHR* to);
 
 void deepcopy_VkBufferImageCopy2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* from,
     VkBufferImageCopy2KHR* to);
 
 void deepcopy_VkCopyBufferToImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* from,
     VkCopyBufferToImageInfo2KHR* to);
 
 void deepcopy_VkCopyImageToBufferInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* from,
     VkCopyImageToBufferInfo2KHR* to);
 
 void deepcopy_VkImageBlit2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageBlit2KHR* from,
     VkImageBlit2KHR* to);
 
 void deepcopy_VkBlitImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* from,
     VkBlitImageInfo2KHR* to);
 
 void deepcopy_VkImageResolve2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageResolve2KHR* from,
     VkImageResolve2KHR* to);
 
 void deepcopy_VkResolveImageInfo2KHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* from,
     VkResolveImageInfo2KHR* to);
 
@@ -2005,6 +2325,7 @@
 #ifdef VK_ANDROID_native_buffer
 void deepcopy_VkNativeBufferANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* from,
     VkNativeBufferANDROID* to);
 
@@ -2012,6 +2333,7 @@
 #ifdef VK_EXT_debug_report
 void deepcopy_VkDebugReportCallbackCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* from,
     VkDebugReportCallbackCreateInfoEXT* to);
 
@@ -2025,6 +2347,7 @@
 #ifdef VK_AMD_rasterization_order
 void deepcopy_VkPipelineRasterizationStateRasterizationOrderAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* from,
     VkPipelineRasterizationStateRasterizationOrderAMD* to);
 
@@ -2036,16 +2359,19 @@
 #ifdef VK_EXT_debug_marker
 void deepcopy_VkDebugMarkerObjectNameInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* from,
     VkDebugMarkerObjectNameInfoEXT* to);
 
 void deepcopy_VkDebugMarkerObjectTagInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* from,
     VkDebugMarkerObjectTagInfoEXT* to);
 
 void deepcopy_VkDebugMarkerMarkerInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* from,
     VkDebugMarkerMarkerInfoEXT* to);
 
@@ -2055,16 +2381,19 @@
 #ifdef VK_NV_dedicated_allocation
 void deepcopy_VkDedicatedAllocationImageCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* from,
     VkDedicatedAllocationImageCreateInfoNV* to);
 
 void deepcopy_VkDedicatedAllocationBufferCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* from,
     VkDedicatedAllocationBufferCreateInfoNV* to);
 
 void deepcopy_VkDedicatedAllocationMemoryAllocateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* from,
     VkDedicatedAllocationMemoryAllocateInfoNV* to);
 
@@ -2072,16 +2401,19 @@
 #ifdef VK_EXT_transform_feedback
 void deepcopy_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* from,
     VkPhysicalDeviceTransformFeedbackFeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* from,
     VkPhysicalDeviceTransformFeedbackPropertiesEXT* to);
 
 void deepcopy_VkPipelineRasterizationStateStreamCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* from,
     VkPipelineRasterizationStateStreamCreateInfoEXT* to);
 
@@ -2089,11 +2421,13 @@
 #ifdef VK_NVX_image_view_handle
 void deepcopy_VkImageViewHandleInfoNVX(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* from,
     VkImageViewHandleInfoNVX* to);
 
 void deepcopy_VkImageViewAddressPropertiesNVX(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* from,
     VkImageViewAddressPropertiesNVX* to);
 
@@ -2109,6 +2443,7 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void deepcopy_VkTextureLODGatherFormatPropertiesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* from,
     VkTextureLODGatherFormatPropertiesAMD* to);
 
@@ -2116,11 +2451,13 @@
 #ifdef VK_AMD_shader_info
 void deepcopy_VkShaderResourceUsageAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* from,
     VkShaderResourceUsageAMD* to);
 
 void deepcopy_VkShaderStatisticsInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* from,
     VkShaderStatisticsInfoAMD* to);
 
@@ -2130,6 +2467,7 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void deepcopy_VkStreamDescriptorSurfaceCreateInfoGGP(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* from,
     VkStreamDescriptorSurfaceCreateInfoGGP* to);
 
@@ -2137,6 +2475,7 @@
 #ifdef VK_NV_corner_sampled_image
 void deepcopy_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* from,
     VkPhysicalDeviceCornerSampledImageFeaturesNV* to);
 
@@ -2146,6 +2485,7 @@
 #ifdef VK_NV_external_memory_capabilities
 void deepcopy_VkExternalImageFormatPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* from,
     VkExternalImageFormatPropertiesNV* to);
 
@@ -2153,11 +2493,13 @@
 #ifdef VK_NV_external_memory
 void deepcopy_VkExternalMemoryImageCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* from,
     VkExternalMemoryImageCreateInfoNV* to);
 
 void deepcopy_VkExportMemoryAllocateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* from,
     VkExportMemoryAllocateInfoNV* to);
 
@@ -2165,11 +2507,13 @@
 #ifdef VK_NV_external_memory_win32
 void deepcopy_VkImportMemoryWin32HandleInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* from,
     VkImportMemoryWin32HandleInfoNV* to);
 
 void deepcopy_VkExportMemoryWin32HandleInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* from,
     VkExportMemoryWin32HandleInfoNV* to);
 
@@ -2177,6 +2521,7 @@
 #ifdef VK_NV_win32_keyed_mutex
 void deepcopy_VkWin32KeyedMutexAcquireReleaseInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* from,
     VkWin32KeyedMutexAcquireReleaseInfoNV* to);
 
@@ -2184,6 +2529,7 @@
 #ifdef VK_EXT_validation_flags
 void deepcopy_VkValidationFlagsEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* from,
     VkValidationFlagsEXT* to);
 
@@ -2191,6 +2537,7 @@
 #ifdef VK_NN_vi_surface
 void deepcopy_VkViSurfaceCreateInfoNN(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* from,
     VkViSurfaceCreateInfoNN* to);
 
@@ -2202,6 +2549,7 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void deepcopy_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* from,
     VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* to);
 
@@ -2209,11 +2557,13 @@
 #ifdef VK_EXT_astc_decode_mode
 void deepcopy_VkImageViewASTCDecodeModeEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* from,
     VkImageViewASTCDecodeModeEXT* to);
 
 void deepcopy_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* from,
     VkPhysicalDeviceASTCDecodeFeaturesEXT* to);
 
@@ -2221,16 +2571,19 @@
 #ifdef VK_EXT_conditional_rendering
 void deepcopy_VkConditionalRenderingBeginInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* from,
     VkConditionalRenderingBeginInfoEXT* to);
 
 void deepcopy_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* from,
     VkPhysicalDeviceConditionalRenderingFeaturesEXT* to);
 
 void deepcopy_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* from,
     VkCommandBufferInheritanceConditionalRenderingInfoEXT* to);
 
@@ -2238,11 +2591,13 @@
 #ifdef VK_NV_clip_space_w_scaling
 void deepcopy_VkViewportWScalingNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViewportWScalingNV* from,
     VkViewportWScalingNV* to);
 
 void deepcopy_VkPipelineViewportWScalingStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* from,
     VkPipelineViewportWScalingStateCreateInfoNV* to);
 
@@ -2254,6 +2609,7 @@
 #ifdef VK_EXT_display_surface_counter
 void deepcopy_VkSurfaceCapabilities2EXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* from,
     VkSurfaceCapabilities2EXT* to);
 
@@ -2261,21 +2617,25 @@
 #ifdef VK_EXT_display_control
 void deepcopy_VkDisplayPowerInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* from,
     VkDisplayPowerInfoEXT* to);
 
 void deepcopy_VkDeviceEventInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* from,
     VkDeviceEventInfoEXT* to);
 
 void deepcopy_VkDisplayEventInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* from,
     VkDisplayEventInfoEXT* to);
 
 void deepcopy_VkSwapchainCounterCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* from,
     VkSwapchainCounterCreateInfoEXT* to);
 
@@ -2283,21 +2643,25 @@
 #ifdef VK_GOOGLE_display_timing
 void deepcopy_VkRefreshCycleDurationGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* from,
     VkRefreshCycleDurationGOOGLE* to);
 
 void deepcopy_VkPastPresentationTimingGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* from,
     VkPastPresentationTimingGOOGLE* to);
 
 void deepcopy_VkPresentTimeGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* from,
     VkPresentTimeGOOGLE* to);
 
 void deepcopy_VkPresentTimesInfoGOOGLE(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* from,
     VkPresentTimesInfoGOOGLE* to);
 
@@ -2311,6 +2675,7 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void deepcopy_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* from,
     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* to);
 
@@ -2318,11 +2683,13 @@
 #ifdef VK_NV_viewport_swizzle
 void deepcopy_VkViewportSwizzleNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* from,
     VkViewportSwizzleNV* to);
 
 void deepcopy_VkPipelineViewportSwizzleStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* from,
     VkPipelineViewportSwizzleStateCreateInfoNV* to);
 
@@ -2330,11 +2697,13 @@
 #ifdef VK_EXT_discard_rectangles
 void deepcopy_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* from,
     VkPhysicalDeviceDiscardRectanglePropertiesEXT* to);
 
 void deepcopy_VkPipelineDiscardRectangleStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* from,
     VkPipelineDiscardRectangleStateCreateInfoEXT* to);
 
@@ -2342,11 +2711,13 @@
 #ifdef VK_EXT_conservative_rasterization
 void deepcopy_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* from,
     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* to);
 
 void deepcopy_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* from,
     VkPipelineRasterizationConservativeStateCreateInfoEXT* to);
 
@@ -2354,11 +2725,13 @@
 #ifdef VK_EXT_depth_clip_enable
 void deepcopy_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* from,
     VkPhysicalDeviceDepthClipEnableFeaturesEXT* to);
 
 void deepcopy_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* from,
     VkPipelineRasterizationDepthClipStateCreateInfoEXT* to);
 
@@ -2368,11 +2741,13 @@
 #ifdef VK_EXT_hdr_metadata
 void deepcopy_VkXYColorEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkXYColorEXT* from,
     VkXYColorEXT* to);
 
 void deepcopy_VkHdrMetadataEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* from,
     VkHdrMetadataEXT* to);
 
@@ -2380,6 +2755,7 @@
 #ifdef VK_MVK_ios_surface
 void deepcopy_VkIOSSurfaceCreateInfoMVK(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* from,
     VkIOSSurfaceCreateInfoMVK* to);
 
@@ -2387,6 +2763,7 @@
 #ifdef VK_MVK_macos_surface
 void deepcopy_VkMacOSSurfaceCreateInfoMVK(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* from,
     VkMacOSSurfaceCreateInfoMVK* to);
 
@@ -2400,26 +2777,31 @@
 #ifdef VK_EXT_debug_utils
 void deepcopy_VkDebugUtilsLabelEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* from,
     VkDebugUtilsLabelEXT* to);
 
 void deepcopy_VkDebugUtilsObjectNameInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* from,
     VkDebugUtilsObjectNameInfoEXT* to);
 
 void deepcopy_VkDebugUtilsMessengerCallbackDataEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* from,
     VkDebugUtilsMessengerCallbackDataEXT* to);
 
 void deepcopy_VkDebugUtilsMessengerCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* from,
     VkDebugUtilsMessengerCreateInfoEXT* to);
 
 void deepcopy_VkDebugUtilsObjectTagInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* from,
     VkDebugUtilsObjectTagInfoEXT* to);
 
@@ -2427,31 +2809,37 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void deepcopy_VkAndroidHardwareBufferUsageANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* from,
     VkAndroidHardwareBufferUsageANDROID* to);
 
 void deepcopy_VkAndroidHardwareBufferPropertiesANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* from,
     VkAndroidHardwareBufferPropertiesANDROID* to);
 
 void deepcopy_VkAndroidHardwareBufferFormatPropertiesANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* from,
     VkAndroidHardwareBufferFormatPropertiesANDROID* to);
 
 void deepcopy_VkImportAndroidHardwareBufferInfoANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* from,
     VkImportAndroidHardwareBufferInfoANDROID* to);
 
 void deepcopy_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* from,
     VkMemoryGetAndroidHardwareBufferInfoANDROID* to);
 
 void deepcopy_VkExternalFormatANDROID(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* from,
     VkExternalFormatANDROID* to);
 
@@ -2471,21 +2859,25 @@
 #ifdef VK_EXT_inline_uniform_block
 void deepcopy_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* from,
     VkPhysicalDeviceInlineUniformBlockFeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* from,
     VkPhysicalDeviceInlineUniformBlockPropertiesEXT* to);
 
 void deepcopy_VkWriteDescriptorSetInlineUniformBlockEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* from,
     VkWriteDescriptorSetInlineUniformBlockEXT* to);
 
 void deepcopy_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* from,
     VkDescriptorPoolInlineUniformBlockCreateInfoEXT* to);
 
@@ -2495,41 +2887,49 @@
 #ifdef VK_EXT_sample_locations
 void deepcopy_VkSampleLocationEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSampleLocationEXT* from,
     VkSampleLocationEXT* to);
 
 void deepcopy_VkSampleLocationsInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* from,
     VkSampleLocationsInfoEXT* to);
 
 void deepcopy_VkAttachmentSampleLocationsEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* from,
     VkAttachmentSampleLocationsEXT* to);
 
 void deepcopy_VkSubpassSampleLocationsEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* from,
     VkSubpassSampleLocationsEXT* to);
 
 void deepcopy_VkRenderPassSampleLocationsBeginInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* from,
     VkRenderPassSampleLocationsBeginInfoEXT* to);
 
 void deepcopy_VkPipelineSampleLocationsStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* from,
     VkPipelineSampleLocationsStateCreateInfoEXT* to);
 
 void deepcopy_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* from,
     VkPhysicalDeviceSampleLocationsPropertiesEXT* to);
 
 void deepcopy_VkMultisamplePropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* from,
     VkMultisamplePropertiesEXT* to);
 
@@ -2537,16 +2937,19 @@
 #ifdef VK_EXT_blend_operation_advanced
 void deepcopy_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* from,
     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* from,
     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* to);
 
 void deepcopy_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* from,
     VkPipelineColorBlendAdvancedStateCreateInfoEXT* to);
 
@@ -2554,6 +2957,7 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void deepcopy_VkPipelineCoverageToColorStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* from,
     VkPipelineCoverageToColorStateCreateInfoNV* to);
 
@@ -2561,6 +2965,7 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void deepcopy_VkPipelineCoverageModulationStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* from,
     VkPipelineCoverageModulationStateCreateInfoNV* to);
 
@@ -2570,11 +2975,13 @@
 #ifdef VK_NV_shader_sm_builtins
 void deepcopy_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* from,
     VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* to);
 
 void deepcopy_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* from,
     VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* to);
 
@@ -2584,31 +2991,37 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void deepcopy_VkDrmFormatModifierPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* from,
     VkDrmFormatModifierPropertiesEXT* to);
 
 void deepcopy_VkDrmFormatModifierPropertiesListEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* from,
     VkDrmFormatModifierPropertiesListEXT* to);
 
 void deepcopy_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* from,
     VkPhysicalDeviceImageDrmFormatModifierInfoEXT* to);
 
 void deepcopy_VkImageDrmFormatModifierListCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* from,
     VkImageDrmFormatModifierListCreateInfoEXT* to);
 
 void deepcopy_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* from,
     VkImageDrmFormatModifierExplicitCreateInfoEXT* to);
 
 void deepcopy_VkImageDrmFormatModifierPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* from,
     VkImageDrmFormatModifierPropertiesEXT* to);
 
@@ -2616,11 +3029,13 @@
 #ifdef VK_EXT_validation_cache
 void deepcopy_VkValidationCacheCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* from,
     VkValidationCacheCreateInfoEXT* to);
 
 void deepcopy_VkShaderModuleValidationCacheCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* from,
     VkShaderModuleValidationCacheCreateInfoEXT* to);
 
@@ -2642,36 +3057,43 @@
 #ifdef VK_NV_shading_rate_image
 void deepcopy_VkShadingRatePaletteNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* from,
     VkShadingRatePaletteNV* to);
 
 void deepcopy_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* from,
     VkPipelineViewportShadingRateImageStateCreateInfoNV* to);
 
 void deepcopy_VkPhysicalDeviceShadingRateImageFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* from,
     VkPhysicalDeviceShadingRateImageFeaturesNV* to);
 
 void deepcopy_VkPhysicalDeviceShadingRateImagePropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* from,
     VkPhysicalDeviceShadingRateImagePropertiesNV* to);
 
 void deepcopy_VkCoarseSampleLocationNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* from,
     VkCoarseSampleLocationNV* to);
 
 void deepcopy_VkCoarseSampleOrderCustomNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* from,
     VkCoarseSampleOrderCustomNV* to);
 
 void deepcopy_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* from,
     VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* to);
 
@@ -2679,66 +3101,79 @@
 #ifdef VK_NV_ray_tracing
 void deepcopy_VkRayTracingShaderGroupCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* from,
     VkRayTracingShaderGroupCreateInfoNV* to);
 
 void deepcopy_VkRayTracingPipelineCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* from,
     VkRayTracingPipelineCreateInfoNV* to);
 
 void deepcopy_VkGeometryTrianglesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* from,
     VkGeometryTrianglesNV* to);
 
 void deepcopy_VkGeometryAABBNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryAABBNV* from,
     VkGeometryAABBNV* to);
 
 void deepcopy_VkGeometryDataNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryDataNV* from,
     VkGeometryDataNV* to);
 
 void deepcopy_VkGeometryNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeometryNV* from,
     VkGeometryNV* to);
 
 void deepcopy_VkAccelerationStructureInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* from,
     VkAccelerationStructureInfoNV* to);
 
 void deepcopy_VkAccelerationStructureCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* from,
     VkAccelerationStructureCreateInfoNV* to);
 
 void deepcopy_VkBindAccelerationStructureMemoryInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* from,
     VkBindAccelerationStructureMemoryInfoNV* to);
 
 void deepcopy_VkWriteDescriptorSetAccelerationStructureNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* from,
     VkWriteDescriptorSetAccelerationStructureNV* to);
 
 void deepcopy_VkAccelerationStructureMemoryRequirementsInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* from,
     VkAccelerationStructureMemoryRequirementsInfoNV* to);
 
 void deepcopy_VkPhysicalDeviceRayTracingPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* from,
     VkPhysicalDeviceRayTracingPropertiesNV* to);
 
 void deepcopy_VkTransformMatrixKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* from,
     VkTransformMatrixKHR* to);
 
@@ -2746,6 +3181,7 @@
 
 void deepcopy_VkAabbPositionsKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* from,
     VkAabbPositionsKHR* to);
 
@@ -2753,6 +3189,7 @@
 
 void deepcopy_VkAccelerationStructureInstanceKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* from,
     VkAccelerationStructureInstanceKHR* to);
 
@@ -2762,11 +3199,13 @@
 #ifdef VK_NV_representative_fragment_test
 void deepcopy_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* from,
     VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* to);
 
 void deepcopy_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* from,
     VkPipelineRepresentativeFragmentTestStateCreateInfoNV* to);
 
@@ -2774,11 +3213,13 @@
 #ifdef VK_EXT_filter_cubic
 void deepcopy_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* from,
     VkPhysicalDeviceImageViewImageFormatInfoEXT* to);
 
 void deepcopy_VkFilterCubicImageViewImageFormatPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* from,
     VkFilterCubicImageViewImageFormatPropertiesEXT* to);
 
@@ -2788,6 +3229,7 @@
 #ifdef VK_EXT_global_priority
 void deepcopy_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* from,
     VkDeviceQueueGlobalPriorityCreateInfoEXT* to);
 
@@ -2795,16 +3237,19 @@
 #ifdef VK_EXT_external_memory_host
 void deepcopy_VkImportMemoryHostPointerInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* from,
     VkImportMemoryHostPointerInfoEXT* to);
 
 void deepcopy_VkMemoryHostPointerPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* from,
     VkMemoryHostPointerPropertiesEXT* to);
 
 void deepcopy_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* from,
     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* to);
 
@@ -2814,6 +3259,7 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void deepcopy_VkPipelineCompilerControlCreateInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* from,
     VkPipelineCompilerControlCreateInfoAMD* to);
 
@@ -2821,6 +3267,7 @@
 #ifdef VK_EXT_calibrated_timestamps
 void deepcopy_VkCalibratedTimestampInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* from,
     VkCalibratedTimestampInfoEXT* to);
 
@@ -2828,6 +3275,7 @@
 #ifdef VK_AMD_shader_core_properties
 void deepcopy_VkPhysicalDeviceShaderCorePropertiesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* from,
     VkPhysicalDeviceShaderCorePropertiesAMD* to);
 
@@ -2835,6 +3283,7 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void deepcopy_VkDeviceMemoryOverallocationCreateInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* from,
     VkDeviceMemoryOverallocationCreateInfoAMD* to);
 
@@ -2842,21 +3291,25 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void deepcopy_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* from,
     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* to);
 
 void deepcopy_VkVertexInputBindingDivisorDescriptionEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* from,
     VkVertexInputBindingDivisorDescriptionEXT* to);
 
 void deepcopy_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* from,
     VkPipelineVertexInputDivisorStateCreateInfoEXT* to);
 
 void deepcopy_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* from,
     VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* to);
 
@@ -2864,6 +3317,7 @@
 #ifdef VK_GGP_frame_token
 void deepcopy_VkPresentFrameTokenGGP(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* from,
     VkPresentFrameTokenGGP* to);
 
@@ -2871,11 +3325,13 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void deepcopy_VkPipelineCreationFeedbackEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* from,
     VkPipelineCreationFeedbackEXT* to);
 
 void deepcopy_VkPipelineCreationFeedbackCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* from,
     VkPipelineCreationFeedbackCreateInfoEXT* to);
 
@@ -2885,6 +3341,7 @@
 #ifdef VK_NV_compute_shader_derivatives
 void deepcopy_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* from,
     VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* to);
 
@@ -2892,16 +3349,19 @@
 #ifdef VK_NV_mesh_shader
 void deepcopy_VkPhysicalDeviceMeshShaderFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* from,
     VkPhysicalDeviceMeshShaderFeaturesNV* to);
 
 void deepcopy_VkPhysicalDeviceMeshShaderPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* from,
     VkPhysicalDeviceMeshShaderPropertiesNV* to);
 
 void deepcopy_VkDrawMeshTasksIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* from,
     VkDrawMeshTasksIndirectCommandNV* to);
 
@@ -2909,6 +3369,7 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void deepcopy_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* from,
     VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* to);
 
@@ -2916,6 +3377,7 @@
 #ifdef VK_NV_shader_image_footprint
 void deepcopy_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* from,
     VkPhysicalDeviceShaderImageFootprintFeaturesNV* to);
 
@@ -2923,11 +3385,13 @@
 #ifdef VK_NV_scissor_exclusive
 void deepcopy_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* from,
     VkPipelineViewportExclusiveScissorStateCreateInfoNV* to);
 
 void deepcopy_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* from,
     VkPhysicalDeviceExclusiveScissorFeaturesNV* to);
 
@@ -2935,11 +3399,13 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void deepcopy_VkQueueFamilyCheckpointPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* from,
     VkQueueFamilyCheckpointPropertiesNV* to);
 
 void deepcopy_VkCheckpointDataNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCheckpointDataNV* from,
     VkCheckpointDataNV* to);
 
@@ -2947,6 +3413,7 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void deepcopy_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* from,
     VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* to);
 
@@ -2954,21 +3421,25 @@
 #ifdef VK_INTEL_performance_query
 void deepcopy_VkPerformanceValueDataINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* from,
     VkPerformanceValueDataINTEL* to);
 
 void deepcopy_VkPerformanceValueINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* from,
     VkPerformanceValueINTEL* to);
 
 void deepcopy_VkInitializePerformanceApiInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* from,
     VkInitializePerformanceApiInfoINTEL* to);
 
 void deepcopy_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* from,
     VkQueryPoolPerformanceQueryCreateInfoINTEL* to);
 
@@ -2976,21 +3447,25 @@
 
 void deepcopy_VkPerformanceMarkerInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* from,
     VkPerformanceMarkerInfoINTEL* to);
 
 void deepcopy_VkPerformanceStreamMarkerInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* from,
     VkPerformanceStreamMarkerInfoINTEL* to);
 
 void deepcopy_VkPerformanceOverrideInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* from,
     VkPerformanceOverrideInfoINTEL* to);
 
 void deepcopy_VkPerformanceConfigurationAcquireInfoINTEL(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* from,
     VkPerformanceConfigurationAcquireInfoINTEL* to);
 
@@ -2998,6 +3473,7 @@
 #ifdef VK_EXT_pci_bus_info
 void deepcopy_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* from,
     VkPhysicalDevicePCIBusInfoPropertiesEXT* to);
 
@@ -3005,11 +3481,13 @@
 #ifdef VK_AMD_display_native_hdr
 void deepcopy_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* from,
     VkDisplayNativeHdrSurfaceCapabilitiesAMD* to);
 
 void deepcopy_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* from,
     VkSwapchainDisplayNativeHdrCreateInfoAMD* to);
 
@@ -3017,6 +3495,7 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void deepcopy_VkImagePipeSurfaceCreateInfoFUCHSIA(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* from,
     VkImagePipeSurfaceCreateInfoFUCHSIA* to);
 
@@ -3024,25 +3503,29 @@
 #ifdef VK_EXT_metal_surface
 void deepcopy_VkMetalSurfaceCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* from,
     VkMetalSurfaceCreateInfoEXT* to);
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void deepcopy_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void deepcopy_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     BumpPool* pool,
-    const VkImportColorBufferGOOGLE* from,
-    VkImportColorBufferGOOGLE* to);
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* from,
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* to);
 
-void deepcopy_VkImportBufferGOOGLE(
+void deepcopy_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     BumpPool* pool,
-    const VkImportBufferGOOGLE* from,
-    VkImportBufferGOOGLE* to);
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* from,
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* to);
 
-void deepcopy_VkImportPhysicalAddressGOOGLE(
+void deepcopy_VkRenderPassFragmentDensityMapCreateInfoEXT(
     BumpPool* pool,
-    const VkImportPhysicalAddressGOOGLE* from,
-    VkImportPhysicalAddressGOOGLE* to);
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* from,
+    VkRenderPassFragmentDensityMapCreateInfoEXT* to);
 
 #endif
 #ifdef VK_EXT_scalar_block_layout
@@ -3056,16 +3539,19 @@
 #ifdef VK_EXT_subgroup_size_control
 void deepcopy_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* from,
     VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* from,
     VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* to);
 
 void deepcopy_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* from,
     VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* to);
 
@@ -3073,6 +3559,7 @@
 #ifdef VK_AMD_shader_core_properties2
 void deepcopy_VkPhysicalDeviceShaderCoreProperties2AMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* from,
     VkPhysicalDeviceShaderCoreProperties2AMD* to);
 
@@ -3080,6 +3567,7 @@
 #ifdef VK_AMD_device_coherent_memory
 void deepcopy_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* from,
     VkPhysicalDeviceCoherentMemoryFeaturesAMD* to);
 
@@ -3087,6 +3575,7 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void deepcopy_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* from,
     VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* to);
 
@@ -3094,6 +3583,7 @@
 #ifdef VK_EXT_memory_budget
 void deepcopy_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* from,
     VkPhysicalDeviceMemoryBudgetPropertiesEXT* to);
 
@@ -3101,11 +3591,13 @@
 #ifdef VK_EXT_memory_priority
 void deepcopy_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* from,
     VkPhysicalDeviceMemoryPriorityFeaturesEXT* to);
 
 void deepcopy_VkMemoryPriorityAllocateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* from,
     VkMemoryPriorityAllocateInfoEXT* to);
 
@@ -3113,6 +3605,7 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void deepcopy_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* from,
     VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* to);
 
@@ -3120,6 +3613,7 @@
 #ifdef VK_EXT_buffer_device_address
 void deepcopy_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* from,
     VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* to);
 
@@ -3129,6 +3623,7 @@
 
 void deepcopy_VkBufferDeviceAddressCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* from,
     VkBufferDeviceAddressCreateInfoEXT* to);
 
@@ -3136,6 +3631,7 @@
 #ifdef VK_EXT_tooling_info
 void deepcopy_VkPhysicalDeviceToolPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* from,
     VkPhysicalDeviceToolPropertiesEXT* to);
 
@@ -3147,6 +3643,7 @@
 #ifdef VK_EXT_validation_features
 void deepcopy_VkValidationFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* from,
     VkValidationFeaturesEXT* to);
 
@@ -3154,16 +3651,19 @@
 #ifdef VK_NV_cooperative_matrix
 void deepcopy_VkCooperativeMatrixPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* from,
     VkCooperativeMatrixPropertiesNV* to);
 
 void deepcopy_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* from,
     VkPhysicalDeviceCooperativeMatrixFeaturesNV* to);
 
 void deepcopy_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* from,
     VkPhysicalDeviceCooperativeMatrixPropertiesNV* to);
 
@@ -3171,16 +3671,19 @@
 #ifdef VK_NV_coverage_reduction_mode
 void deepcopy_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* from,
     VkPhysicalDeviceCoverageReductionModeFeaturesNV* to);
 
 void deepcopy_VkPipelineCoverageReductionStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* from,
     VkPipelineCoverageReductionStateCreateInfoNV* to);
 
 void deepcopy_VkFramebufferMixedSamplesCombinationNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* from,
     VkFramebufferMixedSamplesCombinationNV* to);
 
@@ -3188,6 +3691,7 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void deepcopy_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* from,
     VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* to);
 
@@ -3195,6 +3699,7 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void deepcopy_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* from,
     VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* to);
 
@@ -3202,16 +3707,19 @@
 #ifdef VK_EXT_full_screen_exclusive
 void deepcopy_VkSurfaceFullScreenExclusiveInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* from,
     VkSurfaceFullScreenExclusiveInfoEXT* to);
 
 void deepcopy_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* from,
     VkSurfaceCapabilitiesFullScreenExclusiveEXT* to);
 
 void deepcopy_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* from,
     VkSurfaceFullScreenExclusiveWin32InfoEXT* to);
 
@@ -3219,6 +3727,7 @@
 #ifdef VK_EXT_headless_surface
 void deepcopy_VkHeadlessSurfaceCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* from,
     VkHeadlessSurfaceCreateInfoEXT* to);
 
@@ -3226,16 +3735,19 @@
 #ifdef VK_EXT_line_rasterization
 void deepcopy_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* from,
     VkPhysicalDeviceLineRasterizationFeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* from,
     VkPhysicalDeviceLineRasterizationPropertiesEXT* to);
 
 void deepcopy_VkPipelineRasterizationLineStateCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* from,
     VkPipelineRasterizationLineStateCreateInfoEXT* to);
 
@@ -3243,6 +3755,7 @@
 #ifdef VK_EXT_shader_atomic_float
 void deepcopy_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* from,
     VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* to);
 
@@ -3254,6 +3767,7 @@
 #ifdef VK_EXT_index_type_uint8
 void deepcopy_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* from,
     VkPhysicalDeviceIndexTypeUint8FeaturesEXT* to);
 
@@ -3261,6 +3775,7 @@
 #ifdef VK_EXT_extended_dynamic_state
 void deepcopy_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* from,
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* to);
 
@@ -3268,6 +3783,7 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void deepcopy_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* from,
     VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* to);
 
@@ -3275,66 +3791,79 @@
 #ifdef VK_NV_device_generated_commands
 void deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* from,
     VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* to);
 
 void deepcopy_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* from,
     VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* to);
 
 void deepcopy_VkGraphicsShaderGroupCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* from,
     VkGraphicsShaderGroupCreateInfoNV* to);
 
 void deepcopy_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* from,
     VkGraphicsPipelineShaderGroupsCreateInfoNV* to);
 
 void deepcopy_VkBindShaderGroupIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* from,
     VkBindShaderGroupIndirectCommandNV* to);
 
 void deepcopy_VkBindIndexBufferIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* from,
     VkBindIndexBufferIndirectCommandNV* to);
 
 void deepcopy_VkBindVertexBufferIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* from,
     VkBindVertexBufferIndirectCommandNV* to);
 
 void deepcopy_VkSetStateFlagsIndirectCommandNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* from,
     VkSetStateFlagsIndirectCommandNV* to);
 
 void deepcopy_VkIndirectCommandsStreamNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* from,
     VkIndirectCommandsStreamNV* to);
 
 void deepcopy_VkIndirectCommandsLayoutTokenNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* from,
     VkIndirectCommandsLayoutTokenNV* to);
 
 void deepcopy_VkIndirectCommandsLayoutCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* from,
     VkIndirectCommandsLayoutCreateInfoNV* to);
 
 void deepcopy_VkGeneratedCommandsInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* from,
     VkGeneratedCommandsInfoNV* to);
 
 void deepcopy_VkGeneratedCommandsMemoryRequirementsInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* from,
     VkGeneratedCommandsMemoryRequirementsInfoNV* to);
 
@@ -3342,11 +3871,13 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void deepcopy_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* from,
     VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* from,
     VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* to);
 
@@ -3354,11 +3885,13 @@
 #ifdef VK_QCOM_render_pass_transform
 void deepcopy_VkRenderPassTransformBeginInfoQCOM(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* from,
     VkRenderPassTransformBeginInfoQCOM* to);
 
 void deepcopy_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* from,
     VkCommandBufferInheritanceRenderPassTransformInfoQCOM* to);
 
@@ -3366,16 +3899,19 @@
 #ifdef VK_EXT_device_memory_report
 void deepcopy_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* from,
     VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* to);
 
 void deepcopy_VkDeviceMemoryReportCallbackDataEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* from,
     VkDeviceMemoryReportCallbackDataEXT* to);
 
 void deepcopy_VkDeviceDeviceMemoryReportCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* from,
     VkDeviceDeviceMemoryReportCreateInfoEXT* to);
 
@@ -3383,11 +3919,13 @@
 #ifdef VK_EXT_robustness2
 void deepcopy_VkPhysicalDeviceRobustness2FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* from,
     VkPhysicalDeviceRobustness2FeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceRobustness2PropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* from,
     VkPhysicalDeviceRobustness2PropertiesEXT* to);
 
@@ -3395,16 +3933,19 @@
 #ifdef VK_EXT_custom_border_color
 void deepcopy_VkSamplerCustomBorderColorCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* from,
     VkSamplerCustomBorderColorCreateInfoEXT* to);
 
 void deepcopy_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* from,
     VkPhysicalDeviceCustomBorderColorPropertiesEXT* to);
 
 void deepcopy_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* from,
     VkPhysicalDeviceCustomBorderColorFeaturesEXT* to);
 
@@ -3414,16 +3955,19 @@
 #ifdef VK_EXT_private_data
 void deepcopy_VkPhysicalDevicePrivateDataFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* from,
     VkPhysicalDevicePrivateDataFeaturesEXT* to);
 
 void deepcopy_VkDevicePrivateDataCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* from,
     VkDevicePrivateDataCreateInfoEXT* to);
 
 void deepcopy_VkPrivateDataSlotCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* from,
     VkPrivateDataSlotCreateInfoEXT* to);
 
@@ -3431,6 +3975,7 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void deepcopy_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* from,
     VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* to);
 
@@ -3438,11 +3983,13 @@
 #ifdef VK_NV_device_diagnostics_config
 void deepcopy_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* from,
     VkPhysicalDeviceDiagnosticsConfigFeaturesNV* to);
 
 void deepcopy_VkDeviceDiagnosticsConfigCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* from,
     VkDeviceDiagnosticsConfigCreateInfoNV* to);
 
@@ -3452,16 +3999,19 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* from,
     VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* to);
 
 void deepcopy_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* from,
     VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* to);
 
 void deepcopy_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* from,
     VkPipelineFragmentShadingRateEnumStateCreateInfoNV* to);
 
@@ -3469,11 +4019,13 @@
 #ifdef VK_EXT_fragment_density_map2
 void deepcopy_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* from,
     VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* to);
 
 void deepcopy_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* from,
     VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* to);
 
@@ -3481,6 +4033,7 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void deepcopy_VkCopyCommandTransformInfoQCOM(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* from,
     VkCopyCommandTransformInfoQCOM* to);
 
@@ -3488,6 +4041,7 @@
 #ifdef VK_EXT_image_robustness
 void deepcopy_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* from,
     VkPhysicalDeviceImageRobustnessFeaturesEXT* to);
 
@@ -3495,6 +4049,7 @@
 #ifdef VK_EXT_4444_formats
 void deepcopy_VkPhysicalDevice4444FormatsFeaturesEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* from,
     VkPhysicalDevice4444FormatsFeaturesEXT* to);
 
@@ -3502,105 +4057,143 @@
 #ifdef VK_EXT_directfb_surface
 void deepcopy_VkDirectFBSurfaceCreateInfoEXT(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* from,
     VkDirectFBSurfaceCreateInfoEXT* to);
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void deepcopy_VkImportColorBufferGOOGLE(
+    BumpPool* pool,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* from,
+    VkImportColorBufferGOOGLE* to);
+
+void deepcopy_VkImportBufferGOOGLE(
+    BumpPool* pool,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* from,
+    VkImportBufferGOOGLE* to);
+
+void deepcopy_VkImportPhysicalAddressGOOGLE(
+    BumpPool* pool,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* from,
+    VkImportPhysicalAddressGOOGLE* to);
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void deepcopy_VkDeviceOrHostAddressKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* from,
     VkDeviceOrHostAddressKHR* to);
 
 void deepcopy_VkDeviceOrHostAddressConstKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* from,
     VkDeviceOrHostAddressConstKHR* to);
 
 void deepcopy_VkAccelerationStructureBuildRangeInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* from,
     VkAccelerationStructureBuildRangeInfoKHR* to);
 
 void deepcopy_VkAccelerationStructureGeometryTrianglesDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* from,
     VkAccelerationStructureGeometryTrianglesDataKHR* to);
 
 void deepcopy_VkAccelerationStructureGeometryAabbsDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* from,
     VkAccelerationStructureGeometryAabbsDataKHR* to);
 
 void deepcopy_VkAccelerationStructureGeometryInstancesDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* from,
     VkAccelerationStructureGeometryInstancesDataKHR* to);
 
 void deepcopy_VkAccelerationStructureGeometryDataKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* from,
     VkAccelerationStructureGeometryDataKHR* to);
 
 void deepcopy_VkAccelerationStructureGeometryKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* from,
     VkAccelerationStructureGeometryKHR* to);
 
 void deepcopy_VkAccelerationStructureBuildGeometryInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* from,
     VkAccelerationStructureBuildGeometryInfoKHR* to);
 
 void deepcopy_VkAccelerationStructureCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* from,
     VkAccelerationStructureCreateInfoKHR* to);
 
 void deepcopy_VkWriteDescriptorSetAccelerationStructureKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* from,
     VkWriteDescriptorSetAccelerationStructureKHR* to);
 
 void deepcopy_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* from,
     VkPhysicalDeviceAccelerationStructureFeaturesKHR* to);
 
 void deepcopy_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* from,
     VkPhysicalDeviceAccelerationStructurePropertiesKHR* to);
 
 void deepcopy_VkAccelerationStructureDeviceAddressInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* from,
     VkAccelerationStructureDeviceAddressInfoKHR* to);
 
 void deepcopy_VkAccelerationStructureVersionInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* from,
     VkAccelerationStructureVersionInfoKHR* to);
 
 void deepcopy_VkCopyAccelerationStructureToMemoryInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* from,
     VkCopyAccelerationStructureToMemoryInfoKHR* to);
 
 void deepcopy_VkCopyMemoryToAccelerationStructureInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* from,
     VkCopyMemoryToAccelerationStructureInfoKHR* to);
 
 void deepcopy_VkCopyAccelerationStructureInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* from,
     VkCopyAccelerationStructureInfoKHR* to);
 
 void deepcopy_VkAccelerationStructureBuildSizesInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* from,
     VkAccelerationStructureBuildSizesInfoKHR* to);
 
@@ -3608,36 +4201,43 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void deepcopy_VkRayTracingShaderGroupCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* from,
     VkRayTracingShaderGroupCreateInfoKHR* to);
 
 void deepcopy_VkRayTracingPipelineInterfaceCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* from,
     VkRayTracingPipelineInterfaceCreateInfoKHR* to);
 
 void deepcopy_VkRayTracingPipelineCreateInfoKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* from,
     VkRayTracingPipelineCreateInfoKHR* to);
 
 void deepcopy_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* from,
     VkPhysicalDeviceRayTracingPipelineFeaturesKHR* to);
 
 void deepcopy_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* from,
     VkPhysicalDeviceRayTracingPipelinePropertiesKHR* to);
 
 void deepcopy_VkStridedDeviceAddressRegionKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* from,
     VkStridedDeviceAddressRegionKHR* to);
 
 void deepcopy_VkTraceRaysIndirectCommandKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* from,
     VkTraceRaysIndirectCommandKHR* to);
 
@@ -3645,6 +4245,7 @@
 #ifdef VK_KHR_ray_query
 void deepcopy_VkPhysicalDeviceRayQueryFeaturesKHR(
     BumpPool* pool,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* from,
     VkPhysicalDeviceRayQueryFeaturesKHR* to);
 
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
index 9169a98..5984b4d 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.cpp
@@ -386,7 +386,7 @@
 #endif
 #ifdef VK_EXT_metal_surface
 #endif
-#ifdef VK_GOOGLE_color_buffer
+#ifdef VK_EXT_fragment_density_map
 #endif
 #ifdef VK_EXT_scalar_block_layout
 #endif
@@ -490,6 +490,7 @@
 }
 
 size_t goldfish_vk_extension_struct_size(
+    VkStructureType rootType,
     const void* structExtension)
 {
     if (!structExtension)
@@ -1437,18 +1438,79 @@
             return sizeof(VkSwapchainDisplayNativeHdrCreateInfoAMD);
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            return sizeof(VkImportColorBufferGOOGLE);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    return sizeof(VkImportColorBufferGOOGLE);
+                    break;
+                }
+                default:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
+                    break;
+                }
+            }
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            return sizeof(VkImportBufferGOOGLE);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    return sizeof(VkImportPhysicalAddressGOOGLE);
+                    break;
+                }
+                default:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+                    break;
+                }
+            }
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            return sizeof(VkImportPhysicalAddressGOOGLE);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    return sizeof(VkImportBufferGOOGLE);
+                    break;
+                }
+                default:
+                {
+                    return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT);
+                    break;
+                }
+            }
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
@@ -1741,6 +1803,20 @@
             return sizeof(VkPhysicalDevice4444FormatsFeaturesEXT);
         }
 #endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            return sizeof(VkImportColorBufferGOOGLE);
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            return sizeof(VkImportBufferGOOGLE);
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            return sizeof(VkImportPhysicalAddressGOOGLE);
+        }
+#endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
@@ -1780,6 +1856,7 @@
 
 size_t goldfish_vk_extension_struct_size_with_stream_features(
     uint32_t streamFeatures,
+    VkStructureType rootType,
     const void* structExtension)
 {
     if (!structExtension)
@@ -2734,18 +2811,79 @@
             return sizeof(VkSwapchainDisplayNativeHdrCreateInfoAMD);
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            return sizeof(VkImportColorBufferGOOGLE);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    return sizeof(VkImportColorBufferGOOGLE);
+                    break;
+                }
+                default:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapFeaturesEXT);
+                    break;
+                }
+            }
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            return sizeof(VkImportBufferGOOGLE);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    return sizeof(VkImportPhysicalAddressGOOGLE);
+                    break;
+                }
+                default:
+                {
+                    return sizeof(VkPhysicalDeviceFragmentDensityMapPropertiesEXT);
+                    break;
+                }
+            }
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            return sizeof(VkImportPhysicalAddressGOOGLE);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    return sizeof(VkImportBufferGOOGLE);
+                    break;
+                }
+                default:
+                {
+                    return sizeof(VkRenderPassFragmentDensityMapCreateInfoEXT);
+                    break;
+                }
+            }
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
@@ -3038,6 +3176,20 @@
             return sizeof(VkPhysicalDevice4444FormatsFeaturesEXT);
         }
 #endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            return sizeof(VkImportColorBufferGOOGLE);
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            return sizeof(VkImportBufferGOOGLE);
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            return sizeof(VkImportPhysicalAddressGOOGLE);
+        }
+#endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
diff --git a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
index 1fddc3b..6bae0b8 100644
--- a/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
+++ b/system/vulkan_enc/goldfish_vk_extension_structs_guest.h
@@ -43,10 +43,12 @@
     const void* structExtension);
 
 size_t goldfish_vk_extension_struct_size(
+    VkStructureType rootType,
     const void* structExtension);
 
 size_t goldfish_vk_extension_struct_size_with_stream_features(
     uint32_t streamFeatures,
+    VkStructureType rootType,
     const void* structExtension);
 
 #ifdef VK_VERSION_1_0
@@ -407,7 +409,7 @@
 #endif
 #ifdef VK_EXT_metal_surface
 #endif
-#ifdef VK_GOOGLE_color_buffer
+#ifdef VK_EXT_fragment_density_map
 #endif
 #ifdef VK_EXT_scalar_block_layout
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
index aa1de2d..269b50b 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.cpp
@@ -6816,10 +6816,10 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void handlemap_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void handlemap_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanHandleMapping* handlemap,
-    VkImportColorBufferGOOGLE* toMap)
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toMap)
 {
     (void)handlemap;
     (void)toMap;
@@ -6829,9 +6829,9 @@
     }
 }
 
-void handlemap_VkImportBufferGOOGLE(
+void handlemap_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanHandleMapping* handlemap,
-    VkImportBufferGOOGLE* toMap)
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toMap)
 {
     (void)handlemap;
     (void)toMap;
@@ -6839,11 +6839,13 @@
     {
         handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
     }
+    handlemap_VkExtent2D(handlemap, (VkExtent2D*)(&toMap->minFragmentDensityTexelSize));
+    handlemap_VkExtent2D(handlemap, (VkExtent2D*)(&toMap->maxFragmentDensityTexelSize));
 }
 
-void handlemap_VkImportPhysicalAddressGOOGLE(
+void handlemap_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanHandleMapping* handlemap,
-    VkImportPhysicalAddressGOOGLE* toMap)
+    VkRenderPassFragmentDensityMapCreateInfoEXT* toMap)
 {
     (void)handlemap;
     (void)toMap;
@@ -6851,6 +6853,7 @@
     {
         handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
     }
+    handlemap_VkAttachmentReference(handlemap, (VkAttachmentReference*)(&toMap->fragmentDensityMapAttachment));
 }
 
 #endif
@@ -7860,6 +7863,42 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void handlemap_VkImportColorBufferGOOGLE(
+    VulkanHandleMapping* handlemap,
+    VkImportColorBufferGOOGLE* toMap)
+{
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext)
+    {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkImportBufferGOOGLE(
+    VulkanHandleMapping* handlemap,
+    VkImportBufferGOOGLE* toMap)
+{
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext)
+    {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkImportPhysicalAddressGOOGLE(
+    VulkanHandleMapping* handlemap,
+    VkImportPhysicalAddressGOOGLE* toMap)
+{
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext)
+    {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void handlemap_VkDeviceOrHostAddressKHR(
@@ -9382,20 +9421,20 @@
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            handlemap_VkImportColorBufferGOOGLE(handlemap, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            handlemap_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(handlemap, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            handlemap_VkImportBufferGOOGLE(handlemap, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            handlemap_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(handlemap, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            handlemap_VkImportPhysicalAddressGOOGLE(handlemap, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            handlemap_VkRenderPassFragmentDensityMapCreateInfoEXT(handlemap, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
@@ -9745,6 +9784,23 @@
             break;
         }
 #endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            handlemap_VkImportColorBufferGOOGLE(handlemap, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            handlemap_VkImportBufferGOOGLE(handlemap, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            handlemap_VkImportPhysicalAddressGOOGLE(handlemap, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
diff --git a/system/vulkan_enc/goldfish_vk_handlemap_guest.h b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
index 5362193..9157ecb 100644
--- a/system/vulkan_enc/goldfish_vk_handlemap_guest.h
+++ b/system/vulkan_enc/goldfish_vk_handlemap_guest.h
@@ -2547,18 +2547,18 @@
     VkMetalSurfaceCreateInfoEXT* toMap);
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void handlemap_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void handlemap_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanHandleMapping* handlemap,
-    VkImportColorBufferGOOGLE* toMap);
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toMap);
 
-void handlemap_VkImportBufferGOOGLE(
+void handlemap_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanHandleMapping* handlemap,
-    VkImportBufferGOOGLE* toMap);
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toMap);
 
-void handlemap_VkImportPhysicalAddressGOOGLE(
+void handlemap_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanHandleMapping* handlemap,
-    VkImportPhysicalAddressGOOGLE* toMap);
+    VkRenderPassFragmentDensityMapCreateInfoEXT* toMap);
 
 #endif
 #ifdef VK_EXT_scalar_block_layout
@@ -2950,6 +2950,18 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void handlemap_VkImportColorBufferGOOGLE(
+    VulkanHandleMapping* handlemap,
+    VkImportColorBufferGOOGLE* toMap);
+
+void handlemap_VkImportBufferGOOGLE(
+    VulkanHandleMapping* handlemap,
+    VkImportBufferGOOGLE* toMap);
+
+void handlemap_VkImportPhysicalAddressGOOGLE(
+    VulkanHandleMapping* handlemap,
+    VkImportPhysicalAddressGOOGLE* toMap);
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void handlemap_VkDeviceOrHostAddressKHR(
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
index ab83727..5b1e964 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.cpp
@@ -33,33 +33,41 @@
 
 void marshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const void* structExtension);
 
 void unmarshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     void* structExtension_out);
 
 #ifdef VK_VERSION_1_0
 void marshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent2D* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->width, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->height, sizeof(uint32_t));
 }
 
 void unmarshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExtent2D* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->width, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->height, sizeof(uint32_t));
 }
 
 void marshal_VkExtent3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent3D* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->width, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->height, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->depth, sizeof(uint32_t));
@@ -67,8 +75,10 @@
 
 void unmarshal_VkExtent3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExtent3D* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->width, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->height, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->depth, sizeof(uint32_t));
@@ -76,24 +86,30 @@
 
 void marshal_VkOffset2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset2D* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((int32_t*)&forMarshaling->x, sizeof(int32_t));
     vkStream->write((int32_t*)&forMarshaling->y, sizeof(int32_t));
 }
 
 void unmarshal_VkOffset2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkOffset2D* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((int32_t*)&forUnmarshaling->x, sizeof(int32_t));
     vkStream->read((int32_t*)&forUnmarshaling->y, sizeof(int32_t));
 }
 
 void marshal_VkOffset3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset3D* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((int32_t*)&forMarshaling->x, sizeof(int32_t));
     vkStream->write((int32_t*)&forMarshaling->y, sizeof(int32_t));
     vkStream->write((int32_t*)&forMarshaling->z, sizeof(int32_t));
@@ -101,8 +117,10 @@
 
 void unmarshal_VkOffset3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkOffset3D* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((int32_t*)&forUnmarshaling->x, sizeof(int32_t));
     vkStream->read((int32_t*)&forUnmarshaling->y, sizeof(int32_t));
     vkStream->read((int32_t*)&forUnmarshaling->z, sizeof(int32_t));
@@ -110,58 +128,92 @@
 
 void marshal_VkRect2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRect2D* forMarshaling)
 {
-    marshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->offset));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->extent));
+    (void)rootType;
+    marshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->offset));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->extent));
 }
 
 void unmarshal_VkRect2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRect2D* forUnmarshaling)
 {
-    unmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forUnmarshaling->offset));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->extent));
+    (void)rootType;
+    unmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forUnmarshaling->offset));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->extent));
 }
 
 void marshal_VkBaseInStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseInStructure* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
 }
 
 void unmarshal_VkBaseInStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBaseInStructure* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
 }
 
 void marshal_VkBaseOutStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseOutStructure* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
 }
 
 void unmarshal_VkBaseOutStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBaseOutStructure* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
 }
 
 void marshal_VkBufferMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccessFlags*)&forMarshaling->srcAccessMask, sizeof(VkAccessFlags));
     vkStream->write((VkAccessFlags*)&forMarshaling->dstAccessMask, sizeof(VkAccessFlags));
     vkStream->write((uint32_t*)&forMarshaling->srcQueueFamilyIndex, sizeof(uint32_t));
@@ -175,10 +227,16 @@
 
 void unmarshal_VkBufferMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferMemoryBarrier* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccessFlags*)&forUnmarshaling->srcAccessMask, sizeof(VkAccessFlags));
     vkStream->read((VkAccessFlags*)&forUnmarshaling->dstAccessMask, sizeof(VkAccessFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->srcQueueFamilyIndex, sizeof(uint32_t));
@@ -192,8 +250,10 @@
 
 void marshal_VkDispatchIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->x, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->y, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->z, sizeof(uint32_t));
@@ -201,8 +261,10 @@
 
 void unmarshal_VkDispatchIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDispatchIndirectCommand* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->x, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->y, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->z, sizeof(uint32_t));
@@ -210,8 +272,10 @@
 
 void marshal_VkDrawIndexedIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->indexCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->instanceCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->firstIndex, sizeof(uint32_t));
@@ -221,8 +285,10 @@
 
 void unmarshal_VkDrawIndexedIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrawIndexedIndirectCommand* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->indexCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->instanceCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->firstIndex, sizeof(uint32_t));
@@ -232,8 +298,10 @@
 
 void marshal_VkDrawIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->vertexCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->instanceCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->firstVertex, sizeof(uint32_t));
@@ -242,8 +310,10 @@
 
 void unmarshal_VkDrawIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrawIndirectCommand* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->vertexCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->instanceCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->firstVertex, sizeof(uint32_t));
@@ -252,8 +322,10 @@
 
 void marshal_VkImageSubresourceRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceRange* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->write((uint32_t*)&forMarshaling->baseMipLevel, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->levelCount, sizeof(uint32_t));
@@ -263,8 +335,10 @@
 
 void unmarshal_VkImageSubresourceRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSubresourceRange* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->baseMipLevel, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->levelCount, sizeof(uint32_t));
@@ -274,10 +348,16 @@
 
 void marshal_VkImageMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccessFlags*)&forMarshaling->srcAccessMask, sizeof(VkAccessFlags));
     vkStream->write((VkAccessFlags*)&forMarshaling->dstAccessMask, sizeof(VkAccessFlags));
     vkStream->write((VkImageLayout*)&forMarshaling->oldLayout, sizeof(VkImageLayout));
@@ -287,15 +367,21 @@
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
-    marshal_VkImageSubresourceRange(vkStream, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange));
+    marshal_VkImageSubresourceRange(vkStream, rootType, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange));
 }
 
 void unmarshal_VkImageMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageMemoryBarrier* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccessFlags*)&forUnmarshaling->srcAccessMask, sizeof(VkAccessFlags));
     vkStream->read((VkAccessFlags*)&forUnmarshaling->dstAccessMask, sizeof(VkAccessFlags));
     vkStream->read((VkImageLayout*)&forUnmarshaling->oldLayout, sizeof(VkImageLayout));
@@ -305,33 +391,47 @@
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
-    unmarshal_VkImageSubresourceRange(vkStream, (VkImageSubresourceRange*)(&forUnmarshaling->subresourceRange));
+    unmarshal_VkImageSubresourceRange(vkStream, rootType, (VkImageSubresourceRange*)(&forUnmarshaling->subresourceRange));
 }
 
 void marshal_VkMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryBarrier* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccessFlags*)&forMarshaling->srcAccessMask, sizeof(VkAccessFlags));
     vkStream->write((VkAccessFlags*)&forMarshaling->dstAccessMask, sizeof(VkAccessFlags));
 }
 
 void unmarshal_VkMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryBarrier* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccessFlags*)&forUnmarshaling->srcAccessMask, sizeof(VkAccessFlags));
     vkStream->read((VkAccessFlags*)&forUnmarshaling->dstAccessMask, sizeof(VkAccessFlags));
 }
 
 void marshal_VkAllocationCallbacks(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAllocationCallbacks* forMarshaling)
 {
+    (void)rootType;
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pUserData;
     vkStream->putBe64(cgen_var_0);
@@ -353,8 +453,10 @@
 
 void unmarshal_VkAllocationCallbacks(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAllocationCallbacks* forUnmarshaling)
 {
+    (void)rootType;
     // WARNING PTR CHECK
     void* check_pUserData;
     check_pUserData = (void*)(uintptr_t)vkStream->getBe64();
@@ -375,10 +477,16 @@
 
 void marshal_VkApplicationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkApplicationInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
         // WARNING PTR CHECK
@@ -414,10 +522,16 @@
 
 void unmarshal_VkApplicationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkApplicationInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
         // WARNING PTR CHECK
@@ -461,8 +575,10 @@
 
 void marshal_VkFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkFormatFeatureFlags*)&forMarshaling->linearTilingFeatures, sizeof(VkFormatFeatureFlags));
     vkStream->write((VkFormatFeatureFlags*)&forMarshaling->optimalTilingFeatures, sizeof(VkFormatFeatureFlags));
     vkStream->write((VkFormatFeatureFlags*)&forMarshaling->bufferFeatures, sizeof(VkFormatFeatureFlags));
@@ -470,8 +586,10 @@
 
 void unmarshal_VkFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFormatProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkFormatFeatureFlags*)&forUnmarshaling->linearTilingFeatures, sizeof(VkFormatFeatureFlags));
     vkStream->read((VkFormatFeatureFlags*)&forUnmarshaling->optimalTilingFeatures, sizeof(VkFormatFeatureFlags));
     vkStream->read((VkFormatFeatureFlags*)&forUnmarshaling->bufferFeatures, sizeof(VkFormatFeatureFlags));
@@ -479,9 +597,11 @@
 
 void marshal_VkImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties* forMarshaling)
 {
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->maxExtent));
+    (void)rootType;
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->maxExtent));
     vkStream->write((uint32_t*)&forMarshaling->maxMipLevels, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxArrayLayers, sizeof(uint32_t));
     vkStream->write((VkSampleCountFlags*)&forMarshaling->sampleCounts, sizeof(VkSampleCountFlags));
@@ -490,9 +610,11 @@
 
 void unmarshal_VkImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageFormatProperties* forUnmarshaling)
 {
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->maxExtent));
+    (void)rootType;
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->maxExtent));
     vkStream->read((uint32_t*)&forUnmarshaling->maxMipLevels, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxArrayLayers, sizeof(uint32_t));
     vkStream->read((VkSampleCountFlags*)&forUnmarshaling->sampleCounts, sizeof(VkSampleCountFlags));
@@ -501,17 +623,23 @@
 
 void marshal_VkInstanceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkInstanceCreateFlags*)&forMarshaling->flags, sizeof(VkInstanceCreateFlags));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pApplicationInfo;
     vkStream->putBe64(cgen_var_0);
     if (forMarshaling->pApplicationInfo)
     {
-        marshal_VkApplicationInfo(vkStream, (const VkApplicationInfo*)(forMarshaling->pApplicationInfo));
+        marshal_VkApplicationInfo(vkStream, rootType, (const VkApplicationInfo*)(forMarshaling->pApplicationInfo));
     }
     vkStream->write((uint32_t*)&forMarshaling->enabledLayerCount, sizeof(uint32_t));
     saveStringArray(vkStream, forMarshaling->ppEnabledLayerNames, forMarshaling->enabledLayerCount);
@@ -521,10 +649,16 @@
 
 void unmarshal_VkInstanceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkInstanceCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkInstanceCreateFlags*)&forUnmarshaling->flags, sizeof(VkInstanceCreateFlags));
     // WARNING PTR CHECK
     const VkApplicationInfo* check_pApplicationInfo;
@@ -535,7 +669,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pApplicationInfo inconsistent between guest and host\n");
         }
-        unmarshal_VkApplicationInfo(vkStream, (VkApplicationInfo*)(forUnmarshaling->pApplicationInfo));
+        unmarshal_VkApplicationInfo(vkStream, rootType, (VkApplicationInfo*)(forUnmarshaling->pApplicationInfo));
     }
     vkStream->read((uint32_t*)&forUnmarshaling->enabledLayerCount, sizeof(uint32_t));
     vkStream->loadStringArrayInPlace((char***)&forUnmarshaling->ppEnabledLayerNames);
@@ -545,40 +679,50 @@
 
 void marshal_VkMemoryHeap(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHeap* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     vkStream->write((VkMemoryHeapFlags*)&forMarshaling->flags, sizeof(VkMemoryHeapFlags));
 }
 
 void unmarshal_VkMemoryHeap(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryHeap* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
     vkStream->read((VkMemoryHeapFlags*)&forUnmarshaling->flags, sizeof(VkMemoryHeapFlags));
 }
 
 void marshal_VkMemoryType(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryType* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkMemoryPropertyFlags*)&forMarshaling->propertyFlags, sizeof(VkMemoryPropertyFlags));
     vkStream->write((uint32_t*)&forMarshaling->heapIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkMemoryType(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryType* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkMemoryPropertyFlags*)&forUnmarshaling->propertyFlags, sizeof(VkMemoryPropertyFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->heapIndex, sizeof(uint32_t));
 }
 
 void marshal_VkPhysicalDeviceFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkBool32*)&forMarshaling->robustBufferAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->fullDrawIndexUint32, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->imageCubeArray, sizeof(VkBool32));
@@ -638,8 +782,10 @@
 
 void unmarshal_VkPhysicalDeviceFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkBool32*)&forUnmarshaling->robustBufferAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->fullDrawIndexUint32, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->imageCubeArray, sizeof(VkBool32));
@@ -699,8 +845,10 @@
 
 void marshal_VkPhysicalDeviceLimits(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->maxImageDimension1D, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxImageDimension2D, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxImageDimension3D, sizeof(uint32_t));
@@ -812,8 +960,10 @@
 
 void unmarshal_VkPhysicalDeviceLimits(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceLimits* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageDimension1D, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageDimension2D, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageDimension3D, sizeof(uint32_t));
@@ -924,40 +1074,46 @@
 
 void marshal_VkPhysicalDeviceMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeCount, sizeof(uint32_t));
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
     {
-        marshal_VkMemoryType(vkStream, (VkMemoryType*)(forMarshaling->memoryTypes + i));
+        marshal_VkMemoryType(vkStream, rootType, (VkMemoryType*)(forMarshaling->memoryTypes + i));
     }
     vkStream->write((uint32_t*)&forMarshaling->memoryHeapCount, sizeof(uint32_t));
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
     {
-        marshal_VkMemoryHeap(vkStream, (VkMemoryHeap*)(forMarshaling->memoryHeaps + i));
+        marshal_VkMemoryHeap(vkStream, rootType, (VkMemoryHeap*)(forMarshaling->memoryHeaps + i));
     }
 }
 
 void unmarshal_VkPhysicalDeviceMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeCount, sizeof(uint32_t));
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
     {
-        unmarshal_VkMemoryType(vkStream, (VkMemoryType*)(forUnmarshaling->memoryTypes + i));
+        unmarshal_VkMemoryType(vkStream, rootType, (VkMemoryType*)(forUnmarshaling->memoryTypes + i));
     }
     vkStream->read((uint32_t*)&forUnmarshaling->memoryHeapCount, sizeof(uint32_t));
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
     {
-        unmarshal_VkMemoryHeap(vkStream, (VkMemoryHeap*)(forUnmarshaling->memoryHeaps + i));
+        unmarshal_VkMemoryHeap(vkStream, rootType, (VkMemoryHeap*)(forUnmarshaling->memoryHeaps + i));
     }
 }
 
 void marshal_VkPhysicalDeviceSparseProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkBool32*)&forMarshaling->residencyStandard2DBlockShape, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->residencyStandard2DMultisampleBlockShape, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->residencyStandard3DBlockShape, sizeof(VkBool32));
@@ -967,8 +1123,10 @@
 
 void unmarshal_VkPhysicalDeviceSparseProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSparseProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkBool32*)&forUnmarshaling->residencyStandard2DBlockShape, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->residencyStandard2DMultisampleBlockShape, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->residencyStandard3DBlockShape, sizeof(VkBool32));
@@ -978,8 +1136,10 @@
 
 void marshal_VkPhysicalDeviceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->apiVersion, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->driverVersion, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->vendorID, sizeof(uint32_t));
@@ -987,14 +1147,16 @@
     vkStream->write((VkPhysicalDeviceType*)&forMarshaling->deviceType, sizeof(VkPhysicalDeviceType));
     vkStream->write((char*)forMarshaling->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof(char));
     vkStream->write((uint8_t*)forMarshaling->pipelineCacheUUID, VK_UUID_SIZE * sizeof(uint8_t));
-    marshal_VkPhysicalDeviceLimits(vkStream, (VkPhysicalDeviceLimits*)(&forMarshaling->limits));
-    marshal_VkPhysicalDeviceSparseProperties(vkStream, (VkPhysicalDeviceSparseProperties*)(&forMarshaling->sparseProperties));
+    marshal_VkPhysicalDeviceLimits(vkStream, rootType, (VkPhysicalDeviceLimits*)(&forMarshaling->limits));
+    marshal_VkPhysicalDeviceSparseProperties(vkStream, rootType, (VkPhysicalDeviceSparseProperties*)(&forMarshaling->sparseProperties));
 }
 
 void unmarshal_VkPhysicalDeviceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->apiVersion, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->driverVersion, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->vendorID, sizeof(uint32_t));
@@ -1002,36 +1164,46 @@
     vkStream->read((VkPhysicalDeviceType*)&forUnmarshaling->deviceType, sizeof(VkPhysicalDeviceType));
     vkStream->read((char*)forUnmarshaling->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof(char));
     vkStream->read((uint8_t*)forUnmarshaling->pipelineCacheUUID, VK_UUID_SIZE * sizeof(uint8_t));
-    unmarshal_VkPhysicalDeviceLimits(vkStream, (VkPhysicalDeviceLimits*)(&forUnmarshaling->limits));
-    unmarshal_VkPhysicalDeviceSparseProperties(vkStream, (VkPhysicalDeviceSparseProperties*)(&forUnmarshaling->sparseProperties));
+    unmarshal_VkPhysicalDeviceLimits(vkStream, rootType, (VkPhysicalDeviceLimits*)(&forUnmarshaling->limits));
+    unmarshal_VkPhysicalDeviceSparseProperties(vkStream, rootType, (VkPhysicalDeviceSparseProperties*)(&forUnmarshaling->sparseProperties));
 }
 
 void marshal_VkQueueFamilyProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkQueueFlags*)&forMarshaling->queueFlags, sizeof(VkQueueFlags));
     vkStream->write((uint32_t*)&forMarshaling->queueCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->timestampValidBits, sizeof(uint32_t));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->minImageTransferGranularity));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->minImageTransferGranularity));
 }
 
 void unmarshal_VkQueueFamilyProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueueFamilyProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkQueueFlags*)&forUnmarshaling->queueFlags, sizeof(VkQueueFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->queueCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->timestampValidBits, sizeof(uint32_t));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->minImageTransferGranularity));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->minImageTransferGranularity));
 }
 
 void marshal_VkDeviceQueueCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceQueueCreateFlags*)&forMarshaling->flags, sizeof(VkDeviceQueueCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->queueCount, sizeof(uint32_t));
@@ -1040,10 +1212,16 @@
 
 void unmarshal_VkDeviceQueueCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceQueueCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceQueueCreateFlags*)&forUnmarshaling->flags, sizeof(VkDeviceQueueCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->queueFamilyIndex, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->queueCount, sizeof(uint32_t));
@@ -1052,17 +1230,23 @@
 
 void marshal_VkDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceCreateFlags*)&forMarshaling->flags, sizeof(VkDeviceCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->queueCreateInfoCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->queueCreateInfoCount; ++i)
         {
-            marshal_VkDeviceQueueCreateInfo(vkStream, (const VkDeviceQueueCreateInfo*)(forMarshaling->pQueueCreateInfos + i));
+            marshal_VkDeviceQueueCreateInfo(vkStream, rootType, (const VkDeviceQueueCreateInfo*)(forMarshaling->pQueueCreateInfos + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->enabledLayerCount, sizeof(uint32_t));
@@ -1074,23 +1258,29 @@
     vkStream->putBe64(cgen_var_0);
     if (forMarshaling->pEnabledFeatures)
     {
-        marshal_VkPhysicalDeviceFeatures(vkStream, (const VkPhysicalDeviceFeatures*)(forMarshaling->pEnabledFeatures));
+        marshal_VkPhysicalDeviceFeatures(vkStream, rootType, (const VkPhysicalDeviceFeatures*)(forMarshaling->pEnabledFeatures));
     }
 }
 
 void unmarshal_VkDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceCreateFlags*)&forUnmarshaling->flags, sizeof(VkDeviceCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->queueCreateInfoCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->queueCreateInfoCount; ++i)
         {
-            unmarshal_VkDeviceQueueCreateInfo(vkStream, (VkDeviceQueueCreateInfo*)(forUnmarshaling->pQueueCreateInfos + i));
+            unmarshal_VkDeviceQueueCreateInfo(vkStream, rootType, (VkDeviceQueueCreateInfo*)(forUnmarshaling->pQueueCreateInfos + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->enabledLayerCount, sizeof(uint32_t));
@@ -1106,30 +1296,36 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pEnabledFeatures inconsistent between guest and host\n");
         }
-        unmarshal_VkPhysicalDeviceFeatures(vkStream, (VkPhysicalDeviceFeatures*)(forUnmarshaling->pEnabledFeatures));
+        unmarshal_VkPhysicalDeviceFeatures(vkStream, rootType, (VkPhysicalDeviceFeatures*)(forUnmarshaling->pEnabledFeatures));
     }
 }
 
 void marshal_VkExtensionProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtensionProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((char*)forMarshaling->extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->write((uint32_t*)&forMarshaling->specVersion, sizeof(uint32_t));
 }
 
 void unmarshal_VkExtensionProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExtensionProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((char*)forUnmarshaling->extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->read((uint32_t*)&forUnmarshaling->specVersion, sizeof(uint32_t));
 }
 
 void marshal_VkLayerProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkLayerProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((char*)forMarshaling->layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->write((uint32_t*)&forMarshaling->specVersion, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->implementationVersion, sizeof(uint32_t));
@@ -1138,8 +1334,10 @@
 
 void unmarshal_VkLayerProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkLayerProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((char*)forUnmarshaling->layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->read((uint32_t*)&forUnmarshaling->specVersion, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->implementationVersion, sizeof(uint32_t));
@@ -1148,10 +1346,16 @@
 
 void marshal_VkSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubmitInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     if (forMarshaling->waitSemaphoreCount)
     {
@@ -1181,10 +1385,16 @@
 
 void unmarshal_VkSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubmitInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->waitSemaphoreCount, sizeof(uint32_t));
     if (forUnmarshaling->waitSemaphoreCount)
     {
@@ -1214,10 +1424,16 @@
 
 void marshal_VkMappedMemoryRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMappedMemoryRange* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&forMarshaling->memory, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -1227,10 +1443,16 @@
 
 void unmarshal_VkMappedMemoryRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMappedMemoryRange* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_0, (VkDeviceMemory*)&forUnmarshaling->memory, 1);
@@ -1240,28 +1462,42 @@
 
 void marshal_VkMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->allocationSize, sizeof(VkDeviceSize));
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->allocationSize, sizeof(VkDeviceSize));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeIndex, sizeof(uint32_t));
 }
 
 void marshal_VkMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->alignment, sizeof(VkDeviceSize));
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
@@ -1269,8 +1505,10 @@
 
 void unmarshal_VkMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryRequirements* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->alignment, sizeof(VkDeviceSize));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeBits, sizeof(uint32_t));
@@ -1278,8 +1516,10 @@
 
 void marshal_VkSparseMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseMemoryBind* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceSize*)&forMarshaling->resourceOffset, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     uint64_t cgen_var_0;
@@ -1291,8 +1531,10 @@
 
 void unmarshal_VkSparseMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseMemoryBind* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceSize*)&forUnmarshaling->resourceOffset, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
     uint64_t cgen_var_0;
@@ -1304,8 +1546,10 @@
 
 void marshal_VkSparseBufferMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -1314,15 +1558,17 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindCount; ++i)
         {
-            marshal_VkSparseMemoryBind(vkStream, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i));
+            marshal_VkSparseMemoryBind(vkStream, rootType, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i));
         }
     }
 }
 
 void unmarshal_VkSparseBufferMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseBufferMemoryBindInfo* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -1331,15 +1577,17 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->bindCount; ++i)
         {
-            unmarshal_VkSparseMemoryBind(vkStream, (VkSparseMemoryBind*)(forUnmarshaling->pBinds + i));
+            unmarshal_VkSparseMemoryBind(vkStream, rootType, (VkSparseMemoryBind*)(forUnmarshaling->pBinds + i));
         }
     }
 }
 
 void marshal_VkSparseImageOpaqueMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -1348,15 +1596,17 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindCount; ++i)
         {
-            marshal_VkSparseMemoryBind(vkStream, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i));
+            marshal_VkSparseMemoryBind(vkStream, rootType, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i));
         }
     }
 }
 
 void unmarshal_VkSparseImageOpaqueMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageOpaqueMemoryBindInfo* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -1365,15 +1615,17 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->bindCount; ++i)
         {
-            unmarshal_VkSparseMemoryBind(vkStream, (VkSparseMemoryBind*)(forUnmarshaling->pBinds + i));
+            unmarshal_VkSparseMemoryBind(vkStream, rootType, (VkSparseMemoryBind*)(forUnmarshaling->pBinds + i));
         }
     }
 }
 
 void marshal_VkImageSubresource(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresource* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->write((uint32_t*)&forMarshaling->mipLevel, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->arrayLayer, sizeof(uint32_t));
@@ -1381,8 +1633,10 @@
 
 void unmarshal_VkImageSubresource(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSubresource* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->mipLevel, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->arrayLayer, sizeof(uint32_t));
@@ -1390,11 +1644,13 @@
 
 void marshal_VkSparseImageMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* forMarshaling)
 {
-    marshal_VkImageSubresource(vkStream, (VkImageSubresource*)(&forMarshaling->subresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->offset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent));
+    (void)rootType;
+    marshal_VkImageSubresource(vkStream, rootType, (VkImageSubresource*)(&forMarshaling->subresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->offset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&forMarshaling->memory, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -1404,11 +1660,13 @@
 
 void unmarshal_VkSparseImageMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryBind* forUnmarshaling)
 {
-    unmarshal_VkImageSubresource(vkStream, (VkImageSubresource*)(&forUnmarshaling->subresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->offset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->extent));
+    (void)rootType;
+    unmarshal_VkImageSubresource(vkStream, rootType, (VkImageSubresource*)(&forUnmarshaling->subresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->offset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->extent));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_0, (VkDeviceMemory*)&forUnmarshaling->memory, 1);
@@ -1418,8 +1676,10 @@
 
 void marshal_VkSparseImageMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -1428,15 +1688,17 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindCount; ++i)
         {
-            marshal_VkSparseImageMemoryBind(vkStream, (const VkSparseImageMemoryBind*)(forMarshaling->pBinds + i));
+            marshal_VkSparseImageMemoryBind(vkStream, rootType, (const VkSparseImageMemoryBind*)(forMarshaling->pBinds + i));
         }
     }
 }
 
 void unmarshal_VkSparseImageMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryBindInfo* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -1445,17 +1707,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->bindCount; ++i)
         {
-            unmarshal_VkSparseImageMemoryBind(vkStream, (VkSparseImageMemoryBind*)(forUnmarshaling->pBinds + i));
+            unmarshal_VkSparseImageMemoryBind(vkStream, rootType, (VkSparseImageMemoryBind*)(forUnmarshaling->pBinds + i));
         }
     }
 }
 
 void marshal_VkBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindSparseInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     if (forMarshaling->waitSemaphoreCount)
     {
@@ -1469,7 +1737,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->bufferBindCount; ++i)
         {
-            marshal_VkSparseBufferMemoryBindInfo(vkStream, (const VkSparseBufferMemoryBindInfo*)(forMarshaling->pBufferBinds + i));
+            marshal_VkSparseBufferMemoryBindInfo(vkStream, rootType, (const VkSparseBufferMemoryBindInfo*)(forMarshaling->pBufferBinds + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->imageOpaqueBindCount, sizeof(uint32_t));
@@ -1477,7 +1745,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->imageOpaqueBindCount; ++i)
         {
-            marshal_VkSparseImageOpaqueMemoryBindInfo(vkStream, (const VkSparseImageOpaqueMemoryBindInfo*)(forMarshaling->pImageOpaqueBinds + i));
+            marshal_VkSparseImageOpaqueMemoryBindInfo(vkStream, rootType, (const VkSparseImageOpaqueMemoryBindInfo*)(forMarshaling->pImageOpaqueBinds + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->imageBindCount, sizeof(uint32_t));
@@ -1485,7 +1753,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->imageBindCount; ++i)
         {
-            marshal_VkSparseImageMemoryBindInfo(vkStream, (const VkSparseImageMemoryBindInfo*)(forMarshaling->pImageBinds + i));
+            marshal_VkSparseImageMemoryBindInfo(vkStream, rootType, (const VkSparseImageMemoryBindInfo*)(forMarshaling->pImageBinds + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->signalSemaphoreCount, sizeof(uint32_t));
@@ -1500,10 +1768,16 @@
 
 void unmarshal_VkBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindSparseInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->waitSemaphoreCount, sizeof(uint32_t));
     if (forUnmarshaling->waitSemaphoreCount)
     {
@@ -1517,7 +1791,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->bufferBindCount; ++i)
         {
-            unmarshal_VkSparseBufferMemoryBindInfo(vkStream, (VkSparseBufferMemoryBindInfo*)(forUnmarshaling->pBufferBinds + i));
+            unmarshal_VkSparseBufferMemoryBindInfo(vkStream, rootType, (VkSparseBufferMemoryBindInfo*)(forUnmarshaling->pBufferBinds + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->imageOpaqueBindCount, sizeof(uint32_t));
@@ -1525,7 +1799,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->imageOpaqueBindCount; ++i)
         {
-            unmarshal_VkSparseImageOpaqueMemoryBindInfo(vkStream, (VkSparseImageOpaqueMemoryBindInfo*)(forUnmarshaling->pImageOpaqueBinds + i));
+            unmarshal_VkSparseImageOpaqueMemoryBindInfo(vkStream, rootType, (VkSparseImageOpaqueMemoryBindInfo*)(forUnmarshaling->pImageOpaqueBinds + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->imageBindCount, sizeof(uint32_t));
@@ -1533,7 +1807,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->imageBindCount; ++i)
         {
-            unmarshal_VkSparseImageMemoryBindInfo(vkStream, (VkSparseImageMemoryBindInfo*)(forUnmarshaling->pImageBinds + i));
+            unmarshal_VkSparseImageMemoryBindInfo(vkStream, rootType, (VkSparseImageMemoryBindInfo*)(forUnmarshaling->pImageBinds + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->signalSemaphoreCount, sizeof(uint32_t));
@@ -1548,27 +1822,33 @@
 
 void marshal_VkSparseImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->imageGranularity));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageGranularity));
     vkStream->write((VkSparseImageFormatFlags*)&forMarshaling->flags, sizeof(VkSparseImageFormatFlags));
 }
 
 void unmarshal_VkSparseImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageFormatProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->imageGranularity));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageGranularity));
     vkStream->read((VkSparseImageFormatFlags*)&forUnmarshaling->flags, sizeof(VkSparseImageFormatFlags));
 }
 
 void marshal_VkSparseImageMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* forMarshaling)
 {
-    marshal_VkSparseImageFormatProperties(vkStream, (VkSparseImageFormatProperties*)(&forMarshaling->formatProperties));
+    (void)rootType;
+    marshal_VkSparseImageFormatProperties(vkStream, rootType, (VkSparseImageFormatProperties*)(&forMarshaling->formatProperties));
     vkStream->write((uint32_t*)&forMarshaling->imageMipTailFirstLod, sizeof(uint32_t));
     vkStream->write((VkDeviceSize*)&forMarshaling->imageMipTailSize, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->imageMipTailOffset, sizeof(VkDeviceSize));
@@ -1577,9 +1857,11 @@
 
 void unmarshal_VkSparseImageMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryRequirements* forUnmarshaling)
 {
-    unmarshal_VkSparseImageFormatProperties(vkStream, (VkSparseImageFormatProperties*)(&forUnmarshaling->formatProperties));
+    (void)rootType;
+    unmarshal_VkSparseImageFormatProperties(vkStream, rootType, (VkSparseImageFormatProperties*)(&forUnmarshaling->formatProperties));
     vkStream->read((uint32_t*)&forUnmarshaling->imageMipTailFirstLod, sizeof(uint32_t));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->imageMipTailSize, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->imageMipTailOffset, sizeof(VkDeviceSize));
@@ -1588,64 +1870,106 @@
 
 void marshal_VkFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFenceCreateFlags*)&forMarshaling->flags, sizeof(VkFenceCreateFlags));
 }
 
 void unmarshal_VkFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFenceCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFenceCreateFlags*)&forUnmarshaling->flags, sizeof(VkFenceCreateFlags));
 }
 
 void marshal_VkSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSemaphoreCreateFlags*)&forMarshaling->flags, sizeof(VkSemaphoreCreateFlags));
 }
 
 void unmarshal_VkSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSemaphoreCreateFlags*)&forUnmarshaling->flags, sizeof(VkSemaphoreCreateFlags));
 }
 
 void marshal_VkEventCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkEventCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkEventCreateFlags*)&forMarshaling->flags, sizeof(VkEventCreateFlags));
 }
 
 void unmarshal_VkEventCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkEventCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkEventCreateFlags*)&forUnmarshaling->flags, sizeof(VkEventCreateFlags));
 }
 
 void marshal_VkQueryPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkQueryPoolCreateFlags*)&forMarshaling->flags, sizeof(VkQueryPoolCreateFlags));
     vkStream->write((VkQueryType*)&forMarshaling->queryType, sizeof(VkQueryType));
     vkStream->write((uint32_t*)&forMarshaling->queryCount, sizeof(uint32_t));
@@ -1654,10 +1978,16 @@
 
 void unmarshal_VkQueryPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueryPoolCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkQueryPoolCreateFlags*)&forUnmarshaling->flags, sizeof(VkQueryPoolCreateFlags));
     vkStream->read((VkQueryType*)&forUnmarshaling->queryType, sizeof(VkQueryType));
     vkStream->read((uint32_t*)&forUnmarshaling->queryCount, sizeof(uint32_t));
@@ -1666,10 +1996,16 @@
 
 void marshal_VkBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBufferCreateFlags*)&forMarshaling->flags, sizeof(VkBufferCreateFlags));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     vkStream->write((VkBufferUsageFlags*)&forMarshaling->usage, sizeof(VkBufferUsageFlags));
@@ -1686,10 +2022,16 @@
 
 void unmarshal_VkBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBufferCreateFlags*)&forUnmarshaling->flags, sizeof(VkBufferCreateFlags));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
     vkStream->read((VkBufferUsageFlags*)&forUnmarshaling->usage, sizeof(VkBufferUsageFlags));
@@ -1710,10 +2052,16 @@
 
 void marshal_VkBufferViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBufferViewCreateFlags*)&forMarshaling->flags, sizeof(VkBufferViewCreateFlags));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
@@ -1725,10 +2073,16 @@
 
 void unmarshal_VkBufferViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferViewCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBufferViewCreateFlags*)&forUnmarshaling->flags, sizeof(VkBufferViewCreateFlags));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -1740,14 +2094,20 @@
 
 void marshal_VkImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageCreateFlags*)&forMarshaling->flags, sizeof(VkImageCreateFlags));
     vkStream->write((VkImageType*)&forMarshaling->imageType, sizeof(VkImageType));
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent));
     vkStream->write((uint32_t*)&forMarshaling->mipLevels, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->arrayLayers, sizeof(uint32_t));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -1767,14 +2127,20 @@
 
 void unmarshal_VkImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageCreateFlags*)&forUnmarshaling->flags, sizeof(VkImageCreateFlags));
     vkStream->read((VkImageType*)&forUnmarshaling->imageType, sizeof(VkImageType));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->extent));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->extent));
     vkStream->read((uint32_t*)&forUnmarshaling->mipLevels, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->arrayLayers, sizeof(uint32_t));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -1798,8 +2164,10 @@
 
 void marshal_VkSubresourceLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubresourceLayout* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceSize*)&forMarshaling->offset, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->rowPitch, sizeof(VkDeviceSize));
@@ -1809,8 +2177,10 @@
 
 void unmarshal_VkSubresourceLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubresourceLayout* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceSize*)&forUnmarshaling->offset, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->rowPitch, sizeof(VkDeviceSize));
@@ -1820,8 +2190,10 @@
 
 void marshal_VkComponentMapping(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComponentMapping* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkComponentSwizzle*)&forMarshaling->r, sizeof(VkComponentSwizzle));
     vkStream->write((VkComponentSwizzle*)&forMarshaling->g, sizeof(VkComponentSwizzle));
     vkStream->write((VkComponentSwizzle*)&forMarshaling->b, sizeof(VkComponentSwizzle));
@@ -1830,8 +2202,10 @@
 
 void unmarshal_VkComponentMapping(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkComponentMapping* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkComponentSwizzle*)&forUnmarshaling->r, sizeof(VkComponentSwizzle));
     vkStream->read((VkComponentSwizzle*)&forUnmarshaling->g, sizeof(VkComponentSwizzle));
     vkStream->read((VkComponentSwizzle*)&forUnmarshaling->b, sizeof(VkComponentSwizzle));
@@ -1840,42 +2214,60 @@
 
 void marshal_VkImageViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageViewCreateFlags*)&forMarshaling->flags, sizeof(VkImageViewCreateFlags));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->write((VkImageViewType*)&forMarshaling->viewType, sizeof(VkImageViewType));
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
-    marshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forMarshaling->components));
-    marshal_VkImageSubresourceRange(vkStream, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange));
+    marshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forMarshaling->components));
+    marshal_VkImageSubresourceRange(vkStream, rootType, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange));
 }
 
 void unmarshal_VkImageViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageViewCreateFlags*)&forUnmarshaling->flags, sizeof(VkImageViewCreateFlags));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
     vkStream->read((VkImageViewType*)&forUnmarshaling->viewType, sizeof(VkImageViewType));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
-    unmarshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forUnmarshaling->components));
-    unmarshal_VkImageSubresourceRange(vkStream, (VkImageSubresourceRange*)(&forUnmarshaling->subresourceRange));
+    unmarshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forUnmarshaling->components));
+    unmarshal_VkImageSubresourceRange(vkStream, rootType, (VkImageSubresourceRange*)(&forUnmarshaling->subresourceRange));
 }
 
 void marshal_VkShaderModuleCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkShaderModuleCreateFlags*)&forMarshaling->flags, sizeof(VkShaderModuleCreateFlags));
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->codeSize;
     vkStream->putBe64(cgen_var_0);
@@ -1884,10 +2276,16 @@
 
 void unmarshal_VkShaderModuleCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderModuleCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkShaderModuleCreateFlags*)&forUnmarshaling->flags, sizeof(VkShaderModuleCreateFlags));
     forUnmarshaling->codeSize = (size_t)vkStream->getBe64();
     vkStream->read((uint32_t*)forUnmarshaling->pCode, (forUnmarshaling->codeSize / 4) * sizeof(const uint32_t));
@@ -1895,10 +2293,16 @@
 
 void marshal_VkPipelineCacheCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCacheCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCacheCreateFlags));
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->initialDataSize;
     vkStream->putBe64(cgen_var_0);
@@ -1907,10 +2311,16 @@
 
 void unmarshal_VkPipelineCacheCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCacheCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCacheCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineCacheCreateFlags));
     forUnmarshaling->initialDataSize = (size_t)vkStream->getBe64();
     vkStream->read((void*)forUnmarshaling->pInitialData, forUnmarshaling->initialDataSize * sizeof(const uint8_t));
@@ -1918,8 +2328,10 @@
 
 void marshal_VkSpecializationMapEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->constantID, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->offset, sizeof(uint32_t));
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->size;
@@ -1928,8 +2340,10 @@
 
 void unmarshal_VkSpecializationMapEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSpecializationMapEntry* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->constantID, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->offset, sizeof(uint32_t));
     forUnmarshaling->size = (size_t)vkStream->getBe64();
@@ -1937,14 +2351,16 @@
 
 void marshal_VkSpecializationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->mapEntryCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->mapEntryCount; ++i)
         {
-            marshal_VkSpecializationMapEntry(vkStream, (const VkSpecializationMapEntry*)(forMarshaling->pMapEntries + i));
+            marshal_VkSpecializationMapEntry(vkStream, rootType, (const VkSpecializationMapEntry*)(forMarshaling->pMapEntries + i));
         }
     }
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->dataSize;
@@ -1954,14 +2370,16 @@
 
 void unmarshal_VkSpecializationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSpecializationInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->mapEntryCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->mapEntryCount; ++i)
         {
-            unmarshal_VkSpecializationMapEntry(vkStream, (VkSpecializationMapEntry*)(forUnmarshaling->pMapEntries + i));
+            unmarshal_VkSpecializationMapEntry(vkStream, rootType, (VkSpecializationMapEntry*)(forUnmarshaling->pMapEntries + i));
         }
     }
     forUnmarshaling->dataSize = (size_t)vkStream->getBe64();
@@ -1970,10 +2388,16 @@
 
 void marshal_VkPipelineShaderStageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineShaderStageCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineShaderStageCreateFlags));
     vkStream->write((VkShaderStageFlagBits*)&forMarshaling->stage, sizeof(VkShaderStageFlagBits));
     uint64_t cgen_var_0;
@@ -1985,16 +2409,22 @@
     vkStream->putBe64(cgen_var_1);
     if (forMarshaling->pSpecializationInfo)
     {
-        marshal_VkSpecializationInfo(vkStream, (const VkSpecializationInfo*)(forMarshaling->pSpecializationInfo));
+        marshal_VkSpecializationInfo(vkStream, rootType, (const VkSpecializationInfo*)(forMarshaling->pSpecializationInfo));
     }
 }
 
 void unmarshal_VkPipelineShaderStageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineShaderStageCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineShaderStageCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineShaderStageCreateFlags));
     vkStream->read((VkShaderStageFlagBits*)&forUnmarshaling->stage, sizeof(VkShaderStageFlagBits));
     uint64_t cgen_var_0;
@@ -2010,18 +2440,24 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pSpecializationInfo inconsistent between guest and host\n");
         }
-        unmarshal_VkSpecializationInfo(vkStream, (VkSpecializationInfo*)(forUnmarshaling->pSpecializationInfo));
+        unmarshal_VkSpecializationInfo(vkStream, rootType, (VkSpecializationInfo*)(forUnmarshaling->pSpecializationInfo));
     }
 }
 
 void marshal_VkComputePipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
-    marshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(&forMarshaling->stage));
+    marshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(&forMarshaling->stage));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&forMarshaling->layout, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -2033,12 +2469,18 @@
 
 void unmarshal_VkComputePipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkComputePipelineCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineCreateFlags));
-    unmarshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(&forUnmarshaling->stage));
+    unmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(&forUnmarshaling->stage));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkPipelineLayout(&cgen_var_0, (VkPipelineLayout*)&forUnmarshaling->layout, 1);
@@ -2050,8 +2492,10 @@
 
 void marshal_VkVertexInputBindingDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->stride, sizeof(uint32_t));
     vkStream->write((VkVertexInputRate*)&forMarshaling->inputRate, sizeof(VkVertexInputRate));
@@ -2059,8 +2503,10 @@
 
 void unmarshal_VkVertexInputBindingDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkVertexInputBindingDescription* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->binding, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->stride, sizeof(uint32_t));
     vkStream->read((VkVertexInputRate*)&forUnmarshaling->inputRate, sizeof(VkVertexInputRate));
@@ -2068,8 +2514,10 @@
 
 void marshal_VkVertexInputAttributeDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->location, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
@@ -2078,8 +2526,10 @@
 
 void unmarshal_VkVertexInputAttributeDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkVertexInputAttributeDescription* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->location, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->binding, sizeof(uint32_t));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
@@ -2088,17 +2538,23 @@
 
 void marshal_VkPipelineVertexInputStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineVertexInputStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineVertexInputStateCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->vertexBindingDescriptionCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->vertexBindingDescriptionCount; ++i)
         {
-            marshal_VkVertexInputBindingDescription(vkStream, (const VkVertexInputBindingDescription*)(forMarshaling->pVertexBindingDescriptions + i));
+            marshal_VkVertexInputBindingDescription(vkStream, rootType, (const VkVertexInputBindingDescription*)(forMarshaling->pVertexBindingDescriptions + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->vertexAttributeDescriptionCount, sizeof(uint32_t));
@@ -2106,24 +2562,30 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->vertexAttributeDescriptionCount; ++i)
         {
-            marshal_VkVertexInputAttributeDescription(vkStream, (const VkVertexInputAttributeDescription*)(forMarshaling->pVertexAttributeDescriptions + i));
+            marshal_VkVertexInputAttributeDescription(vkStream, rootType, (const VkVertexInputAttributeDescription*)(forMarshaling->pVertexAttributeDescriptions + i));
         }
     }
 }
 
 void unmarshal_VkPipelineVertexInputStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineVertexInputStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineVertexInputStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineVertexInputStateCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->vertexBindingDescriptionCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->vertexBindingDescriptionCount; ++i)
         {
-            unmarshal_VkVertexInputBindingDescription(vkStream, (VkVertexInputBindingDescription*)(forUnmarshaling->pVertexBindingDescriptions + i));
+            unmarshal_VkVertexInputBindingDescription(vkStream, rootType, (VkVertexInputBindingDescription*)(forUnmarshaling->pVertexBindingDescriptions + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->vertexAttributeDescriptionCount, sizeof(uint32_t));
@@ -2131,17 +2593,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->vertexAttributeDescriptionCount; ++i)
         {
-            unmarshal_VkVertexInputAttributeDescription(vkStream, (VkVertexInputAttributeDescription*)(forUnmarshaling->pVertexAttributeDescriptions + i));
+            unmarshal_VkVertexInputAttributeDescription(vkStream, rootType, (VkVertexInputAttributeDescription*)(forUnmarshaling->pVertexAttributeDescriptions + i));
         }
     }
 }
 
 void marshal_VkPipelineInputAssemblyStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineInputAssemblyStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineInputAssemblyStateCreateFlags));
     vkStream->write((VkPrimitiveTopology*)&forMarshaling->topology, sizeof(VkPrimitiveTopology));
     vkStream->write((VkBool32*)&forMarshaling->primitiveRestartEnable, sizeof(VkBool32));
@@ -2149,10 +2617,16 @@
 
 void unmarshal_VkPipelineInputAssemblyStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineInputAssemblyStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineInputAssemblyStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineInputAssemblyStateCreateFlags));
     vkStream->read((VkPrimitiveTopology*)&forUnmarshaling->topology, sizeof(VkPrimitiveTopology));
     vkStream->read((VkBool32*)&forUnmarshaling->primitiveRestartEnable, sizeof(VkBool32));
@@ -2160,28 +2634,42 @@
 
 void marshal_VkPipelineTessellationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineTessellationStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineTessellationStateCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->patchControlPoints, sizeof(uint32_t));
 }
 
 void unmarshal_VkPipelineTessellationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineTessellationStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineTessellationStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineTessellationStateCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->patchControlPoints, sizeof(uint32_t));
 }
 
 void marshal_VkViewport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewport* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)&forMarshaling->x, sizeof(float));
     vkStream->write((float*)&forMarshaling->y, sizeof(float));
     vkStream->write((float*)&forMarshaling->width, sizeof(float));
@@ -2192,8 +2680,10 @@
 
 void unmarshal_VkViewport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViewport* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)&forUnmarshaling->x, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->y, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->width, sizeof(float));
@@ -2204,10 +2694,16 @@
 
 void marshal_VkPipelineViewportStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineViewportStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineViewportStateCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -2219,7 +2715,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
             {
-                marshal_VkViewport(vkStream, (const VkViewport*)(forMarshaling->pViewports + i));
+                marshal_VkViewport(vkStream, rootType, (const VkViewport*)(forMarshaling->pViewports + i));
             }
         }
     }
@@ -2233,7 +2729,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->scissorCount; ++i)
             {
-                marshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pScissors + i));
+                marshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pScissors + i));
             }
         }
     }
@@ -2241,10 +2737,16 @@
 
 void unmarshal_VkPipelineViewportStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineViewportStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineViewportStateCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -2260,7 +2762,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->viewportCount; ++i)
             {
-                unmarshal_VkViewport(vkStream, (VkViewport*)(forUnmarshaling->pViewports + i));
+                unmarshal_VkViewport(vkStream, rootType, (VkViewport*)(forUnmarshaling->pViewports + i));
             }
         }
     }
@@ -2278,7 +2780,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->scissorCount; ++i)
             {
-                unmarshal_VkRect2D(vkStream, (VkRect2D*)(forUnmarshaling->pScissors + i));
+                unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(forUnmarshaling->pScissors + i));
             }
         }
     }
@@ -2286,10 +2788,16 @@
 
 void marshal_VkPipelineRasterizationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineRasterizationStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineRasterizationStateCreateFlags));
     vkStream->write((VkBool32*)&forMarshaling->depthClampEnable, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->rasterizerDiscardEnable, sizeof(VkBool32));
@@ -2305,10 +2813,16 @@
 
 void unmarshal_VkPipelineRasterizationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineRasterizationStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineRasterizationStateCreateFlags));
     vkStream->read((VkBool32*)&forUnmarshaling->depthClampEnable, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->rasterizerDiscardEnable, sizeof(VkBool32));
@@ -2324,10 +2838,16 @@
 
 void marshal_VkPipelineMultisampleStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineMultisampleStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineMultisampleStateCreateFlags));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->rasterizationSamples, sizeof(VkSampleCountFlagBits));
     vkStream->write((VkBool32*)&forMarshaling->sampleShadingEnable, sizeof(VkBool32));
@@ -2345,10 +2865,16 @@
 
 void unmarshal_VkPipelineMultisampleStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineMultisampleStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineMultisampleStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineMultisampleStateCreateFlags));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->rasterizationSamples, sizeof(VkSampleCountFlagBits));
     vkStream->read((VkBool32*)&forUnmarshaling->sampleShadingEnable, sizeof(VkBool32));
@@ -2370,8 +2896,10 @@
 
 void marshal_VkStencilOpState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStencilOpState* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStencilOp*)&forMarshaling->failOp, sizeof(VkStencilOp));
     vkStream->write((VkStencilOp*)&forMarshaling->passOp, sizeof(VkStencilOp));
     vkStream->write((VkStencilOp*)&forMarshaling->depthFailOp, sizeof(VkStencilOp));
@@ -2383,8 +2911,10 @@
 
 void unmarshal_VkStencilOpState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkStencilOpState* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStencilOp*)&forUnmarshaling->failOp, sizeof(VkStencilOp));
     vkStream->read((VkStencilOp*)&forUnmarshaling->passOp, sizeof(VkStencilOp));
     vkStream->read((VkStencilOp*)&forUnmarshaling->depthFailOp, sizeof(VkStencilOp));
@@ -2396,44 +2926,58 @@
 
 void marshal_VkPipelineDepthStencilStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineDepthStencilStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineDepthStencilStateCreateFlags));
     vkStream->write((VkBool32*)&forMarshaling->depthTestEnable, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->depthWriteEnable, sizeof(VkBool32));
     vkStream->write((VkCompareOp*)&forMarshaling->depthCompareOp, sizeof(VkCompareOp));
     vkStream->write((VkBool32*)&forMarshaling->depthBoundsTestEnable, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->stencilTestEnable, sizeof(VkBool32));
-    marshal_VkStencilOpState(vkStream, (VkStencilOpState*)(&forMarshaling->front));
-    marshal_VkStencilOpState(vkStream, (VkStencilOpState*)(&forMarshaling->back));
+    marshal_VkStencilOpState(vkStream, rootType, (VkStencilOpState*)(&forMarshaling->front));
+    marshal_VkStencilOpState(vkStream, rootType, (VkStencilOpState*)(&forMarshaling->back));
     vkStream->write((float*)&forMarshaling->minDepthBounds, sizeof(float));
     vkStream->write((float*)&forMarshaling->maxDepthBounds, sizeof(float));
 }
 
 void unmarshal_VkPipelineDepthStencilStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineDepthStencilStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineDepthStencilStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineDepthStencilStateCreateFlags));
     vkStream->read((VkBool32*)&forUnmarshaling->depthTestEnable, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->depthWriteEnable, sizeof(VkBool32));
     vkStream->read((VkCompareOp*)&forUnmarshaling->depthCompareOp, sizeof(VkCompareOp));
     vkStream->read((VkBool32*)&forUnmarshaling->depthBoundsTestEnable, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->stencilTestEnable, sizeof(VkBool32));
-    unmarshal_VkStencilOpState(vkStream, (VkStencilOpState*)(&forUnmarshaling->front));
-    unmarshal_VkStencilOpState(vkStream, (VkStencilOpState*)(&forUnmarshaling->back));
+    unmarshal_VkStencilOpState(vkStream, rootType, (VkStencilOpState*)(&forUnmarshaling->front));
+    unmarshal_VkStencilOpState(vkStream, rootType, (VkStencilOpState*)(&forUnmarshaling->back));
     vkStream->read((float*)&forUnmarshaling->minDepthBounds, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->maxDepthBounds, sizeof(float));
 }
 
 void marshal_VkPipelineColorBlendAttachmentState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkBool32*)&forMarshaling->blendEnable, sizeof(VkBool32));
     vkStream->write((VkBlendFactor*)&forMarshaling->srcColorBlendFactor, sizeof(VkBlendFactor));
     vkStream->write((VkBlendFactor*)&forMarshaling->dstColorBlendFactor, sizeof(VkBlendFactor));
@@ -2446,8 +2990,10 @@
 
 void unmarshal_VkPipelineColorBlendAttachmentState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineColorBlendAttachmentState* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkBool32*)&forUnmarshaling->blendEnable, sizeof(VkBool32));
     vkStream->read((VkBlendFactor*)&forUnmarshaling->srcColorBlendFactor, sizeof(VkBlendFactor));
     vkStream->read((VkBlendFactor*)&forUnmarshaling->dstColorBlendFactor, sizeof(VkBlendFactor));
@@ -2460,10 +3006,16 @@
 
 void marshal_VkPipelineColorBlendStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineColorBlendStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineColorBlendStateCreateFlags));
     vkStream->write((VkBool32*)&forMarshaling->logicOpEnable, sizeof(VkBool32));
     vkStream->write((VkLogicOp*)&forMarshaling->logicOp, sizeof(VkLogicOp));
@@ -2472,7 +3024,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentCount; ++i)
         {
-            marshal_VkPipelineColorBlendAttachmentState(vkStream, (const VkPipelineColorBlendAttachmentState*)(forMarshaling->pAttachments + i));
+            marshal_VkPipelineColorBlendAttachmentState(vkStream, rootType, (const VkPipelineColorBlendAttachmentState*)(forMarshaling->pAttachments + i));
         }
     }
     vkStream->write((float*)forMarshaling->blendConstants, 4 * sizeof(float));
@@ -2480,10 +3032,16 @@
 
 void unmarshal_VkPipelineColorBlendStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineColorBlendStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineColorBlendStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineColorBlendStateCreateFlags));
     vkStream->read((VkBool32*)&forUnmarshaling->logicOpEnable, sizeof(VkBool32));
     vkStream->read((VkLogicOp*)&forUnmarshaling->logicOp, sizeof(VkLogicOp));
@@ -2492,7 +3050,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->attachmentCount; ++i)
         {
-            unmarshal_VkPipelineColorBlendAttachmentState(vkStream, (VkPipelineColorBlendAttachmentState*)(forUnmarshaling->pAttachments + i));
+            unmarshal_VkPipelineColorBlendAttachmentState(vkStream, rootType, (VkPipelineColorBlendAttachmentState*)(forUnmarshaling->pAttachments + i));
         }
     }
     vkStream->read((float*)forUnmarshaling->blendConstants, 4 * sizeof(float));
@@ -2500,10 +3058,16 @@
 
 void marshal_VkPipelineDynamicStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineDynamicStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineDynamicStateCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->dynamicStateCount, sizeof(uint32_t));
     vkStream->write((const VkDynamicState*)forMarshaling->pDynamicStates, forMarshaling->dynamicStateCount * sizeof(const VkDynamicState));
@@ -2511,10 +3075,16 @@
 
 void unmarshal_VkPipelineDynamicStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineDynamicStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineDynamicStateCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineDynamicStateCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->dynamicStateCount, sizeof(uint32_t));
     vkStream->read((VkDynamicState*)forUnmarshaling->pDynamicStates, forUnmarshaling->dynamicStateCount * sizeof(const VkDynamicState));
@@ -2522,8 +3092,10 @@
 
 void marshal_VkGraphicsPipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* forMarshaling)
 {
+    (void)rootType;
     uint32_t hasRasterization = 1;
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
     {
@@ -2539,14 +3111,18 @@
         vkStream->putBe32(cgen_var_0);
     }
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
         {
-            marshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
+            marshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
         }
     }
     // WARNING PTR CHECK
@@ -2557,7 +3133,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forMarshaling->pVertexInputState))
     {
-        marshal_VkPipelineVertexInputStateCreateInfo(vkStream, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState));
+        marshal_VkPipelineVertexInputStateCreateInfo(vkStream, rootType, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState));
     }
     // WARNING PTR CHECK
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
@@ -2567,7 +3143,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forMarshaling->pInputAssemblyState))
     {
-        marshal_VkPipelineInputAssemblyStateCreateInfo(vkStream, (const VkPipelineInputAssemblyStateCreateInfo*)(forMarshaling->pInputAssemblyState));
+        marshal_VkPipelineInputAssemblyStateCreateInfo(vkStream, rootType, (const VkPipelineInputAssemblyStateCreateInfo*)(forMarshaling->pInputAssemblyState));
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pTessellationState;
@@ -2576,7 +3152,7 @@
     {
         if (hasTessellation)
         {
-            marshal_VkPipelineTessellationStateCreateInfo(vkStream, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState));
+            marshal_VkPipelineTessellationStateCreateInfo(vkStream, rootType, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState));
         }
     }
     // WARNING PTR CHECK
@@ -2586,7 +3162,7 @@
     {
         if (hasRasterization)
         {
-            marshal_VkPipelineViewportStateCreateInfo(vkStream, (const VkPipelineViewportStateCreateInfo*)(forMarshaling->pViewportState));
+            marshal_VkPipelineViewportStateCreateInfo(vkStream, rootType, (const VkPipelineViewportStateCreateInfo*)(forMarshaling->pViewportState));
         }
     }
     // WARNING PTR CHECK
@@ -2597,7 +3173,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forMarshaling->pRasterizationState))
     {
-        marshal_VkPipelineRasterizationStateCreateInfo(vkStream, (const VkPipelineRasterizationStateCreateInfo*)(forMarshaling->pRasterizationState));
+        marshal_VkPipelineRasterizationStateCreateInfo(vkStream, rootType, (const VkPipelineRasterizationStateCreateInfo*)(forMarshaling->pRasterizationState));
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)forMarshaling->pMultisampleState;
@@ -2606,7 +3182,7 @@
     {
         if (hasRasterization)
         {
-            marshal_VkPipelineMultisampleStateCreateInfo(vkStream, (const VkPipelineMultisampleStateCreateInfo*)(forMarshaling->pMultisampleState));
+            marshal_VkPipelineMultisampleStateCreateInfo(vkStream, rootType, (const VkPipelineMultisampleStateCreateInfo*)(forMarshaling->pMultisampleState));
         }
     }
     // WARNING PTR CHECK
@@ -2616,7 +3192,7 @@
     {
         if (hasRasterization)
         {
-            marshal_VkPipelineDepthStencilStateCreateInfo(vkStream, (const VkPipelineDepthStencilStateCreateInfo*)(forMarshaling->pDepthStencilState));
+            marshal_VkPipelineDepthStencilStateCreateInfo(vkStream, rootType, (const VkPipelineDepthStencilStateCreateInfo*)(forMarshaling->pDepthStencilState));
         }
     }
     // WARNING PTR CHECK
@@ -2626,7 +3202,7 @@
     {
         if (hasRasterization)
         {
-            marshal_VkPipelineColorBlendStateCreateInfo(vkStream, (const VkPipelineColorBlendStateCreateInfo*)(forMarshaling->pColorBlendState));
+            marshal_VkPipelineColorBlendStateCreateInfo(vkStream, rootType, (const VkPipelineColorBlendStateCreateInfo*)(forMarshaling->pColorBlendState));
         }
     }
     // WARNING PTR CHECK
@@ -2634,7 +3210,7 @@
     vkStream->putBe64(cgen_var_5);
     if (forMarshaling->pDynamicState)
     {
-        marshal_VkPipelineDynamicStateCreateInfo(vkStream, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState));
+        marshal_VkPipelineDynamicStateCreateInfo(vkStream, rootType, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState));
     }
     uint64_t cgen_var_6;
     vkStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&forMarshaling->layout, &cgen_var_6, 1);
@@ -2651,8 +3227,10 @@
 
 void unmarshal_VkGraphicsPipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGraphicsPipelineCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     uint32_t hasRasterization = 1;
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
     {
@@ -2664,14 +3242,18 @@
         hasTessellation = (const uint32_t)vkStream->getBe32();
     }
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->stageCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->stageCount; ++i)
         {
-            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
+            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
         }
     }
     // WARNING PTR CHECK
@@ -2682,7 +3264,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forUnmarshaling->pVertexInputState))
     {
-        unmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, (VkPipelineVertexInputStateCreateInfo*)(forUnmarshaling->pVertexInputState));
+        unmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, rootType, (VkPipelineVertexInputStateCreateInfo*)(forUnmarshaling->pVertexInputState));
     }
     // WARNING PTR CHECK
     const VkPipelineInputAssemblyStateCreateInfo* check_pInputAssemblyState;
@@ -2692,7 +3274,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forUnmarshaling->pInputAssemblyState))
     {
-        unmarshal_VkPipelineInputAssemblyStateCreateInfo(vkStream, (VkPipelineInputAssemblyStateCreateInfo*)(forUnmarshaling->pInputAssemblyState));
+        unmarshal_VkPipelineInputAssemblyStateCreateInfo(vkStream, rootType, (VkPipelineInputAssemblyStateCreateInfo*)(forUnmarshaling->pInputAssemblyState));
     }
     // WARNING PTR CHECK
     const VkPipelineTessellationStateCreateInfo* check_pTessellationState;
@@ -2705,7 +3287,7 @@
         }
         if (hasTessellation)
         {
-            unmarshal_VkPipelineTessellationStateCreateInfo(vkStream, (VkPipelineTessellationStateCreateInfo*)(forUnmarshaling->pTessellationState));
+            unmarshal_VkPipelineTessellationStateCreateInfo(vkStream, rootType, (VkPipelineTessellationStateCreateInfo*)(forUnmarshaling->pTessellationState));
         }
         else
         {
@@ -2723,7 +3305,7 @@
         }
         if (hasRasterization)
         {
-            unmarshal_VkPipelineViewportStateCreateInfo(vkStream, (VkPipelineViewportStateCreateInfo*)(forUnmarshaling->pViewportState));
+            unmarshal_VkPipelineViewportStateCreateInfo(vkStream, rootType, (VkPipelineViewportStateCreateInfo*)(forUnmarshaling->pViewportState));
         }
         else
         {
@@ -2738,7 +3320,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forUnmarshaling->pRasterizationState))
     {
-        unmarshal_VkPipelineRasterizationStateCreateInfo(vkStream, (VkPipelineRasterizationStateCreateInfo*)(forUnmarshaling->pRasterizationState));
+        unmarshal_VkPipelineRasterizationStateCreateInfo(vkStream, rootType, (VkPipelineRasterizationStateCreateInfo*)(forUnmarshaling->pRasterizationState));
     }
     // WARNING PTR CHECK
     const VkPipelineMultisampleStateCreateInfo* check_pMultisampleState;
@@ -2751,7 +3333,7 @@
         }
         if (hasRasterization)
         {
-            unmarshal_VkPipelineMultisampleStateCreateInfo(vkStream, (VkPipelineMultisampleStateCreateInfo*)(forUnmarshaling->pMultisampleState));
+            unmarshal_VkPipelineMultisampleStateCreateInfo(vkStream, rootType, (VkPipelineMultisampleStateCreateInfo*)(forUnmarshaling->pMultisampleState));
         }
         else
         {
@@ -2769,7 +3351,7 @@
         }
         if (hasRasterization)
         {
-            unmarshal_VkPipelineDepthStencilStateCreateInfo(vkStream, (VkPipelineDepthStencilStateCreateInfo*)(forUnmarshaling->pDepthStencilState));
+            unmarshal_VkPipelineDepthStencilStateCreateInfo(vkStream, rootType, (VkPipelineDepthStencilStateCreateInfo*)(forUnmarshaling->pDepthStencilState));
         }
         else
         {
@@ -2787,7 +3369,7 @@
         }
         if (hasRasterization)
         {
-            unmarshal_VkPipelineColorBlendStateCreateInfo(vkStream, (VkPipelineColorBlendStateCreateInfo*)(forUnmarshaling->pColorBlendState));
+            unmarshal_VkPipelineColorBlendStateCreateInfo(vkStream, rootType, (VkPipelineColorBlendStateCreateInfo*)(forUnmarshaling->pColorBlendState));
         }
         else
         {
@@ -2803,7 +3385,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pDynamicState inconsistent between guest and host\n");
         }
-        unmarshal_VkPipelineDynamicStateCreateInfo(vkStream, (VkPipelineDynamicStateCreateInfo*)(forUnmarshaling->pDynamicState));
+        unmarshal_VkPipelineDynamicStateCreateInfo(vkStream, rootType, (VkPipelineDynamicStateCreateInfo*)(forUnmarshaling->pDynamicState));
     }
     uint64_t cgen_var_6;
     vkStream->read((uint64_t*)&cgen_var_6, 1 * 8);
@@ -2820,8 +3402,10 @@
 
 void marshal_VkPushConstantRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPushConstantRange* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkShaderStageFlags*)&forMarshaling->stageFlags, sizeof(VkShaderStageFlags));
     vkStream->write((uint32_t*)&forMarshaling->offset, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->size, sizeof(uint32_t));
@@ -2829,8 +3413,10 @@
 
 void unmarshal_VkPushConstantRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPushConstantRange* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkShaderStageFlags*)&forUnmarshaling->stageFlags, sizeof(VkShaderStageFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->offset, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->size, sizeof(uint32_t));
@@ -2838,10 +3424,16 @@
 
 void marshal_VkPipelineLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineLayoutCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineLayoutCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->setLayoutCount, sizeof(uint32_t));
     if (forMarshaling->setLayoutCount)
@@ -2856,17 +3448,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->pushConstantRangeCount; ++i)
         {
-            marshal_VkPushConstantRange(vkStream, (const VkPushConstantRange*)(forMarshaling->pPushConstantRanges + i));
+            marshal_VkPushConstantRange(vkStream, rootType, (const VkPushConstantRange*)(forMarshaling->pPushConstantRanges + i));
         }
     }
 }
 
 void unmarshal_VkPipelineLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineLayoutCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineLayoutCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineLayoutCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->setLayoutCount, sizeof(uint32_t));
     if (forUnmarshaling->setLayoutCount)
@@ -2881,17 +3479,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->pushConstantRangeCount; ++i)
         {
-            unmarshal_VkPushConstantRange(vkStream, (VkPushConstantRange*)(forUnmarshaling->pPushConstantRanges + i));
+            unmarshal_VkPushConstantRange(vkStream, rootType, (VkPushConstantRange*)(forUnmarshaling->pPushConstantRanges + i));
         }
     }
 }
 
 void marshal_VkSamplerCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSamplerCreateFlags*)&forMarshaling->flags, sizeof(VkSamplerCreateFlags));
     vkStream->write((VkFilter*)&forMarshaling->magFilter, sizeof(VkFilter));
     vkStream->write((VkFilter*)&forMarshaling->minFilter, sizeof(VkFilter));
@@ -2912,10 +3516,16 @@
 
 void unmarshal_VkSamplerCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSamplerCreateFlags*)&forUnmarshaling->flags, sizeof(VkSamplerCreateFlags));
     vkStream->read((VkFilter*)&forUnmarshaling->magFilter, sizeof(VkFilter));
     vkStream->read((VkFilter*)&forUnmarshaling->minFilter, sizeof(VkFilter));
@@ -2936,10 +3546,16 @@
 
 void marshal_VkCopyDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDescriptorSet_u64(&forMarshaling->srcSet, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -2955,10 +3571,16 @@
 
 void unmarshal_VkCopyDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyDescriptorSet* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDescriptorSet(&cgen_var_0, (VkDescriptorSet*)&forUnmarshaling->srcSet, 1);
@@ -2974,8 +3596,10 @@
 
 void marshal_VkDescriptorBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -2985,8 +3609,10 @@
 
 void unmarshal_VkDescriptorBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorBufferInfo* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -2996,8 +3622,10 @@
 
 void marshal_VkDescriptorImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSampler_u64(&forMarshaling->sampler, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -3009,8 +3637,10 @@
 
 void unmarshal_VkDescriptorImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorImageInfo* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSampler(&cgen_var_0, (VkSampler*)&forUnmarshaling->sampler, 1);
@@ -3022,26 +3652,36 @@
 
 void marshal_VkDescriptorPoolSize(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDescriptorType*)&forMarshaling->type, sizeof(VkDescriptorType));
     vkStream->write((uint32_t*)&forMarshaling->descriptorCount, sizeof(uint32_t));
 }
 
 void unmarshal_VkDescriptorPoolSize(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorPoolSize* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDescriptorType*)&forUnmarshaling->type, sizeof(VkDescriptorType));
     vkStream->read((uint32_t*)&forUnmarshaling->descriptorCount, sizeof(uint32_t));
 }
 
 void marshal_VkDescriptorPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDescriptorPoolCreateFlags*)&forMarshaling->flags, sizeof(VkDescriptorPoolCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->maxSets, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->poolSizeCount, sizeof(uint32_t));
@@ -3049,17 +3689,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->poolSizeCount; ++i)
         {
-            marshal_VkDescriptorPoolSize(vkStream, (const VkDescriptorPoolSize*)(forMarshaling->pPoolSizes + i));
+            marshal_VkDescriptorPoolSize(vkStream, rootType, (const VkDescriptorPoolSize*)(forMarshaling->pPoolSizes + i));
         }
     }
 }
 
 void unmarshal_VkDescriptorPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorPoolCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDescriptorPoolCreateFlags*)&forUnmarshaling->flags, sizeof(VkDescriptorPoolCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->maxSets, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->poolSizeCount, sizeof(uint32_t));
@@ -3067,17 +3713,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->poolSizeCount; ++i)
         {
-            unmarshal_VkDescriptorPoolSize(vkStream, (VkDescriptorPoolSize*)(forUnmarshaling->pPoolSizes + i));
+            unmarshal_VkDescriptorPoolSize(vkStream, rootType, (VkDescriptorPoolSize*)(forUnmarshaling->pPoolSizes + i));
         }
     }
 }
 
 void marshal_VkDescriptorSetAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDescriptorPool_u64(&forMarshaling->descriptorPool, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -3093,10 +3745,16 @@
 
 void unmarshal_VkDescriptorSetAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDescriptorPool(&cgen_var_0, (VkDescriptorPool*)&forUnmarshaling->descriptorPool, 1);
@@ -3112,8 +3770,10 @@
 
 void marshal_VkDescriptorSetLayoutBinding(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     vkStream->write((VkDescriptorType*)&forMarshaling->descriptorType, sizeof(VkDescriptorType));
     vkStream->write((uint32_t*)&forMarshaling->descriptorCount, sizeof(uint32_t));
@@ -3135,8 +3795,10 @@
 
 void unmarshal_VkDescriptorSetLayoutBinding(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutBinding* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->binding, sizeof(uint32_t));
     vkStream->read((VkDescriptorType*)&forUnmarshaling->descriptorType, sizeof(VkDescriptorType));
     vkStream->read((uint32_t*)&forUnmarshaling->descriptorCount, sizeof(uint32_t));
@@ -3162,44 +3824,62 @@
 
 void marshal_VkDescriptorSetLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDescriptorSetLayoutCreateFlags*)&forMarshaling->flags, sizeof(VkDescriptorSetLayoutCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->bindingCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindingCount; ++i)
         {
-            marshal_VkDescriptorSetLayoutBinding(vkStream, (const VkDescriptorSetLayoutBinding*)(forMarshaling->pBindings + i));
+            marshal_VkDescriptorSetLayoutBinding(vkStream, rootType, (const VkDescriptorSetLayoutBinding*)(forMarshaling->pBindings + i));
         }
     }
 }
 
 void unmarshal_VkDescriptorSetLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDescriptorSetLayoutCreateFlags*)&forUnmarshaling->flags, sizeof(VkDescriptorSetLayoutCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->bindingCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->bindingCount; ++i)
         {
-            unmarshal_VkDescriptorSetLayoutBinding(vkStream, (VkDescriptorSetLayoutBinding*)(forUnmarshaling->pBindings + i));
+            unmarshal_VkDescriptorSetLayoutBinding(vkStream, rootType, (VkDescriptorSetLayoutBinding*)(forUnmarshaling->pBindings + i));
         }
     }
 }
 
 void marshal_VkWriteDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDescriptorSet_u64(&forMarshaling->dstSet, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -3218,7 +3898,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)forMarshaling->descriptorCount; ++i)
                 {
-                    marshal_VkDescriptorImageInfo(vkStream, (const VkDescriptorImageInfo*)(forMarshaling->pImageInfo + i));
+                    marshal_VkDescriptorImageInfo(vkStream, rootType, (const VkDescriptorImageInfo*)(forMarshaling->pImageInfo + i));
                 }
             }
         }
@@ -3234,7 +3914,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)forMarshaling->descriptorCount; ++i)
                 {
-                    marshal_VkDescriptorBufferInfo(vkStream, (const VkDescriptorBufferInfo*)(forMarshaling->pBufferInfo + i));
+                    marshal_VkDescriptorBufferInfo(vkStream, rootType, (const VkDescriptorBufferInfo*)(forMarshaling->pBufferInfo + i));
                 }
             }
         }
@@ -3259,10 +3939,16 @@
 
 void unmarshal_VkWriteDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSet* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDescriptorSet(&cgen_var_0, (VkDescriptorSet*)&forUnmarshaling->dstSet, 1);
@@ -3285,7 +3971,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->descriptorCount; ++i)
                 {
-                    unmarshal_VkDescriptorImageInfo(vkStream, (VkDescriptorImageInfo*)(forUnmarshaling->pImageInfo + i));
+                    unmarshal_VkDescriptorImageInfo(vkStream, rootType, (VkDescriptorImageInfo*)(forUnmarshaling->pImageInfo + i));
                 }
             }
         }
@@ -3309,7 +3995,7 @@
             {
                 for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->descriptorCount; ++i)
                 {
-                    unmarshal_VkDescriptorBufferInfo(vkStream, (VkDescriptorBufferInfo*)(forUnmarshaling->pBufferInfo + i));
+                    unmarshal_VkDescriptorBufferInfo(vkStream, rootType, (VkDescriptorBufferInfo*)(forUnmarshaling->pBufferInfo + i));
                 }
             }
         }
@@ -3346,8 +4032,10 @@
 
 void marshal_VkAttachmentDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkAttachmentDescriptionFlags*)&forMarshaling->flags, sizeof(VkAttachmentDescriptionFlags));
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -3361,8 +4049,10 @@
 
 void unmarshal_VkAttachmentDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentDescription* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkAttachmentDescriptionFlags*)&forUnmarshaling->flags, sizeof(VkAttachmentDescriptionFlags));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -3376,26 +4066,36 @@
 
 void marshal_VkAttachmentReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->attachment, sizeof(uint32_t));
     vkStream->write((VkImageLayout*)&forMarshaling->layout, sizeof(VkImageLayout));
 }
 
 void unmarshal_VkAttachmentReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentReference* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->attachment, sizeof(uint32_t));
     vkStream->read((VkImageLayout*)&forUnmarshaling->layout, sizeof(VkImageLayout));
 }
 
 void marshal_VkFramebufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFramebufferCreateFlags*)&forMarshaling->flags, sizeof(VkFramebufferCreateFlags));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkRenderPass_u64(&forMarshaling->renderPass, &cgen_var_0, 1);
@@ -3415,10 +4115,16 @@
 
 void unmarshal_VkFramebufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFramebufferCreateFlags*)&forUnmarshaling->flags, sizeof(VkFramebufferCreateFlags));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -3438,8 +4144,10 @@
 
 void marshal_VkSubpassDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkSubpassDescriptionFlags*)&forMarshaling->flags, sizeof(VkSubpassDescriptionFlags));
     vkStream->write((VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     vkStream->write((uint32_t*)&forMarshaling->inputAttachmentCount, sizeof(uint32_t));
@@ -3447,7 +4155,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->inputAttachmentCount; ++i)
         {
-            marshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pInputAttachments + i));
+            marshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pInputAttachments + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->colorAttachmentCount, sizeof(uint32_t));
@@ -3455,7 +4163,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
         {
-            marshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pColorAttachments + i));
+            marshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pColorAttachments + i));
         }
     }
     // WARNING PTR CHECK
@@ -3467,7 +4175,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
             {
-                marshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pResolveAttachments + i));
+                marshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pResolveAttachments + i));
             }
         }
     }
@@ -3476,7 +4184,7 @@
     vkStream->putBe64(cgen_var_1);
     if (forMarshaling->pDepthStencilAttachment)
     {
-        marshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pDepthStencilAttachment));
+        marshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pDepthStencilAttachment));
     }
     vkStream->write((uint32_t*)&forMarshaling->preserveAttachmentCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pPreserveAttachments, forMarshaling->preserveAttachmentCount * sizeof(const uint32_t));
@@ -3484,8 +4192,10 @@
 
 void unmarshal_VkSubpassDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDescription* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkSubpassDescriptionFlags*)&forUnmarshaling->flags, sizeof(VkSubpassDescriptionFlags));
     vkStream->read((VkPipelineBindPoint*)&forUnmarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     vkStream->read((uint32_t*)&forUnmarshaling->inputAttachmentCount, sizeof(uint32_t));
@@ -3493,7 +4203,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->inputAttachmentCount; ++i)
         {
-            unmarshal_VkAttachmentReference(vkStream, (VkAttachmentReference*)(forUnmarshaling->pInputAttachments + i));
+            unmarshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(forUnmarshaling->pInputAttachments + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->colorAttachmentCount, sizeof(uint32_t));
@@ -3501,7 +4211,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->colorAttachmentCount; ++i)
         {
-            unmarshal_VkAttachmentReference(vkStream, (VkAttachmentReference*)(forUnmarshaling->pColorAttachments + i));
+            unmarshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(forUnmarshaling->pColorAttachments + i));
         }
     }
     // WARNING PTR CHECK
@@ -3517,7 +4227,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->colorAttachmentCount; ++i)
             {
-                unmarshal_VkAttachmentReference(vkStream, (VkAttachmentReference*)(forUnmarshaling->pResolveAttachments + i));
+                unmarshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(forUnmarshaling->pResolveAttachments + i));
             }
         }
     }
@@ -3530,7 +4240,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pDepthStencilAttachment inconsistent between guest and host\n");
         }
-        unmarshal_VkAttachmentReference(vkStream, (VkAttachmentReference*)(forUnmarshaling->pDepthStencilAttachment));
+        unmarshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(forUnmarshaling->pDepthStencilAttachment));
     }
     vkStream->read((uint32_t*)&forUnmarshaling->preserveAttachmentCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pPreserveAttachments, forUnmarshaling->preserveAttachmentCount * sizeof(const uint32_t));
@@ -3538,8 +4248,10 @@
 
 void marshal_VkSubpassDependency(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->srcSubpass, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->dstSubpass, sizeof(uint32_t));
     vkStream->write((VkPipelineStageFlags*)&forMarshaling->srcStageMask, sizeof(VkPipelineStageFlags));
@@ -3551,8 +4263,10 @@
 
 void unmarshal_VkSubpassDependency(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDependency* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->srcSubpass, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->dstSubpass, sizeof(uint32_t));
     vkStream->read((VkPipelineStageFlags*)&forUnmarshaling->srcStageMask, sizeof(VkPipelineStageFlags));
@@ -3564,17 +4278,23 @@
 
 void marshal_VkRenderPassCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkRenderPassCreateFlags*)&forMarshaling->flags, sizeof(VkRenderPassCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentCount; ++i)
         {
-            marshal_VkAttachmentDescription(vkStream, (const VkAttachmentDescription*)(forMarshaling->pAttachments + i));
+            marshal_VkAttachmentDescription(vkStream, rootType, (const VkAttachmentDescription*)(forMarshaling->pAttachments + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->subpassCount, sizeof(uint32_t));
@@ -3582,7 +4302,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->subpassCount; ++i)
         {
-            marshal_VkSubpassDescription(vkStream, (const VkSubpassDescription*)(forMarshaling->pSubpasses + i));
+            marshal_VkSubpassDescription(vkStream, rootType, (const VkSubpassDescription*)(forMarshaling->pSubpasses + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->dependencyCount, sizeof(uint32_t));
@@ -3590,24 +4310,30 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->dependencyCount; ++i)
         {
-            marshal_VkSubpassDependency(vkStream, (const VkSubpassDependency*)(forMarshaling->pDependencies + i));
+            marshal_VkSubpassDependency(vkStream, rootType, (const VkSubpassDependency*)(forMarshaling->pDependencies + i));
         }
     }
 }
 
 void unmarshal_VkRenderPassCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkRenderPassCreateFlags*)&forUnmarshaling->flags, sizeof(VkRenderPassCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->attachmentCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->attachmentCount; ++i)
         {
-            unmarshal_VkAttachmentDescription(vkStream, (VkAttachmentDescription*)(forUnmarshaling->pAttachments + i));
+            unmarshal_VkAttachmentDescription(vkStream, rootType, (VkAttachmentDescription*)(forUnmarshaling->pAttachments + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->subpassCount, sizeof(uint32_t));
@@ -3615,7 +4341,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->subpassCount; ++i)
         {
-            unmarshal_VkSubpassDescription(vkStream, (VkSubpassDescription*)(forUnmarshaling->pSubpasses + i));
+            unmarshal_VkSubpassDescription(vkStream, rootType, (VkSubpassDescription*)(forUnmarshaling->pSubpasses + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->dependencyCount, sizeof(uint32_t));
@@ -3623,37 +4349,55 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->dependencyCount; ++i)
         {
-            unmarshal_VkSubpassDependency(vkStream, (VkSubpassDependency*)(forUnmarshaling->pDependencies + i));
+            unmarshal_VkSubpassDependency(vkStream, rootType, (VkSubpassDependency*)(forUnmarshaling->pDependencies + i));
         }
     }
 }
 
 void marshal_VkCommandPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkCommandPoolCreateFlags*)&forMarshaling->flags, sizeof(VkCommandPoolCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkCommandPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandPoolCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkCommandPoolCreateFlags*)&forUnmarshaling->flags, sizeof(VkCommandPoolCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->queueFamilyIndex, sizeof(uint32_t));
 }
 
 void marshal_VkCommandBufferAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkCommandPool_u64(&forMarshaling->commandPool, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -3663,10 +4407,16 @@
 
 void unmarshal_VkCommandBufferAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkCommandPool(&cgen_var_0, (VkCommandPool*)&forUnmarshaling->commandPool, 1);
@@ -3676,10 +4426,16 @@
 
 void marshal_VkCommandBufferInheritanceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkRenderPass_u64(&forMarshaling->renderPass, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -3694,10 +4450,16 @@
 
 void unmarshal_VkCommandBufferInheritanceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferInheritanceInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_0, (VkRenderPass*)&forUnmarshaling->renderPass, 1);
@@ -3712,26 +4474,38 @@
 
 void marshal_VkCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkCommandBufferUsageFlags*)&forMarshaling->flags, sizeof(VkCommandBufferUsageFlags));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pInheritanceInfo;
     vkStream->putBe64(cgen_var_0);
     if (forMarshaling->pInheritanceInfo)
     {
-        marshal_VkCommandBufferInheritanceInfo(vkStream, (const VkCommandBufferInheritanceInfo*)(forMarshaling->pInheritanceInfo));
+        marshal_VkCommandBufferInheritanceInfo(vkStream, rootType, (const VkCommandBufferInheritanceInfo*)(forMarshaling->pInheritanceInfo));
     }
 }
 
 void unmarshal_VkCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferBeginInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkCommandBufferUsageFlags*)&forUnmarshaling->flags, sizeof(VkCommandBufferUsageFlags));
     // WARNING PTR CHECK
     const VkCommandBufferInheritanceInfo* check_pInheritanceInfo;
@@ -3742,14 +4516,16 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pInheritanceInfo inconsistent between guest and host\n");
         }
-        unmarshal_VkCommandBufferInheritanceInfo(vkStream, (VkCommandBufferInheritanceInfo*)(forUnmarshaling->pInheritanceInfo));
+        unmarshal_VkCommandBufferInheritanceInfo(vkStream, rootType, (VkCommandBufferInheritanceInfo*)(forUnmarshaling->pInheritanceInfo));
     }
 }
 
 void marshal_VkBufferCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceSize*)&forMarshaling->srcOffset, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->dstOffset, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -3757,8 +4533,10 @@
 
 void unmarshal_VkBufferCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferCopy* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceSize*)&forUnmarshaling->srcOffset, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->dstOffset, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
@@ -3766,8 +4544,10 @@
 
 void marshal_VkImageSubresourceLayers(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->write((uint32_t*)&forMarshaling->mipLevel, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->baseArrayLayer, sizeof(uint32_t));
@@ -3776,8 +4556,10 @@
 
 void unmarshal_VkImageSubresourceLayers(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSubresourceLayers* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->mipLevel, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->baseArrayLayer, sizeof(uint32_t));
@@ -3786,197 +4568,239 @@
 
 void marshal_VkBufferImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceSize*)&forMarshaling->bufferOffset, sizeof(VkDeviceSize));
     vkStream->write((uint32_t*)&forMarshaling->bufferRowLength, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->bufferImageHeight, sizeof(uint32_t));
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->imageOffset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->imageExtent));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->imageOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageExtent));
 }
 
 void unmarshal_VkBufferImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferImageCopy* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceSize*)&forUnmarshaling->bufferOffset, sizeof(VkDeviceSize));
     vkStream->read((uint32_t*)&forUnmarshaling->bufferRowLength, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->bufferImageHeight, sizeof(uint32_t));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->imageOffset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->imageExtent));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->imageOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageExtent));
 }
 
 void marshal_VkClearColorValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearColorValue* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)forMarshaling->float32, 4 * sizeof(float));
 }
 
 void unmarshal_VkClearColorValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearColorValue* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)forUnmarshaling->float32, 4 * sizeof(float));
 }
 
 void marshal_VkClearDepthStencilValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)&forMarshaling->depth, sizeof(float));
     vkStream->write((uint32_t*)&forMarshaling->stencil, sizeof(uint32_t));
 }
 
 void unmarshal_VkClearDepthStencilValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearDepthStencilValue* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)&forUnmarshaling->depth, sizeof(float));
     vkStream->read((uint32_t*)&forUnmarshaling->stencil, sizeof(uint32_t));
 }
 
 void marshal_VkClearValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearValue* forMarshaling)
 {
-    marshal_VkClearColorValue(vkStream, (VkClearColorValue*)(&forMarshaling->color));
+    (void)rootType;
+    marshal_VkClearColorValue(vkStream, rootType, (VkClearColorValue*)(&forMarshaling->color));
 }
 
 void unmarshal_VkClearValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearValue* forUnmarshaling)
 {
-    unmarshal_VkClearColorValue(vkStream, (VkClearColorValue*)(&forUnmarshaling->color));
+    (void)rootType;
+    unmarshal_VkClearColorValue(vkStream, rootType, (VkClearColorValue*)(&forUnmarshaling->color));
 }
 
 void marshal_VkClearAttachment(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearAttachment* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->write((uint32_t*)&forMarshaling->colorAttachment, sizeof(uint32_t));
-    marshal_VkClearValue(vkStream, (VkClearValue*)(&forMarshaling->clearValue));
+    marshal_VkClearValue(vkStream, rootType, (VkClearValue*)(&forMarshaling->clearValue));
 }
 
 void unmarshal_VkClearAttachment(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearAttachment* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->colorAttachment, sizeof(uint32_t));
-    unmarshal_VkClearValue(vkStream, (VkClearValue*)(&forUnmarshaling->clearValue));
+    unmarshal_VkClearValue(vkStream, rootType, (VkClearValue*)(&forUnmarshaling->clearValue));
 }
 
 void marshal_VkClearRect(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearRect* forMarshaling)
 {
-    marshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->rect));
+    (void)rootType;
+    marshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->rect));
     vkStream->write((uint32_t*)&forMarshaling->baseArrayLayer, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->layerCount, sizeof(uint32_t));
 }
 
 void unmarshal_VkClearRect(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearRect* forUnmarshaling)
 {
-    unmarshal_VkRect2D(vkStream, (VkRect2D*)(&forUnmarshaling->rect));
+    (void)rootType;
+    unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forUnmarshaling->rect));
     vkStream->read((uint32_t*)&forUnmarshaling->baseArrayLayer, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->layerCount, sizeof(uint32_t));
 }
 
 void marshal_VkImageBlit(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit* forMarshaling)
 {
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
+    (void)rootType;
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        marshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->srcOffsets + i));
+        marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->srcOffsets + i));
     }
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        marshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->dstOffsets + i));
+        marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->dstOffsets + i));
     }
 }
 
 void unmarshal_VkImageBlit(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageBlit* forUnmarshaling)
 {
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
+    (void)rootType;
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forUnmarshaling->srcOffsets + i));
+        unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forUnmarshaling->srcOffsets + i));
     }
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forUnmarshaling->dstOffsets + i));
+        unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forUnmarshaling->dstOffsets + i));
     }
 }
 
 void marshal_VkImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy* forMarshaling)
 {
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset));
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent));
+    (void)rootType;
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent));
 }
 
 void unmarshal_VkImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageCopy* forUnmarshaling)
 {
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->srcOffset));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->dstOffset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->extent));
+    (void)rootType;
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->srcOffset));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->dstOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->extent));
 }
 
 void marshal_VkImageResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve* forMarshaling)
 {
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset));
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent));
+    (void)rootType;
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent));
 }
 
 void unmarshal_VkImageResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageResolve* forUnmarshaling)
 {
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->srcOffset));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->dstOffset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->extent));
+    (void)rootType;
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->srcOffset));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->dstOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->extent));
 }
 
 void marshal_VkRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkRenderPass_u64(&forMarshaling->renderPass, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
     uint64_t cgen_var_1;
     vkStream->handleMapping()->mapHandles_VkFramebuffer_u64(&forMarshaling->framebuffer, &cgen_var_1, 1);
     vkStream->write((uint64_t*)&cgen_var_1, 1 * 8);
-    marshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->renderArea));
+    marshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->renderArea));
     vkStream->write((uint32_t*)&forMarshaling->clearValueCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)forMarshaling->pClearValues;
@@ -3987,7 +4811,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->clearValueCount; ++i)
             {
-                marshal_VkClearValue(vkStream, (const VkClearValue*)(forMarshaling->pClearValues + i));
+                marshal_VkClearValue(vkStream, rootType, (const VkClearValue*)(forMarshaling->pClearValues + i));
             }
         }
     }
@@ -3995,17 +4819,23 @@
 
 void unmarshal_VkRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassBeginInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkRenderPass(&cgen_var_0, (VkRenderPass*)&forUnmarshaling->renderPass, 1);
     uint64_t cgen_var_1;
     vkStream->read((uint64_t*)&cgen_var_1, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkFramebuffer(&cgen_var_1, (VkFramebuffer*)&forUnmarshaling->framebuffer, 1);
-    unmarshal_VkRect2D(vkStream, (VkRect2D*)(&forUnmarshaling->renderArea));
+    unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forUnmarshaling->renderArea));
     vkStream->read((uint32_t*)&forUnmarshaling->clearValueCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkClearValue* check_pClearValues;
@@ -4020,7 +4850,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->clearValueCount; ++i)
             {
-                unmarshal_VkClearValue(vkStream, (VkClearValue*)(forUnmarshaling->pClearValues + i));
+                unmarshal_VkClearValue(vkStream, rootType, (VkClearValue*)(forUnmarshaling->pClearValues + i));
             }
         }
     }
@@ -4030,10 +4860,16 @@
 #ifdef VK_VERSION_1_1
 void marshal_VkPhysicalDeviceSubgroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->subgroupSize, sizeof(uint32_t));
     vkStream->write((VkShaderStageFlags*)&forMarshaling->supportedStages, sizeof(VkShaderStageFlags));
     vkStream->write((VkSubgroupFeatureFlags*)&forMarshaling->supportedOperations, sizeof(VkSubgroupFeatureFlags));
@@ -4042,10 +4878,16 @@
 
 void unmarshal_VkPhysicalDeviceSubgroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSubgroupProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->subgroupSize, sizeof(uint32_t));
     vkStream->read((VkShaderStageFlags*)&forUnmarshaling->supportedStages, sizeof(VkShaderStageFlags));
     vkStream->read((VkSubgroupFeatureFlags*)&forUnmarshaling->supportedOperations, sizeof(VkSubgroupFeatureFlags));
@@ -4054,10 +4896,16 @@
 
 void marshal_VkBindBufferMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -4069,10 +4917,16 @@
 
 void unmarshal_VkBindBufferMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindBufferMemoryInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -4084,10 +4938,16 @@
 
 void marshal_VkBindImageMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -4099,10 +4959,16 @@
 
 void unmarshal_VkBindImageMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImageMemoryInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -4114,10 +4980,16 @@
 
 void marshal_VkPhysicalDevice16BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->storageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->uniformAndStorageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->storagePushConstant16, sizeof(VkBool32));
@@ -4126,10 +4998,16 @@
 
 void unmarshal_VkPhysicalDevice16BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevice16BitStorageFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->storageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->uniformAndStorageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->storagePushConstant16, sizeof(VkBool32));
@@ -4138,30 +5016,48 @@
 
 void marshal_VkMemoryDedicatedRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->prefersDedicatedAllocation, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->requiresDedicatedAllocation, sizeof(VkBool32));
 }
 
 void unmarshal_VkMemoryDedicatedRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryDedicatedRequirements* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->prefersDedicatedAllocation, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->requiresDedicatedAllocation, sizeof(VkBool32));
 }
 
 void marshal_VkMemoryDedicatedAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -4172,10 +5068,16 @@
 
 void unmarshal_VkMemoryDedicatedAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryDedicatedAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -4186,82 +5088,124 @@
 
 void marshal_VkMemoryAllocateFlagsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkMemoryAllocateFlags*)&forMarshaling->flags, sizeof(VkMemoryAllocateFlags));
     vkStream->write((uint32_t*)&forMarshaling->deviceMask, sizeof(uint32_t));
 }
 
 void unmarshal_VkMemoryAllocateFlagsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryAllocateFlagsInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkMemoryAllocateFlags*)&forUnmarshaling->flags, sizeof(VkMemoryAllocateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->deviceMask, sizeof(uint32_t));
 }
 
 void marshal_VkDeviceGroupRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->deviceMask, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->deviceRenderAreaCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->deviceRenderAreaCount; ++i)
         {
-            marshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pDeviceRenderAreas + i));
+            marshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pDeviceRenderAreas + i));
         }
     }
 }
 
 void unmarshal_VkDeviceGroupRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupRenderPassBeginInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->deviceMask, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->deviceRenderAreaCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->deviceRenderAreaCount; ++i)
         {
-            unmarshal_VkRect2D(vkStream, (VkRect2D*)(forUnmarshaling->pDeviceRenderAreas + i));
+            unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(forUnmarshaling->pDeviceRenderAreas + i));
         }
     }
 }
 
 void marshal_VkDeviceGroupCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->deviceMask, sizeof(uint32_t));
 }
 
 void unmarshal_VkDeviceGroupCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupCommandBufferBeginInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->deviceMask, sizeof(uint32_t));
 }
 
 void marshal_VkDeviceGroupSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pWaitSemaphoreDeviceIndices, forMarshaling->waitSemaphoreCount * sizeof(const uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->commandBufferCount, sizeof(uint32_t));
@@ -4272,10 +5216,16 @@
 
 void unmarshal_VkDeviceGroupSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupSubmitInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->waitSemaphoreCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pWaitSemaphoreDeviceIndices, forUnmarshaling->waitSemaphoreCount * sizeof(const uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->commandBufferCount, sizeof(uint32_t));
@@ -4286,50 +5236,80 @@
 
 void marshal_VkDeviceGroupBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->resourceDeviceIndex, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->memoryDeviceIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkDeviceGroupBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupBindSparseInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->resourceDeviceIndex, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryDeviceIndex, sizeof(uint32_t));
 }
 
 void marshal_VkBindBufferMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->deviceIndexCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pDeviceIndices, forMarshaling->deviceIndexCount * sizeof(const uint32_t));
 }
 
 void unmarshal_VkBindBufferMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindBufferMemoryDeviceGroupInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->deviceIndexCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pDeviceIndices, forUnmarshaling->deviceIndexCount * sizeof(const uint32_t));
 }
 
 void marshal_VkBindImageMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->deviceIndexCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pDeviceIndices, forMarshaling->deviceIndexCount * sizeof(const uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->splitInstanceBindRegionCount, sizeof(uint32_t));
@@ -4337,17 +5317,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->splitInstanceBindRegionCount; ++i)
         {
-            marshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pSplitInstanceBindRegions + i));
+            marshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pSplitInstanceBindRegions + i));
         }
     }
 }
 
 void unmarshal_VkBindImageMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImageMemoryDeviceGroupInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->deviceIndexCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pDeviceIndices, forUnmarshaling->deviceIndexCount * sizeof(const uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->splitInstanceBindRegionCount, sizeof(uint32_t));
@@ -4355,17 +5341,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->splitInstanceBindRegionCount; ++i)
         {
-            unmarshal_VkRect2D(vkStream, (VkRect2D*)(forUnmarshaling->pSplitInstanceBindRegions + i));
+            unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(forUnmarshaling->pSplitInstanceBindRegions + i));
         }
     }
 }
 
 void marshal_VkPhysicalDeviceGroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->physicalDeviceCount, sizeof(uint32_t));
     vkStream->write((VkPhysicalDevice*)forMarshaling->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE * sizeof(VkPhysicalDevice));
     vkStream->write((VkBool32*)&forMarshaling->subsetAllocation, sizeof(VkBool32));
@@ -4373,10 +5365,16 @@
 
 void unmarshal_VkPhysicalDeviceGroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceGroupProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->physicalDeviceCount, sizeof(uint32_t));
     vkStream->read((VkPhysicalDevice*)forUnmarshaling->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE * sizeof(VkPhysicalDevice));
     vkStream->read((VkBool32*)&forUnmarshaling->subsetAllocation, sizeof(VkBool32));
@@ -4384,10 +5382,16 @@
 
 void marshal_VkDeviceGroupDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->physicalDeviceCount, sizeof(uint32_t));
     if (forMarshaling->physicalDeviceCount)
     {
@@ -4400,10 +5404,16 @@
 
 void unmarshal_VkDeviceGroupDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupDeviceCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->physicalDeviceCount, sizeof(uint32_t));
     if (forUnmarshaling->physicalDeviceCount)
     {
@@ -4416,10 +5426,16 @@
 
 void marshal_VkBufferMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -4427,10 +5443,16 @@
 
 void unmarshal_VkBufferMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferMemoryRequirementsInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -4438,10 +5460,16 @@
 
 void marshal_VkImageMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -4449,10 +5477,16 @@
 
 void unmarshal_VkImageMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageMemoryRequirementsInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -4460,10 +5494,16 @@
 
 void marshal_VkImageSparseMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -4471,10 +5511,16 @@
 
 void unmarshal_VkImageSparseMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSparseMemoryRequirementsInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -4482,118 +5528,196 @@
 
 void marshal_VkMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkMemoryRequirements(vkStream, (VkMemoryRequirements*)(&forMarshaling->memoryRequirements));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkMemoryRequirements(vkStream, rootType, (VkMemoryRequirements*)(&forMarshaling->memoryRequirements));
 }
 
 void unmarshal_VkMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryRequirements2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkMemoryRequirements(vkStream, (VkMemoryRequirements*)(&forUnmarshaling->memoryRequirements));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkMemoryRequirements(vkStream, rootType, (VkMemoryRequirements*)(&forUnmarshaling->memoryRequirements));
 }
 
 void marshal_VkSparseImageMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkSparseImageMemoryRequirements(vkStream, (VkSparseImageMemoryRequirements*)(&forMarshaling->memoryRequirements));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkSparseImageMemoryRequirements(vkStream, rootType, (VkSparseImageMemoryRequirements*)(&forMarshaling->memoryRequirements));
 }
 
 void unmarshal_VkSparseImageMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryRequirements2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkSparseImageMemoryRequirements(vkStream, (VkSparseImageMemoryRequirements*)(&forUnmarshaling->memoryRequirements));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkSparseImageMemoryRequirements(vkStream, rootType, (VkSparseImageMemoryRequirements*)(&forUnmarshaling->memoryRequirements));
 }
 
 void marshal_VkPhysicalDeviceFeatures2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkPhysicalDeviceFeatures(vkStream, (VkPhysicalDeviceFeatures*)(&forMarshaling->features));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkPhysicalDeviceFeatures(vkStream, rootType, (VkPhysicalDeviceFeatures*)(&forMarshaling->features));
 }
 
 void unmarshal_VkPhysicalDeviceFeatures2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFeatures2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkPhysicalDeviceFeatures(vkStream, (VkPhysicalDeviceFeatures*)(&forUnmarshaling->features));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkPhysicalDeviceFeatures(vkStream, rootType, (VkPhysicalDeviceFeatures*)(&forUnmarshaling->features));
 }
 
 void marshal_VkPhysicalDeviceProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkPhysicalDeviceProperties(vkStream, (VkPhysicalDeviceProperties*)(&forMarshaling->properties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkPhysicalDeviceProperties(vkStream, rootType, (VkPhysicalDeviceProperties*)(&forMarshaling->properties));
 }
 
 void unmarshal_VkPhysicalDeviceProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProperties2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkPhysicalDeviceProperties(vkStream, (VkPhysicalDeviceProperties*)(&forUnmarshaling->properties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkPhysicalDeviceProperties(vkStream, rootType, (VkPhysicalDeviceProperties*)(&forUnmarshaling->properties));
 }
 
 void marshal_VkFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkFormatProperties(vkStream, (VkFormatProperties*)(&forMarshaling->formatProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkFormatProperties(vkStream, rootType, (VkFormatProperties*)(&forMarshaling->formatProperties));
 }
 
 void unmarshal_VkFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFormatProperties2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkFormatProperties(vkStream, (VkFormatProperties*)(&forUnmarshaling->formatProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkFormatProperties(vkStream, rootType, (VkFormatProperties*)(&forUnmarshaling->formatProperties));
 }
 
 void marshal_VkImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkImageFormatProperties(vkStream, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkImageFormatProperties(vkStream, rootType, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties));
 }
 
 void unmarshal_VkImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageFormatProperties2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkImageFormatProperties(vkStream, (VkImageFormatProperties*)(&forUnmarshaling->imageFormatProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkImageFormatProperties(vkStream, rootType, (VkImageFormatProperties*)(&forUnmarshaling->imageFormatProperties));
 }
 
 void marshal_VkPhysicalDeviceImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((VkImageType*)&forMarshaling->type, sizeof(VkImageType));
     vkStream->write((VkImageTiling*)&forMarshaling->tiling, sizeof(VkImageTiling));
@@ -4603,10 +5727,16 @@
 
 void unmarshal_VkPhysicalDeviceImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageFormatInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((VkImageType*)&forUnmarshaling->type, sizeof(VkImageType));
     vkStream->read((VkImageTiling*)&forUnmarshaling->tiling, sizeof(VkImageTiling));
@@ -4616,64 +5746,106 @@
 
 void marshal_VkQueueFamilyProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkQueueFamilyProperties(vkStream, (VkQueueFamilyProperties*)(&forMarshaling->queueFamilyProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkQueueFamilyProperties(vkStream, rootType, (VkQueueFamilyProperties*)(&forMarshaling->queueFamilyProperties));
 }
 
 void unmarshal_VkQueueFamilyProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueueFamilyProperties2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkQueueFamilyProperties(vkStream, (VkQueueFamilyProperties*)(&forUnmarshaling->queueFamilyProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkQueueFamilyProperties(vkStream, rootType, (VkQueueFamilyProperties*)(&forUnmarshaling->queueFamilyProperties));
 }
 
 void marshal_VkPhysicalDeviceMemoryProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkPhysicalDeviceMemoryProperties(vkStream, (VkPhysicalDeviceMemoryProperties*)(&forMarshaling->memoryProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkPhysicalDeviceMemoryProperties(vkStream, rootType, (VkPhysicalDeviceMemoryProperties*)(&forMarshaling->memoryProperties));
 }
 
 void unmarshal_VkPhysicalDeviceMemoryProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryProperties2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkPhysicalDeviceMemoryProperties(vkStream, (VkPhysicalDeviceMemoryProperties*)(&forUnmarshaling->memoryProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkPhysicalDeviceMemoryProperties(vkStream, rootType, (VkPhysicalDeviceMemoryProperties*)(&forUnmarshaling->memoryProperties));
 }
 
 void marshal_VkSparseImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkSparseImageFormatProperties(vkStream, (VkSparseImageFormatProperties*)(&forMarshaling->properties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkSparseImageFormatProperties(vkStream, rootType, (VkSparseImageFormatProperties*)(&forMarshaling->properties));
 }
 
 void unmarshal_VkSparseImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageFormatProperties2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkSparseImageFormatProperties(vkStream, (VkSparseImageFormatProperties*)(&forUnmarshaling->properties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkSparseImageFormatProperties(vkStream, rootType, (VkSparseImageFormatProperties*)(&forUnmarshaling->properties));
 }
 
 void marshal_VkPhysicalDeviceSparseImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((VkImageType*)&forMarshaling->type, sizeof(VkImageType));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -4683,10 +5855,16 @@
 
 void unmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSparseImageFormatInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((VkImageType*)&forUnmarshaling->type, sizeof(VkImageType));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -4696,26 +5874,40 @@
 
 void marshal_VkPhysicalDevicePointClippingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPointClippingBehavior*)&forMarshaling->pointClippingBehavior, sizeof(VkPointClippingBehavior));
 }
 
 void unmarshal_VkPhysicalDevicePointClippingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePointClippingProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPointClippingBehavior*)&forUnmarshaling->pointClippingBehavior, sizeof(VkPointClippingBehavior));
 }
 
 void marshal_VkInputAttachmentAspectReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->subpass, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->inputAttachmentIndex, sizeof(uint32_t));
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
@@ -4723,8 +5915,10 @@
 
 void unmarshal_VkInputAttachmentAspectReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkInputAttachmentAspectReference* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->subpass, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->inputAttachmentIndex, sizeof(uint32_t));
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
@@ -4732,78 +5926,120 @@
 
 void marshal_VkRenderPassInputAttachmentAspectCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->aspectReferenceCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->aspectReferenceCount; ++i)
         {
-            marshal_VkInputAttachmentAspectReference(vkStream, (const VkInputAttachmentAspectReference*)(forMarshaling->pAspectReferences + i));
+            marshal_VkInputAttachmentAspectReference(vkStream, rootType, (const VkInputAttachmentAspectReference*)(forMarshaling->pAspectReferences + i));
         }
     }
 }
 
 void unmarshal_VkRenderPassInputAttachmentAspectCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassInputAttachmentAspectCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->aspectReferenceCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->aspectReferenceCount; ++i)
         {
-            unmarshal_VkInputAttachmentAspectReference(vkStream, (VkInputAttachmentAspectReference*)(forUnmarshaling->pAspectReferences + i));
+            unmarshal_VkInputAttachmentAspectReference(vkStream, rootType, (VkInputAttachmentAspectReference*)(forUnmarshaling->pAspectReferences + i));
         }
     }
 }
 
 void marshal_VkImageViewUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageUsageFlags*)&forMarshaling->usage, sizeof(VkImageUsageFlags));
 }
 
 void unmarshal_VkImageViewUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewUsageCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageUsageFlags*)&forUnmarshaling->usage, sizeof(VkImageUsageFlags));
 }
 
 void marshal_VkPipelineTessellationDomainOriginStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkTessellationDomainOrigin*)&forMarshaling->domainOrigin, sizeof(VkTessellationDomainOrigin));
 }
 
 void unmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineTessellationDomainOriginStateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkTessellationDomainOrigin*)&forUnmarshaling->domainOrigin, sizeof(VkTessellationDomainOrigin));
 }
 
 void marshal_VkRenderPassMultiviewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->subpassCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pViewMasks, forMarshaling->subpassCount * sizeof(const uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->dependencyCount, sizeof(uint32_t));
@@ -4814,10 +6050,16 @@
 
 void unmarshal_VkRenderPassMultiviewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassMultiviewCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->subpassCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pViewMasks, forUnmarshaling->subpassCount * sizeof(const uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->dependencyCount, sizeof(uint32_t));
@@ -4828,10 +6070,16 @@
 
 void marshal_VkPhysicalDeviceMultiviewFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->multiview, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->multiviewGeometryShader, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->multiviewTessellationShader, sizeof(VkBool32));
@@ -4839,10 +6087,16 @@
 
 void unmarshal_VkPhysicalDeviceMultiviewFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMultiviewFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->multiview, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->multiviewGeometryShader, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->multiviewTessellationShader, sizeof(VkBool32));
@@ -4850,86 +6104,140 @@
 
 void marshal_VkPhysicalDeviceMultiviewProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxMultiviewViewCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxMultiviewInstanceIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceMultiviewProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMultiviewProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxMultiviewViewCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxMultiviewInstanceIndex, sizeof(uint32_t));
 }
 
 void marshal_VkPhysicalDeviceVariablePointersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->variablePointersStorageBuffer, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->variablePointers, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceVariablePointersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVariablePointersFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->variablePointersStorageBuffer, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->variablePointers, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceProtectedMemoryFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->protectedMemory, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceProtectedMemoryFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProtectedMemoryFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->protectedMemory, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceProtectedMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->protectedNoFault, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceProtectedMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProtectedMemoryProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->protectedNoFault, sizeof(VkBool32));
 }
 
 void marshal_VkDeviceQueueInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceQueueCreateFlags*)&forMarshaling->flags, sizeof(VkDeviceQueueCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->queueIndex, sizeof(uint32_t));
@@ -4937,10 +6245,16 @@
 
 void unmarshal_VkDeviceQueueInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceQueueInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceQueueCreateFlags*)&forUnmarshaling->flags, sizeof(VkDeviceQueueCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->queueFamilyIndex, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->queueIndex, sizeof(uint32_t));
@@ -4948,32 +6262,50 @@
 
 void marshal_VkProtectedSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->protectedSubmit, sizeof(VkBool32));
 }
 
 void unmarshal_VkProtectedSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkProtectedSubmitInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->protectedSubmit, sizeof(VkBool32));
 }
 
 void marshal_VkSamplerYcbcrConversionCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((VkSamplerYcbcrModelConversion*)&forMarshaling->ycbcrModel, sizeof(VkSamplerYcbcrModelConversion));
     vkStream->write((VkSamplerYcbcrRange*)&forMarshaling->ycbcrRange, sizeof(VkSamplerYcbcrRange));
-    marshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forMarshaling->components));
+    marshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forMarshaling->components));
     vkStream->write((VkChromaLocation*)&forMarshaling->xChromaOffset, sizeof(VkChromaLocation));
     vkStream->write((VkChromaLocation*)&forMarshaling->yChromaOffset, sizeof(VkChromaLocation));
     vkStream->write((VkFilter*)&forMarshaling->chromaFilter, sizeof(VkFilter));
@@ -4982,14 +6314,20 @@
 
 void unmarshal_VkSamplerYcbcrConversionCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerYcbcrConversionCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((VkSamplerYcbcrModelConversion*)&forUnmarshaling->ycbcrModel, sizeof(VkSamplerYcbcrModelConversion));
     vkStream->read((VkSamplerYcbcrRange*)&forUnmarshaling->ycbcrRange, sizeof(VkSamplerYcbcrRange));
-    unmarshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forUnmarshaling->components));
+    unmarshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forUnmarshaling->components));
     vkStream->read((VkChromaLocation*)&forUnmarshaling->xChromaOffset, sizeof(VkChromaLocation));
     vkStream->read((VkChromaLocation*)&forUnmarshaling->yChromaOffset, sizeof(VkChromaLocation));
     vkStream->read((VkFilter*)&forUnmarshaling->chromaFilter, sizeof(VkFilter));
@@ -4998,10 +6336,16 @@
 
 void marshal_VkSamplerYcbcrConversionInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSamplerYcbcrConversion_u64(&forMarshaling->conversion, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -5009,10 +6353,16 @@
 
 void unmarshal_VkSamplerYcbcrConversionInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerYcbcrConversionInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSamplerYcbcrConversion(&cgen_var_0, (VkSamplerYcbcrConversion*)&forUnmarshaling->conversion, 1);
@@ -5020,80 +6370,130 @@
 
 void marshal_VkBindImagePlaneMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageAspectFlagBits*)&forMarshaling->planeAspect, sizeof(VkImageAspectFlagBits));
 }
 
 void unmarshal_VkBindImagePlaneMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImagePlaneMemoryInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageAspectFlagBits*)&forUnmarshaling->planeAspect, sizeof(VkImageAspectFlagBits));
 }
 
 void marshal_VkImagePlaneMemoryRequirementsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageAspectFlagBits*)&forMarshaling->planeAspect, sizeof(VkImageAspectFlagBits));
 }
 
 void unmarshal_VkImagePlaneMemoryRequirementsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImagePlaneMemoryRequirementsInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageAspectFlagBits*)&forUnmarshaling->planeAspect, sizeof(VkImageAspectFlagBits));
 }
 
 void marshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->samplerYcbcrConversion, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSamplerYcbcrConversionFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->samplerYcbcrConversion, sizeof(VkBool32));
 }
 
 void marshal_VkSamplerYcbcrConversionImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->combinedImageSamplerDescriptorCount, sizeof(uint32_t));
 }
 
 void unmarshal_VkSamplerYcbcrConversionImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerYcbcrConversionImageFormatProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->combinedImageSamplerDescriptorCount, sizeof(uint32_t));
 }
 
 void marshal_VkDescriptorUpdateTemplateEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->dstBinding, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->dstArrayElement, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->descriptorCount, sizeof(uint32_t));
@@ -5106,8 +6506,10 @@
 
 void unmarshal_VkDescriptorUpdateTemplateEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorUpdateTemplateEntry* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->dstBinding, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->dstArrayElement, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->descriptorCount, sizeof(uint32_t));
@@ -5118,17 +6520,23 @@
 
 void marshal_VkDescriptorUpdateTemplateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDescriptorUpdateTemplateCreateFlags*)&forMarshaling->flags, sizeof(VkDescriptorUpdateTemplateCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->descriptorUpdateEntryCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->descriptorUpdateEntryCount; ++i)
         {
-            marshal_VkDescriptorUpdateTemplateEntry(vkStream, (const VkDescriptorUpdateTemplateEntry*)(forMarshaling->pDescriptorUpdateEntries + i));
+            marshal_VkDescriptorUpdateTemplateEntry(vkStream, rootType, (const VkDescriptorUpdateTemplateEntry*)(forMarshaling->pDescriptorUpdateEntries + i));
         }
     }
     vkStream->write((VkDescriptorUpdateTemplateType*)&forMarshaling->templateType, sizeof(VkDescriptorUpdateTemplateType));
@@ -5144,17 +6552,23 @@
 
 void unmarshal_VkDescriptorUpdateTemplateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorUpdateTemplateCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDescriptorUpdateTemplateCreateFlags*)&forUnmarshaling->flags, sizeof(VkDescriptorUpdateTemplateCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->descriptorUpdateEntryCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->descriptorUpdateEntryCount; ++i)
         {
-            unmarshal_VkDescriptorUpdateTemplateEntry(vkStream, (VkDescriptorUpdateTemplateEntry*)(forUnmarshaling->pDescriptorUpdateEntries + i));
+            unmarshal_VkDescriptorUpdateTemplateEntry(vkStream, rootType, (VkDescriptorUpdateTemplateEntry*)(forUnmarshaling->pDescriptorUpdateEntries + i));
         }
     }
     vkStream->read((VkDescriptorUpdateTemplateType*)&forUnmarshaling->templateType, sizeof(VkDescriptorUpdateTemplateType));
@@ -5170,8 +6584,10 @@
 
 void marshal_VkExternalMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkExternalMemoryFeatureFlags*)&forMarshaling->externalMemoryFeatures, sizeof(VkExternalMemoryFeatureFlags));
     vkStream->write((VkExternalMemoryHandleTypeFlags*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
     vkStream->write((VkExternalMemoryHandleTypeFlags*)&forMarshaling->compatibleHandleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
@@ -5179,8 +6595,10 @@
 
 void unmarshal_VkExternalMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkExternalMemoryFeatureFlags*)&forUnmarshaling->externalMemoryFeatures, sizeof(VkExternalMemoryFeatureFlags));
     vkStream->read((VkExternalMemoryHandleTypeFlags*)&forUnmarshaling->exportFromImportedHandleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
     vkStream->read((VkExternalMemoryHandleTypeFlags*)&forUnmarshaling->compatibleHandleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
@@ -5188,46 +6606,76 @@
 
 void marshal_VkPhysicalDeviceExternalImageFormatInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
 }
 
 void unmarshal_VkPhysicalDeviceExternalImageFormatInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalImageFormatInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
 }
 
 void marshal_VkExternalImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkExternalMemoryProperties(vkStream, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExternalMemoryProperties(vkStream, rootType, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties));
 }
 
 void unmarshal_VkExternalImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalImageFormatProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkExternalMemoryProperties(vkStream, (VkExternalMemoryProperties*)(&forUnmarshaling->externalMemoryProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExternalMemoryProperties(vkStream, rootType, (VkExternalMemoryProperties*)(&forUnmarshaling->externalMemoryProperties));
 }
 
 void marshal_VkPhysicalDeviceExternalBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBufferCreateFlags*)&forMarshaling->flags, sizeof(VkBufferCreateFlags));
     vkStream->write((VkBufferUsageFlags*)&forMarshaling->usage, sizeof(VkBufferUsageFlags));
     vkStream->write((VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
@@ -5235,10 +6683,16 @@
 
 void unmarshal_VkPhysicalDeviceExternalBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalBufferInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBufferCreateFlags*)&forUnmarshaling->flags, sizeof(VkBufferCreateFlags));
     vkStream->read((VkBufferUsageFlags*)&forUnmarshaling->usage, sizeof(VkBufferUsageFlags));
     vkStream->read((VkExternalMemoryHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
@@ -5246,28 +6700,46 @@
 
 void marshal_VkExternalBufferProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalBufferProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkExternalMemoryProperties(vkStream, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExternalMemoryProperties(vkStream, rootType, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties));
 }
 
 void unmarshal_VkExternalBufferProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalBufferProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkExternalMemoryProperties(vkStream, (VkExternalMemoryProperties*)(&forUnmarshaling->externalMemoryProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExternalMemoryProperties(vkStream, rootType, (VkExternalMemoryProperties*)(&forUnmarshaling->externalMemoryProperties));
 }
 
 void marshal_VkPhysicalDeviceIDProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint8_t*)forMarshaling->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->write((uint8_t*)forMarshaling->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->write((uint8_t*)forMarshaling->deviceLUID, VK_LUID_SIZE * sizeof(uint8_t));
@@ -5277,10 +6749,16 @@
 
 void unmarshal_VkPhysicalDeviceIDProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceIDProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint8_t*)forUnmarshaling->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->read((uint8_t*)forUnmarshaling->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->read((uint8_t*)forUnmarshaling->deviceLUID, VK_LUID_SIZE * sizeof(uint8_t));
@@ -5290,82 +6768,136 @@
 
 void marshal_VkExternalMemoryImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
 }
 
 void unmarshal_VkExternalMemoryImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryImageCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlags*)&forUnmarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
 }
 
 void marshal_VkExternalMemoryBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
 }
 
 void unmarshal_VkExternalMemoryBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryBufferCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlags*)&forUnmarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
 }
 
 void marshal_VkExportMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
 }
 
 void unmarshal_VkExportMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlags*)&forUnmarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
 }
 
 void marshal_VkPhysicalDeviceExternalFenceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalFenceHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalFenceHandleTypeFlagBits));
 }
 
 void unmarshal_VkPhysicalDeviceExternalFenceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalFenceInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalFenceHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalFenceHandleTypeFlagBits));
 }
 
 void marshal_VkExternalFenceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFenceProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalFenceHandleTypeFlags*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalFenceHandleTypeFlags));
     vkStream->write((VkExternalFenceHandleTypeFlags*)&forMarshaling->compatibleHandleTypes, sizeof(VkExternalFenceHandleTypeFlags));
     vkStream->write((VkExternalFenceFeatureFlags*)&forMarshaling->externalFenceFeatures, sizeof(VkExternalFenceFeatureFlags));
@@ -5373,10 +6905,16 @@
 
 void unmarshal_VkExternalFenceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalFenceProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalFenceHandleTypeFlags*)&forUnmarshaling->exportFromImportedHandleTypes, sizeof(VkExternalFenceHandleTypeFlags));
     vkStream->read((VkExternalFenceHandleTypeFlags*)&forUnmarshaling->compatibleHandleTypes, sizeof(VkExternalFenceHandleTypeFlags));
     vkStream->read((VkExternalFenceFeatureFlags*)&forUnmarshaling->externalFenceFeatures, sizeof(VkExternalFenceFeatureFlags));
@@ -5384,64 +6922,106 @@
 
 void marshal_VkExportFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalFenceHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalFenceHandleTypeFlags));
 }
 
 void unmarshal_VkExportFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportFenceCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalFenceHandleTypeFlags*)&forUnmarshaling->handleTypes, sizeof(VkExternalFenceHandleTypeFlags));
 }
 
 void marshal_VkExportSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalSemaphoreHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
 }
 
 void unmarshal_VkExportSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportSemaphoreCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalSemaphoreHandleTypeFlags*)&forUnmarshaling->handleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
 }
 
 void marshal_VkPhysicalDeviceExternalSemaphoreInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalSemaphoreHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalSemaphoreHandleTypeFlagBits));
 }
 
 void unmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalSemaphoreInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalSemaphoreHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalSemaphoreHandleTypeFlagBits));
 }
 
 void marshal_VkExternalSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalSemaphoreHandleTypeFlags*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
     vkStream->write((VkExternalSemaphoreHandleTypeFlags*)&forMarshaling->compatibleHandleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
     vkStream->write((VkExternalSemaphoreFeatureFlags*)&forMarshaling->externalSemaphoreFeatures, sizeof(VkExternalSemaphoreFeatureFlags));
@@ -5449,10 +7029,16 @@
 
 void unmarshal_VkExternalSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalSemaphoreProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalSemaphoreHandleTypeFlags*)&forUnmarshaling->exportFromImportedHandleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
     vkStream->read((VkExternalSemaphoreHandleTypeFlags*)&forUnmarshaling->compatibleHandleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
     vkStream->read((VkExternalSemaphoreFeatureFlags*)&forUnmarshaling->externalSemaphoreFeatures, sizeof(VkExternalSemaphoreFeatureFlags));
@@ -5460,57 +7046,93 @@
 
 void marshal_VkPhysicalDeviceMaintenance3Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxPerSetDescriptors, sizeof(uint32_t));
     vkStream->write((VkDeviceSize*)&forMarshaling->maxMemoryAllocationSize, sizeof(VkDeviceSize));
 }
 
 void unmarshal_VkPhysicalDeviceMaintenance3Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMaintenance3Properties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxPerSetDescriptors, sizeof(uint32_t));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->maxMemoryAllocationSize, sizeof(VkDeviceSize));
 }
 
 void marshal_VkDescriptorSetLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->supported, sizeof(VkBool32));
 }
 
 void unmarshal_VkDescriptorSetLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutSupport* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->supported, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceShaderDrawParametersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderDrawParameters, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderDrawParametersFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderDrawParameters, sizeof(VkBool32));
 }
 
@@ -5518,10 +7140,16 @@
 #ifdef VK_VERSION_1_2
 void marshal_VkPhysicalDeviceVulkan11Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->storageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->uniformAndStorageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->storagePushConstant16, sizeof(VkBool32));
@@ -5538,10 +7166,16 @@
 
 void unmarshal_VkPhysicalDeviceVulkan11Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan11Features* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->storageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->uniformAndStorageBuffer16BitAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->storagePushConstant16, sizeof(VkBool32));
@@ -5558,10 +7192,16 @@
 
 void marshal_VkPhysicalDeviceVulkan11Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint8_t*)forMarshaling->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->write((uint8_t*)forMarshaling->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->write((uint8_t*)forMarshaling->deviceLUID, VK_LUID_SIZE * sizeof(uint8_t));
@@ -5581,10 +7221,16 @@
 
 void unmarshal_VkPhysicalDeviceVulkan11Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan11Properties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint8_t*)forUnmarshaling->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->read((uint8_t*)forUnmarshaling->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
     vkStream->read((uint8_t*)forUnmarshaling->deviceLUID, VK_LUID_SIZE * sizeof(uint8_t));
@@ -5604,10 +7250,16 @@
 
 void marshal_VkPhysicalDeviceVulkan12Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->samplerMirrorClampToEdge, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->drawIndirectCount, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->storageBuffer8BitAccess, sizeof(VkBool32));
@@ -5659,10 +7311,16 @@
 
 void unmarshal_VkPhysicalDeviceVulkan12Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan12Features* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->samplerMirrorClampToEdge, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->drawIndirectCount, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->storageBuffer8BitAccess, sizeof(VkBool32));
@@ -5714,8 +7372,10 @@
 
 void marshal_VkConformanceVersion(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConformanceVersion* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint8_t*)&forMarshaling->major, sizeof(uint8_t));
     vkStream->write((uint8_t*)&forMarshaling->minor, sizeof(uint8_t));
     vkStream->write((uint8_t*)&forMarshaling->subminor, sizeof(uint8_t));
@@ -5724,8 +7384,10 @@
 
 void unmarshal_VkConformanceVersion(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkConformanceVersion* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint8_t*)&forUnmarshaling->major, sizeof(uint8_t));
     vkStream->read((uint8_t*)&forUnmarshaling->minor, sizeof(uint8_t));
     vkStream->read((uint8_t*)&forUnmarshaling->subminor, sizeof(uint8_t));
@@ -5734,14 +7396,20 @@
 
 void marshal_VkPhysicalDeviceVulkan12Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDriverId*)&forMarshaling->driverID, sizeof(VkDriverId));
     vkStream->write((char*)forMarshaling->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
-    marshal_VkConformanceVersion(vkStream, (VkConformanceVersion*)(&forMarshaling->conformanceVersion));
+    marshal_VkConformanceVersion(vkStream, rootType, (VkConformanceVersion*)(&forMarshaling->conformanceVersion));
     vkStream->write((VkShaderFloatControlsIndependence*)&forMarshaling->denormBehaviorIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->write((VkShaderFloatControlsIndependence*)&forMarshaling->roundingModeIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->write((VkBool32*)&forMarshaling->shaderSignedZeroInfNanPreserveFloat16, sizeof(VkBool32));
@@ -5794,14 +7462,20 @@
 
 void unmarshal_VkPhysicalDeviceVulkan12Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan12Properties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDriverId*)&forUnmarshaling->driverID, sizeof(VkDriverId));
     vkStream->read((char*)forUnmarshaling->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
-    unmarshal_VkConformanceVersion(vkStream, (VkConformanceVersion*)(&forUnmarshaling->conformanceVersion));
+    unmarshal_VkConformanceVersion(vkStream, rootType, (VkConformanceVersion*)(&forUnmarshaling->conformanceVersion));
     vkStream->read((VkShaderFloatControlsIndependence*)&forUnmarshaling->denormBehaviorIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->read((VkShaderFloatControlsIndependence*)&forUnmarshaling->roundingModeIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSignedZeroInfNanPreserveFloat16, sizeof(VkBool32));
@@ -5854,30 +7528,48 @@
 
 void marshal_VkImageFormatListCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->viewFormatCount, sizeof(uint32_t));
     vkStream->write((const VkFormat*)forMarshaling->pViewFormats, forMarshaling->viewFormatCount * sizeof(const VkFormat));
 }
 
 void unmarshal_VkImageFormatListCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageFormatListCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->viewFormatCount, sizeof(uint32_t));
     vkStream->read((VkFormat*)forUnmarshaling->pViewFormats, forUnmarshaling->viewFormatCount * sizeof(const VkFormat));
 }
 
 void marshal_VkAttachmentDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAttachmentDescriptionFlags*)&forMarshaling->flags, sizeof(VkAttachmentDescriptionFlags));
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -5891,10 +7583,16 @@
 
 void unmarshal_VkAttachmentDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentDescription2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAttachmentDescriptionFlags*)&forUnmarshaling->flags, sizeof(VkAttachmentDescriptionFlags));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->samples, sizeof(VkSampleCountFlagBits));
@@ -5908,10 +7606,16 @@
 
 void marshal_VkAttachmentReference2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->attachment, sizeof(uint32_t));
     vkStream->write((VkImageLayout*)&forMarshaling->layout, sizeof(VkImageLayout));
     vkStream->write((VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
@@ -5919,10 +7623,16 @@
 
 void unmarshal_VkAttachmentReference2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentReference2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->attachment, sizeof(uint32_t));
     vkStream->read((VkImageLayout*)&forUnmarshaling->layout, sizeof(VkImageLayout));
     vkStream->read((VkImageAspectFlags*)&forUnmarshaling->aspectMask, sizeof(VkImageAspectFlags));
@@ -5930,10 +7640,16 @@
 
 void marshal_VkSubpassDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSubpassDescriptionFlags*)&forMarshaling->flags, sizeof(VkSubpassDescriptionFlags));
     vkStream->write((VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     vkStream->write((uint32_t*)&forMarshaling->viewMask, sizeof(uint32_t));
@@ -5942,7 +7658,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->inputAttachmentCount; ++i)
         {
-            marshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pInputAttachments + i));
+            marshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pInputAttachments + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->colorAttachmentCount, sizeof(uint32_t));
@@ -5950,7 +7666,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
         {
-            marshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pColorAttachments + i));
+            marshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pColorAttachments + i));
         }
     }
     // WARNING PTR CHECK
@@ -5962,7 +7678,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
             {
-                marshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pResolveAttachments + i));
+                marshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pResolveAttachments + i));
             }
         }
     }
@@ -5971,7 +7687,7 @@
     vkStream->putBe64(cgen_var_1);
     if (forMarshaling->pDepthStencilAttachment)
     {
-        marshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilAttachment));
+        marshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilAttachment));
     }
     vkStream->write((uint32_t*)&forMarshaling->preserveAttachmentCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pPreserveAttachments, forMarshaling->preserveAttachmentCount * sizeof(const uint32_t));
@@ -5979,10 +7695,16 @@
 
 void unmarshal_VkSubpassDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDescription2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSubpassDescriptionFlags*)&forUnmarshaling->flags, sizeof(VkSubpassDescriptionFlags));
     vkStream->read((VkPipelineBindPoint*)&forUnmarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     vkStream->read((uint32_t*)&forUnmarshaling->viewMask, sizeof(uint32_t));
@@ -5991,7 +7713,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->inputAttachmentCount; ++i)
         {
-            unmarshal_VkAttachmentReference2(vkStream, (VkAttachmentReference2*)(forUnmarshaling->pInputAttachments + i));
+            unmarshal_VkAttachmentReference2(vkStream, rootType, (VkAttachmentReference2*)(forUnmarshaling->pInputAttachments + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->colorAttachmentCount, sizeof(uint32_t));
@@ -5999,7 +7721,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->colorAttachmentCount; ++i)
         {
-            unmarshal_VkAttachmentReference2(vkStream, (VkAttachmentReference2*)(forUnmarshaling->pColorAttachments + i));
+            unmarshal_VkAttachmentReference2(vkStream, rootType, (VkAttachmentReference2*)(forUnmarshaling->pColorAttachments + i));
         }
     }
     // WARNING PTR CHECK
@@ -6015,7 +7737,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->colorAttachmentCount; ++i)
             {
-                unmarshal_VkAttachmentReference2(vkStream, (VkAttachmentReference2*)(forUnmarshaling->pResolveAttachments + i));
+                unmarshal_VkAttachmentReference2(vkStream, rootType, (VkAttachmentReference2*)(forUnmarshaling->pResolveAttachments + i));
             }
         }
     }
@@ -6028,7 +7750,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pDepthStencilAttachment inconsistent between guest and host\n");
         }
-        unmarshal_VkAttachmentReference2(vkStream, (VkAttachmentReference2*)(forUnmarshaling->pDepthStencilAttachment));
+        unmarshal_VkAttachmentReference2(vkStream, rootType, (VkAttachmentReference2*)(forUnmarshaling->pDepthStencilAttachment));
     }
     vkStream->read((uint32_t*)&forUnmarshaling->preserveAttachmentCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pPreserveAttachments, forUnmarshaling->preserveAttachmentCount * sizeof(const uint32_t));
@@ -6036,10 +7758,16 @@
 
 void marshal_VkSubpassDependency2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->srcSubpass, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->dstSubpass, sizeof(uint32_t));
     vkStream->write((VkPipelineStageFlags*)&forMarshaling->srcStageMask, sizeof(VkPipelineStageFlags));
@@ -6052,10 +7780,16 @@
 
 void unmarshal_VkSubpassDependency2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDependency2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->srcSubpass, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->dstSubpass, sizeof(uint32_t));
     vkStream->read((VkPipelineStageFlags*)&forUnmarshaling->srcStageMask, sizeof(VkPipelineStageFlags));
@@ -6068,17 +7802,23 @@
 
 void marshal_VkRenderPassCreateInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkRenderPassCreateFlags*)&forMarshaling->flags, sizeof(VkRenderPassCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentCount; ++i)
         {
-            marshal_VkAttachmentDescription2(vkStream, (const VkAttachmentDescription2*)(forMarshaling->pAttachments + i));
+            marshal_VkAttachmentDescription2(vkStream, rootType, (const VkAttachmentDescription2*)(forMarshaling->pAttachments + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->subpassCount, sizeof(uint32_t));
@@ -6086,7 +7826,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->subpassCount; ++i)
         {
-            marshal_VkSubpassDescription2(vkStream, (const VkSubpassDescription2*)(forMarshaling->pSubpasses + i));
+            marshal_VkSubpassDescription2(vkStream, rootType, (const VkSubpassDescription2*)(forMarshaling->pSubpasses + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->dependencyCount, sizeof(uint32_t));
@@ -6094,7 +7834,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->dependencyCount; ++i)
         {
-            marshal_VkSubpassDependency2(vkStream, (const VkSubpassDependency2*)(forMarshaling->pDependencies + i));
+            marshal_VkSubpassDependency2(vkStream, rootType, (const VkSubpassDependency2*)(forMarshaling->pDependencies + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->correlatedViewMaskCount, sizeof(uint32_t));
@@ -6103,17 +7843,23 @@
 
 void unmarshal_VkRenderPassCreateInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassCreateInfo2* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkRenderPassCreateFlags*)&forUnmarshaling->flags, sizeof(VkRenderPassCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->attachmentCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->attachmentCount; ++i)
         {
-            unmarshal_VkAttachmentDescription2(vkStream, (VkAttachmentDescription2*)(forUnmarshaling->pAttachments + i));
+            unmarshal_VkAttachmentDescription2(vkStream, rootType, (VkAttachmentDescription2*)(forUnmarshaling->pAttachments + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->subpassCount, sizeof(uint32_t));
@@ -6121,7 +7867,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->subpassCount; ++i)
         {
-            unmarshal_VkSubpassDescription2(vkStream, (VkSubpassDescription2*)(forUnmarshaling->pSubpasses + i));
+            unmarshal_VkSubpassDescription2(vkStream, rootType, (VkSubpassDescription2*)(forUnmarshaling->pSubpasses + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->dependencyCount, sizeof(uint32_t));
@@ -6129,7 +7875,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->dependencyCount; ++i)
         {
-            unmarshal_VkSubpassDependency2(vkStream, (VkSubpassDependency2*)(forUnmarshaling->pDependencies + i));
+            unmarshal_VkSubpassDependency2(vkStream, rootType, (VkSubpassDependency2*)(forUnmarshaling->pDependencies + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->correlatedViewMaskCount, sizeof(uint32_t));
@@ -6138,44 +7884,74 @@
 
 void marshal_VkSubpassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSubpassContents*)&forMarshaling->contents, sizeof(VkSubpassContents));
 }
 
 void unmarshal_VkSubpassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassBeginInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSubpassContents*)&forUnmarshaling->contents, sizeof(VkSubpassContents));
 }
 
 void marshal_VkSubpassEndInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassEndInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
 }
 
 void unmarshal_VkSubpassEndInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassEndInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
 }
 
 void marshal_VkPhysicalDevice8BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->storageBuffer8BitAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->uniformAndStorageBuffer8BitAccess, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->storagePushConstant8, sizeof(VkBool32));
@@ -6183,10 +7959,16 @@
 
 void unmarshal_VkPhysicalDevice8BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevice8BitStorageFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->storageBuffer8BitAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->uniformAndStorageBuffer8BitAccess, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->storagePushConstant8, sizeof(VkBool32));
@@ -6194,74 +7976,116 @@
 
 void marshal_VkPhysicalDeviceDriverProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDriverId*)&forMarshaling->driverID, sizeof(VkDriverId));
     vkStream->write((char*)forMarshaling->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
-    marshal_VkConformanceVersion(vkStream, (VkConformanceVersion*)(&forMarshaling->conformanceVersion));
+    marshal_VkConformanceVersion(vkStream, rootType, (VkConformanceVersion*)(&forMarshaling->conformanceVersion));
 }
 
 void unmarshal_VkPhysicalDeviceDriverProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDriverProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDriverId*)&forUnmarshaling->driverID, sizeof(VkDriverId));
     vkStream->read((char*)forUnmarshaling->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
-    unmarshal_VkConformanceVersion(vkStream, (VkConformanceVersion*)(&forUnmarshaling->conformanceVersion));
+    unmarshal_VkConformanceVersion(vkStream, rootType, (VkConformanceVersion*)(&forUnmarshaling->conformanceVersion));
 }
 
 void marshal_VkPhysicalDeviceShaderAtomicInt64Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderBufferInt64Atomics, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderSharedInt64Atomics, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderAtomicInt64Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderAtomicInt64Features* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderBufferInt64Atomics, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSharedInt64Atomics, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceShaderFloat16Int8Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderFloat16, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderInt8, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderFloat16Int8Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderFloat16Int8Features* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderFloat16, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderInt8, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceFloatControlsProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkShaderFloatControlsIndependence*)&forMarshaling->denormBehaviorIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->write((VkShaderFloatControlsIndependence*)&forMarshaling->roundingModeIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->write((VkBool32*)&forMarshaling->shaderSignedZeroInfNanPreserveFloat16, sizeof(VkBool32));
@@ -6283,10 +8107,16 @@
 
 void unmarshal_VkPhysicalDeviceFloatControlsProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFloatControlsProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkShaderFloatControlsIndependence*)&forUnmarshaling->denormBehaviorIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->read((VkShaderFloatControlsIndependence*)&forUnmarshaling->roundingModeIndependence, sizeof(VkShaderFloatControlsIndependence));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSignedZeroInfNanPreserveFloat16, sizeof(VkBool32));
@@ -6308,10 +8138,16 @@
 
 void marshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->bindingCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pBindingFlags;
@@ -6324,10 +8160,16 @@
 
 void unmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutBindingFlagsCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->bindingCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkDescriptorBindingFlags* check_pBindingFlags;
@@ -6344,10 +8186,16 @@
 
 void marshal_VkPhysicalDeviceDescriptorIndexingFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderInputAttachmentArrayDynamicIndexing, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderUniformTexelBufferArrayDynamicIndexing, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderStorageTexelBufferArrayDynamicIndexing, sizeof(VkBool32));
@@ -6372,10 +8220,16 @@
 
 void unmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDescriptorIndexingFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderInputAttachmentArrayDynamicIndexing, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderUniformTexelBufferArrayDynamicIndexing, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderStorageTexelBufferArrayDynamicIndexing, sizeof(VkBool32));
@@ -6400,10 +8254,16 @@
 
 void marshal_VkPhysicalDeviceDescriptorIndexingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxUpdateAfterBindDescriptorsInAllPools, sizeof(uint32_t));
     vkStream->write((VkBool32*)&forMarshaling->shaderUniformBufferArrayNonUniformIndexingNative, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderSampledImageArrayNonUniformIndexingNative, sizeof(VkBool32));
@@ -6431,10 +8291,16 @@
 
 void unmarshal_VkPhysicalDeviceDescriptorIndexingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDescriptorIndexingProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxUpdateAfterBindDescriptorsInAllPools, sizeof(uint32_t));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderUniformBufferArrayNonUniformIndexingNative, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSampledImageArrayNonUniformIndexingNative, sizeof(VkBool32));
@@ -6462,48 +8328,78 @@
 
 void marshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->descriptorSetCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pDescriptorCounts, forMarshaling->descriptorSetCount * sizeof(const uint32_t));
 }
 
 void unmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetVariableDescriptorCountAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->descriptorSetCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pDescriptorCounts, forUnmarshaling->descriptorSetCount * sizeof(const uint32_t));
 }
 
 void marshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxVariableDescriptorCount, sizeof(uint32_t));
 }
 
 void unmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetVariableDescriptorCountLayoutSupport* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxVariableDescriptorCount, sizeof(uint32_t));
 }
 
 void marshal_VkSubpassDescriptionDepthStencilResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkResolveModeFlagBits*)&forMarshaling->depthResolveMode, sizeof(VkResolveModeFlagBits));
     vkStream->write((VkResolveModeFlagBits*)&forMarshaling->stencilResolveMode, sizeof(VkResolveModeFlagBits));
     // WARNING PTR CHECK
@@ -6511,16 +8407,22 @@
     vkStream->putBe64(cgen_var_0);
     if (forMarshaling->pDepthStencilResolveAttachment)
     {
-        marshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilResolveAttachment));
+        marshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilResolveAttachment));
     }
 }
 
 void unmarshal_VkSubpassDescriptionDepthStencilResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDescriptionDepthStencilResolve* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkResolveModeFlagBits*)&forUnmarshaling->depthResolveMode, sizeof(VkResolveModeFlagBits));
     vkStream->read((VkResolveModeFlagBits*)&forUnmarshaling->stencilResolveMode, sizeof(VkResolveModeFlagBits));
     // WARNING PTR CHECK
@@ -6532,16 +8434,22 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pDepthStencilResolveAttachment inconsistent between guest and host\n");
         }
-        unmarshal_VkAttachmentReference2(vkStream, (VkAttachmentReference2*)(forUnmarshaling->pDepthStencilResolveAttachment));
+        unmarshal_VkAttachmentReference2(vkStream, rootType, (VkAttachmentReference2*)(forUnmarshaling->pDepthStencilResolveAttachment));
     }
 }
 
 void marshal_VkPhysicalDeviceDepthStencilResolveProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkResolveModeFlags*)&forMarshaling->supportedDepthResolveModes, sizeof(VkResolveModeFlags));
     vkStream->write((VkResolveModeFlags*)&forMarshaling->supportedStencilResolveModes, sizeof(VkResolveModeFlags));
     vkStream->write((VkBool32*)&forMarshaling->independentResolveNone, sizeof(VkBool32));
@@ -6550,10 +8458,16 @@
 
 void unmarshal_VkPhysicalDeviceDepthStencilResolveProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDepthStencilResolveProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkResolveModeFlags*)&forUnmarshaling->supportedDepthResolveModes, sizeof(VkResolveModeFlags));
     vkStream->read((VkResolveModeFlags*)&forUnmarshaling->supportedStencilResolveModes, sizeof(VkResolveModeFlags));
     vkStream->read((VkBool32*)&forUnmarshaling->independentResolveNone, sizeof(VkBool32));
@@ -6562,84 +8476,138 @@
 
 void marshal_VkPhysicalDeviceScalarBlockLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->scalarBlockLayout, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceScalarBlockLayoutFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->scalarBlockLayout, sizeof(VkBool32));
 }
 
 void marshal_VkImageStencilUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageUsageFlags*)&forMarshaling->stencilUsage, sizeof(VkImageUsageFlags));
 }
 
 void unmarshal_VkImageStencilUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageStencilUsageCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageUsageFlags*)&forUnmarshaling->stencilUsage, sizeof(VkImageUsageFlags));
 }
 
 void marshal_VkSamplerReductionModeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSamplerReductionMode*)&forMarshaling->reductionMode, sizeof(VkSamplerReductionMode));
 }
 
 void unmarshal_VkSamplerReductionModeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerReductionModeCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSamplerReductionMode*)&forUnmarshaling->reductionMode, sizeof(VkSamplerReductionMode));
 }
 
 void marshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->filterMinmaxSingleComponentFormats, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->filterMinmaxImageComponentMapping, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSamplerFilterMinmaxProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->filterMinmaxSingleComponentFormats, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->filterMinmaxImageComponentMapping, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceVulkanMemoryModelFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->vulkanMemoryModel, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->vulkanMemoryModelDeviceScope, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->vulkanMemoryModelAvailabilityVisibilityChains, sizeof(VkBool32));
@@ -6647,10 +8615,16 @@
 
 void unmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkanMemoryModelFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->vulkanMemoryModel, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->vulkanMemoryModelDeviceScope, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->vulkanMemoryModelAvailabilityVisibilityChains, sizeof(VkBool32));
@@ -6658,28 +8632,46 @@
 
 void marshal_VkPhysicalDeviceImagelessFramebufferFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->imagelessFramebuffer, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImagelessFramebufferFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->imagelessFramebuffer, sizeof(VkBool32));
 }
 
 void marshal_VkFramebufferAttachmentImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageCreateFlags*)&forMarshaling->flags, sizeof(VkImageCreateFlags));
     vkStream->write((VkImageUsageFlags*)&forMarshaling->usage, sizeof(VkImageUsageFlags));
     vkStream->write((uint32_t*)&forMarshaling->width, sizeof(uint32_t));
@@ -6691,10 +8683,16 @@
 
 void unmarshal_VkFramebufferAttachmentImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferAttachmentImageInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageCreateFlags*)&forUnmarshaling->flags, sizeof(VkImageCreateFlags));
     vkStream->read((VkImageUsageFlags*)&forUnmarshaling->usage, sizeof(VkImageUsageFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->width, sizeof(uint32_t));
@@ -6706,42 +8704,60 @@
 
 void marshal_VkFramebufferAttachmentsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->attachmentImageInfoCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentImageInfoCount; ++i)
         {
-            marshal_VkFramebufferAttachmentImageInfo(vkStream, (const VkFramebufferAttachmentImageInfo*)(forMarshaling->pAttachmentImageInfos + i));
+            marshal_VkFramebufferAttachmentImageInfo(vkStream, rootType, (const VkFramebufferAttachmentImageInfo*)(forMarshaling->pAttachmentImageInfos + i));
         }
     }
 }
 
 void unmarshal_VkFramebufferAttachmentsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferAttachmentsCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->attachmentImageInfoCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->attachmentImageInfoCount; ++i)
         {
-            unmarshal_VkFramebufferAttachmentImageInfo(vkStream, (VkFramebufferAttachmentImageInfo*)(forUnmarshaling->pAttachmentImageInfos + i));
+            unmarshal_VkFramebufferAttachmentImageInfo(vkStream, rootType, (VkFramebufferAttachmentImageInfo*)(forUnmarshaling->pAttachmentImageInfos + i));
         }
     }
 }
 
 void marshal_VkRenderPassAttachmentBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
     if (forMarshaling->attachmentCount)
     {
@@ -6754,10 +8770,16 @@
 
 void unmarshal_VkRenderPassAttachmentBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassAttachmentBeginInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->attachmentCount, sizeof(uint32_t));
     if (forUnmarshaling->attachmentCount)
     {
@@ -6770,176 +8792,290 @@
 
 void marshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->uniformBufferStandardLayout, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceUniformBufferStandardLayoutFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->uniformBufferStandardLayout, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderSubgroupExtendedTypes, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSubgroupExtendedTypes, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->separateDepthStencilLayouts, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->separateDepthStencilLayouts, sizeof(VkBool32));
 }
 
 void marshal_VkAttachmentReferenceStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageLayout*)&forMarshaling->stencilLayout, sizeof(VkImageLayout));
 }
 
 void unmarshal_VkAttachmentReferenceStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentReferenceStencilLayout* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageLayout*)&forUnmarshaling->stencilLayout, sizeof(VkImageLayout));
 }
 
 void marshal_VkAttachmentDescriptionStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageLayout*)&forMarshaling->stencilInitialLayout, sizeof(VkImageLayout));
     vkStream->write((VkImageLayout*)&forMarshaling->stencilFinalLayout, sizeof(VkImageLayout));
 }
 
 void unmarshal_VkAttachmentDescriptionStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentDescriptionStencilLayout* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageLayout*)&forUnmarshaling->stencilInitialLayout, sizeof(VkImageLayout));
     vkStream->read((VkImageLayout*)&forUnmarshaling->stencilFinalLayout, sizeof(VkImageLayout));
 }
 
 void marshal_VkPhysicalDeviceHostQueryResetFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->hostQueryReset, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceHostQueryResetFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceHostQueryResetFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->hostQueryReset, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceTimelineSemaphoreFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->timelineSemaphore, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTimelineSemaphoreFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->timelineSemaphore, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceTimelineSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->maxTimelineSemaphoreValueDifference, sizeof(uint64_t));
 }
 
 void unmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTimelineSemaphoreProperties* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->maxTimelineSemaphoreValueDifference, sizeof(uint64_t));
 }
 
 void marshal_VkSemaphoreTypeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSemaphoreType*)&forMarshaling->semaphoreType, sizeof(VkSemaphoreType));
     vkStream->write((uint64_t*)&forMarshaling->initialValue, sizeof(uint64_t));
 }
 
 void unmarshal_VkSemaphoreTypeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreTypeCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSemaphoreType*)&forUnmarshaling->semaphoreType, sizeof(VkSemaphoreType));
     vkStream->read((uint64_t*)&forUnmarshaling->initialValue, sizeof(uint64_t));
 }
 
 void marshal_VkTimelineSemaphoreSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->waitSemaphoreValueCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pWaitSemaphoreValues;
@@ -6960,10 +9096,16 @@
 
 void unmarshal_VkTimelineSemaphoreSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTimelineSemaphoreSubmitInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->waitSemaphoreValueCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const uint64_t* check_pWaitSemaphoreValues;
@@ -6992,10 +9134,16 @@
 
 void marshal_VkSemaphoreWaitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSemaphoreWaitFlags*)&forMarshaling->flags, sizeof(VkSemaphoreWaitFlags));
     vkStream->write((uint32_t*)&forMarshaling->semaphoreCount, sizeof(uint32_t));
     if (forMarshaling->semaphoreCount)
@@ -7010,10 +9158,16 @@
 
 void unmarshal_VkSemaphoreWaitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreWaitInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSemaphoreWaitFlags*)&forUnmarshaling->flags, sizeof(VkSemaphoreWaitFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->semaphoreCount, sizeof(uint32_t));
     if (forUnmarshaling->semaphoreCount)
@@ -7028,10 +9182,16 @@
 
 void marshal_VkSemaphoreSignalInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSemaphore_u64(&forMarshaling->semaphore, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7040,10 +9200,16 @@
 
 void unmarshal_VkSemaphoreSignalInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreSignalInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_0, (VkSemaphore*)&forUnmarshaling->semaphore, 1);
@@ -7052,10 +9218,16 @@
 
 void marshal_VkPhysicalDeviceBufferDeviceAddressFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->bufferDeviceAddress, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->bufferDeviceAddressCaptureReplay, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->bufferDeviceAddressMultiDevice, sizeof(VkBool32));
@@ -7063,10 +9235,16 @@
 
 void unmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBufferDeviceAddressFeatures* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->bufferDeviceAddress, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->bufferDeviceAddressCaptureReplay, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->bufferDeviceAddressMultiDevice, sizeof(VkBool32));
@@ -7074,10 +9252,16 @@
 
 void marshal_VkBufferDeviceAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7085,10 +9269,16 @@
 
 void unmarshal_VkBufferDeviceAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferDeviceAddressInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -7096,46 +9286,76 @@
 
 void marshal_VkBufferOpaqueCaptureAddressCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->opaqueCaptureAddress, sizeof(uint64_t));
 }
 
 void unmarshal_VkBufferOpaqueCaptureAddressCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferOpaqueCaptureAddressCreateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->opaqueCaptureAddress, sizeof(uint64_t));
 }
 
 void marshal_VkMemoryOpaqueCaptureAddressAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->opaqueCaptureAddress, sizeof(uint64_t));
 }
 
 void unmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryOpaqueCaptureAddressAllocateInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->opaqueCaptureAddress, sizeof(uint64_t));
 }
 
 void marshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&forMarshaling->memory, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7143,10 +9363,16 @@
 
 void unmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceMemoryOpaqueCaptureAddressInfo* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_0, (VkDeviceMemory*)&forUnmarshaling->memory, 1);
@@ -7156,13 +9382,15 @@
 #ifdef VK_KHR_surface
 void marshal_VkSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->minImageCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxImageCount, sizeof(uint32_t));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->currentExtent));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minImageExtent));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxImageExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->currentExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minImageExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxImageExtent));
     vkStream->write((uint32_t*)&forMarshaling->maxImageArrayLayers, sizeof(uint32_t));
     vkStream->write((VkSurfaceTransformFlagsKHR*)&forMarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     vkStream->write((VkSurfaceTransformFlagBitsKHR*)&forMarshaling->currentTransform, sizeof(VkSurfaceTransformFlagBitsKHR));
@@ -7172,13 +9400,15 @@
 
 void unmarshal_VkSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilitiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->minImageCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageCount, sizeof(uint32_t));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->currentExtent));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->minImageExtent));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxImageExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->currentExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->minImageExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxImageExtent));
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageArrayLayers, sizeof(uint32_t));
     vkStream->read((VkSurfaceTransformFlagsKHR*)&forUnmarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     vkStream->read((VkSurfaceTransformFlagBitsKHR*)&forUnmarshaling->currentTransform, sizeof(VkSurfaceTransformFlagBitsKHR));
@@ -7188,16 +9418,20 @@
 
 void marshal_VkSurfaceFormatKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((VkColorSpaceKHR*)&forMarshaling->colorSpace, sizeof(VkColorSpaceKHR));
 }
 
 void unmarshal_VkSurfaceFormatKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFormatKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((VkColorSpaceKHR*)&forUnmarshaling->colorSpace, sizeof(VkColorSpaceKHR));
 }
@@ -7206,10 +9440,16 @@
 #ifdef VK_KHR_swapchain
 void marshal_VkSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSwapchainCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkSwapchainCreateFlagsKHR));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&forMarshaling->surface, &cgen_var_0, 1);
@@ -7217,7 +9457,7 @@
     vkStream->write((uint32_t*)&forMarshaling->minImageCount, sizeof(uint32_t));
     vkStream->write((VkFormat*)&forMarshaling->imageFormat, sizeof(VkFormat));
     vkStream->write((VkColorSpaceKHR*)&forMarshaling->imageColorSpace, sizeof(VkColorSpaceKHR));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->imageExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->imageExtent));
     vkStream->write((uint32_t*)&forMarshaling->imageArrayLayers, sizeof(uint32_t));
     vkStream->write((VkImageUsageFlags*)&forMarshaling->imageUsage, sizeof(VkImageUsageFlags));
     vkStream->write((VkSharingMode*)&forMarshaling->imageSharingMode, sizeof(VkSharingMode));
@@ -7240,10 +9480,16 @@
 
 void unmarshal_VkSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSwapchainCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSwapchainCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkSwapchainCreateFlagsKHR));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7251,7 +9497,7 @@
     vkStream->read((uint32_t*)&forUnmarshaling->minImageCount, sizeof(uint32_t));
     vkStream->read((VkFormat*)&forUnmarshaling->imageFormat, sizeof(VkFormat));
     vkStream->read((VkColorSpaceKHR*)&forUnmarshaling->imageColorSpace, sizeof(VkColorSpaceKHR));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->imageExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->imageExtent));
     vkStream->read((uint32_t*)&forUnmarshaling->imageArrayLayers, sizeof(uint32_t));
     vkStream->read((VkImageUsageFlags*)&forUnmarshaling->imageUsage, sizeof(VkImageUsageFlags));
     vkStream->read((VkSharingMode*)&forUnmarshaling->imageSharingMode, sizeof(VkSharingMode));
@@ -7278,10 +9524,16 @@
 
 void marshal_VkPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     if (forMarshaling->waitSemaphoreCount)
     {
@@ -7310,10 +9562,16 @@
 
 void unmarshal_VkPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->waitSemaphoreCount, sizeof(uint32_t));
     if (forUnmarshaling->waitSemaphoreCount)
     {
@@ -7346,10 +9604,16 @@
 
 void marshal_VkImageSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&forMarshaling->swapchain, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7357,10 +9621,16 @@
 
 void unmarshal_VkImageSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSwapchainCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSwapchainKHR(&cgen_var_0, (VkSwapchainKHR*)&forUnmarshaling->swapchain, 1);
@@ -7368,10 +9638,16 @@
 
 void marshal_VkBindImageMemorySwapchainInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&forMarshaling->swapchain, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7380,10 +9656,16 @@
 
 void unmarshal_VkBindImageMemorySwapchainInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImageMemorySwapchainInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSwapchainKHR(&cgen_var_0, (VkSwapchainKHR*)&forUnmarshaling->swapchain, 1);
@@ -7392,10 +9674,16 @@
 
 void marshal_VkAcquireNextImageInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSwapchainKHR_u64(&forMarshaling->swapchain, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7411,10 +9699,16 @@
 
 void unmarshal_VkAcquireNextImageInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAcquireNextImageInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSwapchainKHR(&cgen_var_0, (VkSwapchainKHR*)&forUnmarshaling->swapchain, 1);
@@ -7430,30 +9724,48 @@
 
 void marshal_VkDeviceGroupPresentCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)forMarshaling->presentMask, VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t));
     vkStream->write((VkDeviceGroupPresentModeFlagsKHR*)&forMarshaling->modes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
 }
 
 void unmarshal_VkDeviceGroupPresentCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupPresentCapabilitiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)forUnmarshaling->presentMask, VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t));
     vkStream->read((VkDeviceGroupPresentModeFlagsKHR*)&forUnmarshaling->modes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
 }
 
 void marshal_VkDeviceGroupPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->swapchainCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pDeviceMasks, forMarshaling->swapchainCount * sizeof(const uint32_t));
     vkStream->write((VkDeviceGroupPresentModeFlagBitsKHR*)&forMarshaling->mode, sizeof(VkDeviceGroupPresentModeFlagBitsKHR));
@@ -7461,10 +9773,16 @@
 
 void unmarshal_VkDeviceGroupPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupPresentInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->swapchainCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pDeviceMasks, forUnmarshaling->swapchainCount * sizeof(const uint32_t));
     vkStream->read((VkDeviceGroupPresentModeFlagBitsKHR*)&forUnmarshaling->mode, sizeof(VkDeviceGroupPresentModeFlagBitsKHR));
@@ -7472,19 +9790,31 @@
 
 void marshal_VkDeviceGroupSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceGroupPresentModeFlagsKHR*)&forMarshaling->modes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
 }
 
 void unmarshal_VkDeviceGroupSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupSwapchainCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceGroupPresentModeFlagsKHR*)&forUnmarshaling->modes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
 }
 
@@ -7492,94 +9822,120 @@
 #ifdef VK_KHR_display
 void marshal_VkDisplayModeParametersKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* forMarshaling)
 {
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->visibleRegion));
+    (void)rootType;
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->visibleRegion));
     vkStream->write((uint32_t*)&forMarshaling->refreshRate, sizeof(uint32_t));
 }
 
 void unmarshal_VkDisplayModeParametersKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModeParametersKHR* forUnmarshaling)
 {
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->visibleRegion));
+    (void)rootType;
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->visibleRegion));
     vkStream->read((uint32_t*)&forUnmarshaling->refreshRate, sizeof(uint32_t));
 }
 
 void marshal_VkDisplayModeCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDisplayModeCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkDisplayModeCreateFlagsKHR));
-    marshal_VkDisplayModeParametersKHR(vkStream, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters));
+    marshal_VkDisplayModeParametersKHR(vkStream, rootType, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters));
 }
 
 void unmarshal_VkDisplayModeCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModeCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDisplayModeCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkDisplayModeCreateFlagsKHR));
-    unmarshal_VkDisplayModeParametersKHR(vkStream, (VkDisplayModeParametersKHR*)(&forUnmarshaling->parameters));
+    unmarshal_VkDisplayModeParametersKHR(vkStream, rootType, (VkDisplayModeParametersKHR*)(&forUnmarshaling->parameters));
 }
 
 void marshal_VkDisplayModePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(&forMarshaling->displayMode, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
-    marshal_VkDisplayModeParametersKHR(vkStream, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters));
+    marshal_VkDisplayModeParametersKHR(vkStream, rootType, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters));
 }
 
 void unmarshal_VkDisplayModePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDisplayModeKHR(&cgen_var_0, (VkDisplayModeKHR*)&forUnmarshaling->displayMode, 1);
-    unmarshal_VkDisplayModeParametersKHR(vkStream, (VkDisplayModeParametersKHR*)(&forUnmarshaling->parameters));
+    unmarshal_VkDisplayModeParametersKHR(vkStream, rootType, (VkDisplayModeParametersKHR*)(&forUnmarshaling->parameters));
 }
 
 void marshal_VkDisplayPlaneCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDisplayPlaneAlphaFlagsKHR*)&forMarshaling->supportedAlpha, sizeof(VkDisplayPlaneAlphaFlagsKHR));
-    marshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->minSrcPosition));
-    marshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->maxSrcPosition));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minSrcExtent));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxSrcExtent));
-    marshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->minDstPosition));
-    marshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->maxDstPosition));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minDstExtent));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxDstExtent));
+    marshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->minSrcPosition));
+    marshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->maxSrcPosition));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minSrcExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxSrcExtent));
+    marshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->minDstPosition));
+    marshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->maxDstPosition));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minDstExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxDstExtent));
 }
 
 void unmarshal_VkDisplayPlaneCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneCapabilitiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDisplayPlaneAlphaFlagsKHR*)&forUnmarshaling->supportedAlpha, sizeof(VkDisplayPlaneAlphaFlagsKHR));
-    unmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forUnmarshaling->minSrcPosition));
-    unmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forUnmarshaling->maxSrcPosition));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->minSrcExtent));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxSrcExtent));
-    unmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forUnmarshaling->minDstPosition));
-    unmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forUnmarshaling->maxDstPosition));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->minDstExtent));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxDstExtent));
+    unmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forUnmarshaling->minSrcPosition));
+    unmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forUnmarshaling->maxSrcPosition));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->minSrcExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxSrcExtent));
+    unmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forUnmarshaling->minDstPosition));
+    unmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forUnmarshaling->maxDstPosition));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->minDstExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxDstExtent));
 }
 
 void marshal_VkDisplayPlanePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&forMarshaling->currentDisplay, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7588,8 +9944,10 @@
 
 void unmarshal_VkDisplayPlanePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlanePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDisplayKHR(&cgen_var_0, (VkDisplayKHR*)&forUnmarshaling->currentDisplay, 1);
@@ -7598,14 +9956,16 @@
 
 void marshal_VkDisplayPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDisplayKHR_u64(&forMarshaling->display, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->putString(forMarshaling->displayName);
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->physicalDimensions));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->physicalResolution));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->physicalDimensions));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->physicalResolution));
     vkStream->write((VkSurfaceTransformFlagsKHR*)&forMarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     vkStream->write((VkBool32*)&forMarshaling->planeReorderPossible, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->persistentContent, sizeof(VkBool32));
@@ -7613,14 +9973,16 @@
 
 void unmarshal_VkDisplayPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDisplayKHR(&cgen_var_0, (VkDisplayKHR*)&forUnmarshaling->display, 1);
     vkStream->loadStringInPlace((char**)&forUnmarshaling->displayName);
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->physicalDimensions));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->physicalResolution));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->physicalDimensions));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->physicalResolution));
     vkStream->read((VkSurfaceTransformFlagsKHR*)&forUnmarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     vkStream->read((VkBool32*)&forUnmarshaling->planeReorderPossible, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->persistentContent, sizeof(VkBool32));
@@ -7628,10 +9990,16 @@
 
 void marshal_VkDisplaySurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDisplaySurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkDisplaySurfaceCreateFlagsKHR));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(&forMarshaling->displayMode, &cgen_var_0, 1);
@@ -7641,15 +10009,21 @@
     vkStream->write((VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
     vkStream->write((float*)&forMarshaling->globalAlpha, sizeof(float));
     vkStream->write((VkDisplayPlaneAlphaFlagBitsKHR*)&forMarshaling->alphaMode, sizeof(VkDisplayPlaneAlphaFlagBitsKHR));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->imageExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->imageExtent));
 }
 
 void unmarshal_VkDisplaySurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplaySurfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDisplaySurfaceCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkDisplaySurfaceCreateFlagsKHR));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7659,30 +10033,42 @@
     vkStream->read((VkSurfaceTransformFlagBitsKHR*)&forUnmarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
     vkStream->read((float*)&forUnmarshaling->globalAlpha, sizeof(float));
     vkStream->read((VkDisplayPlaneAlphaFlagBitsKHR*)&forUnmarshaling->alphaMode, sizeof(VkDisplayPlaneAlphaFlagBitsKHR));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->imageExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->imageExtent));
 }
 
 #endif
 #ifdef VK_KHR_display_swapchain
 void marshal_VkDisplayPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->srcRect));
-    marshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->dstRect));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->srcRect));
+    marshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->dstRect));
     vkStream->write((VkBool32*)&forMarshaling->persistent, sizeof(VkBool32));
 }
 
 void unmarshal_VkDisplayPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPresentInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkRect2D(vkStream, (VkRect2D*)(&forUnmarshaling->srcRect));
-    unmarshal_VkRect2D(vkStream, (VkRect2D*)(&forUnmarshaling->dstRect));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forUnmarshaling->srcRect));
+    unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forUnmarshaling->dstRect));
     vkStream->read((VkBool32*)&forUnmarshaling->persistent, sizeof(VkBool32));
 }
 
@@ -7690,10 +10076,16 @@
 #ifdef VK_KHR_xlib_surface
 void marshal_VkXlibSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkXlibSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkXlibSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->dpy;
@@ -7707,10 +10099,16 @@
 
 void unmarshal_VkXlibSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkXlibSurfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkXlibSurfaceCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkXlibSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     Display* check_dpy;
@@ -7730,10 +10128,16 @@
 #ifdef VK_KHR_xcb_surface
 void marshal_VkXcbSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkXcbSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkXcbSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->connection;
@@ -7747,10 +10151,16 @@
 
 void unmarshal_VkXcbSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkXcbSurfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkXcbSurfaceCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkXcbSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     xcb_connection_t* check_connection;
@@ -7770,10 +10180,16 @@
 #ifdef VK_KHR_wayland_surface
 void marshal_VkWaylandSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkWaylandSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkWaylandSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->display;
@@ -7793,10 +10209,16 @@
 
 void unmarshal_VkWaylandSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWaylandSurfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkWaylandSurfaceCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkWaylandSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     wl_display* check_display;
@@ -7826,10 +10248,16 @@
 #ifdef VK_KHR_android_surface
 void marshal_VkAndroidSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAndroidSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkAndroidSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->window;
@@ -7842,10 +10270,16 @@
 
 void unmarshal_VkAndroidSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidSurfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAndroidSurfaceCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkAndroidSurfaceCreateFlagsKHR));
     // WARNING PTR CHECK
     ANativeWindow* check_window;
@@ -7864,10 +10298,16 @@
 #ifdef VK_KHR_win32_surface
 void marshal_VkWin32SurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkWin32SurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkWin32SurfaceCreateFlagsKHR));
     vkStream->write((HINSTANCE*)&forMarshaling->hinstance, sizeof(HINSTANCE));
     vkStream->write((HWND*)&forMarshaling->hwnd, sizeof(HWND));
@@ -7875,10 +10315,16 @@
 
 void unmarshal_VkWin32SurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWin32SurfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkWin32SurfaceCreateFlagsKHR*)&forUnmarshaling->flags, sizeof(VkWin32SurfaceCreateFlagsKHR));
     vkStream->read((HINSTANCE*)&forUnmarshaling->hinstance, sizeof(HINSTANCE));
     vkStream->read((HWND*)&forUnmarshaling->hwnd, sizeof(HWND));
@@ -7906,10 +10352,16 @@
 #ifdef VK_KHR_external_memory_win32
 void marshal_VkImportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     vkStream->write((HANDLE*)&forMarshaling->handle, sizeof(HANDLE));
     vkStream->write((LPCWSTR*)&forMarshaling->name, sizeof(LPCWSTR));
@@ -7917,10 +10369,16 @@
 
 void unmarshal_VkImportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     vkStream->read((HANDLE*)&forUnmarshaling->handle, sizeof(HANDLE));
     vkStream->read((LPCWSTR*)&forUnmarshaling->name, sizeof(LPCWSTR));
@@ -7928,10 +10386,16 @@
 
 void marshal_VkExportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     vkStream->putBe64(cgen_var_0);
@@ -7945,10 +10409,16 @@
 
 void unmarshal_VkExportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     // WARNING PTR CHECK
     const SECURITY_ATTRIBUTES* check_pAttributes;
     check_pAttributes = (const SECURITY_ATTRIBUTES*)(uintptr_t)vkStream->getBe64();
@@ -7966,28 +10436,46 @@
 
 void marshal_VkMemoryWin32HandlePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void unmarshal_VkMemoryWin32HandlePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryWin32HandlePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void marshal_VkMemoryGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&forMarshaling->memory, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -7996,10 +10484,16 @@
 
 void unmarshal_VkMemoryGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryGetWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_0, (VkDeviceMemory*)&forUnmarshaling->memory, 1);
@@ -8010,48 +10504,78 @@
 #ifdef VK_KHR_external_memory_fd
 void marshal_VkImportMemoryFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     vkStream->write((int*)&forMarshaling->fd, sizeof(int));
 }
 
 void unmarshal_VkImportMemoryFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryFdInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     vkStream->read((int*)&forUnmarshaling->fd, sizeof(int));
 }
 
 void marshal_VkMemoryFdPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void unmarshal_VkMemoryFdPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryFdPropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void marshal_VkMemoryGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&forMarshaling->memory, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8060,10 +10584,16 @@
 
 void unmarshal_VkMemoryGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryGetFdInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_0, (VkDeviceMemory*)&forUnmarshaling->memory, 1);
@@ -8074,10 +10604,16 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void marshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->acquireCount, sizeof(uint32_t));
     if (forMarshaling->acquireCount)
     {
@@ -8101,10 +10637,16 @@
 
 void unmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWin32KeyedMutexAcquireReleaseInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->acquireCount, sizeof(uint32_t));
     if (forUnmarshaling->acquireCount)
     {
@@ -8134,10 +10676,16 @@
 #ifdef VK_KHR_external_semaphore_win32
 void marshal_VkImportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSemaphore_u64(&forMarshaling->semaphore, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8149,10 +10697,16 @@
 
 void unmarshal_VkImportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportSemaphoreWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_0, (VkSemaphore*)&forUnmarshaling->semaphore, 1);
@@ -8164,10 +10718,16 @@
 
 void marshal_VkExportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     vkStream->putBe64(cgen_var_0);
@@ -8181,10 +10741,16 @@
 
 void unmarshal_VkExportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportSemaphoreWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     // WARNING PTR CHECK
     const SECURITY_ATTRIBUTES* check_pAttributes;
     check_pAttributes = (const SECURITY_ATTRIBUTES*)(uintptr_t)vkStream->getBe64();
@@ -8202,10 +10768,16 @@
 
 void marshal_VkD3D12FenceSubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->waitSemaphoreValuesCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pWaitSemaphoreValues;
@@ -8226,10 +10798,16 @@
 
 void unmarshal_VkD3D12FenceSubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkD3D12FenceSubmitInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->waitSemaphoreValuesCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const uint64_t* check_pWaitSemaphoreValues;
@@ -8258,10 +10836,16 @@
 
 void marshal_VkSemaphoreGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSemaphore_u64(&forMarshaling->semaphore, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8270,10 +10854,16 @@
 
 void unmarshal_VkSemaphoreGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreGetWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_0, (VkSemaphore*)&forUnmarshaling->semaphore, 1);
@@ -8284,10 +10874,16 @@
 #ifdef VK_KHR_external_semaphore_fd
 void marshal_VkImportSemaphoreFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSemaphore_u64(&forMarshaling->semaphore, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8298,10 +10894,16 @@
 
 void unmarshal_VkImportSemaphoreFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportSemaphoreFdInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_0, (VkSemaphore*)&forUnmarshaling->semaphore, 1);
@@ -8312,10 +10914,16 @@
 
 void marshal_VkSemaphoreGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSemaphore_u64(&forMarshaling->semaphore, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8324,10 +10932,16 @@
 
 void unmarshal_VkSemaphoreGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreGetFdInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSemaphore(&cgen_var_0, (VkSemaphore*)&forUnmarshaling->semaphore, 1);
@@ -8338,19 +10952,31 @@
 #ifdef VK_KHR_push_descriptor
 void marshal_VkPhysicalDevicePushDescriptorPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxPushDescriptors, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePushDescriptorPropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxPushDescriptors, sizeof(uint32_t));
 }
 
@@ -8362,26 +10988,32 @@
 #ifdef VK_KHR_incremental_present
 void marshal_VkRectLayerKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRectLayerKHR* forMarshaling)
 {
-    marshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->offset));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->extent));
+    (void)rootType;
+    marshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->offset));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->extent));
     vkStream->write((uint32_t*)&forMarshaling->layer, sizeof(uint32_t));
 }
 
 void unmarshal_VkRectLayerKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRectLayerKHR* forUnmarshaling)
 {
-    unmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forUnmarshaling->offset));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->extent));
+    (void)rootType;
+    unmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forUnmarshaling->offset));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->extent));
     vkStream->read((uint32_t*)&forUnmarshaling->layer, sizeof(uint32_t));
 }
 
 void marshal_VkPresentRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->rectangleCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pRectangles;
@@ -8392,7 +11024,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->rectangleCount; ++i)
             {
-                marshal_VkRectLayerKHR(vkStream, (const VkRectLayerKHR*)(forMarshaling->pRectangles + i));
+                marshal_VkRectLayerKHR(vkStream, rootType, (const VkRectLayerKHR*)(forMarshaling->pRectangles + i));
             }
         }
     }
@@ -8400,8 +11032,10 @@
 
 void unmarshal_VkPresentRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentRegionKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->rectangleCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkRectLayerKHR* check_pRectangles;
@@ -8416,7 +11050,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->rectangleCount; ++i)
             {
-                unmarshal_VkRectLayerKHR(vkStream, (VkRectLayerKHR*)(forUnmarshaling->pRectangles + i));
+                unmarshal_VkRectLayerKHR(vkStream, rootType, (VkRectLayerKHR*)(forUnmarshaling->pRectangles + i));
             }
         }
     }
@@ -8424,10 +11058,16 @@
 
 void marshal_VkPresentRegionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->swapchainCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pRegions;
@@ -8438,7 +11078,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->swapchainCount; ++i)
             {
-                marshal_VkPresentRegionKHR(vkStream, (const VkPresentRegionKHR*)(forMarshaling->pRegions + i));
+                marshal_VkPresentRegionKHR(vkStream, rootType, (const VkPresentRegionKHR*)(forMarshaling->pRegions + i));
             }
         }
     }
@@ -8446,10 +11086,16 @@
 
 void unmarshal_VkPresentRegionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentRegionsKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->swapchainCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkPresentRegionKHR* check_pRegions;
@@ -8464,7 +11110,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->swapchainCount; ++i)
             {
-                unmarshal_VkPresentRegionKHR(vkStream, (VkPresentRegionKHR*)(forUnmarshaling->pRegions + i));
+                unmarshal_VkPresentRegionKHR(vkStream, rootType, (VkPresentRegionKHR*)(forUnmarshaling->pRegions + i));
             }
         }
     }
@@ -8480,19 +11126,31 @@
 #ifdef VK_KHR_shared_presentable_image
 void marshal_VkSharedPresentSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageUsageFlags*)&forMarshaling->sharedPresentSupportedUsageFlags, sizeof(VkImageUsageFlags));
 }
 
 void unmarshal_VkSharedPresentSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSharedPresentSurfaceCapabilitiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageUsageFlags*)&forUnmarshaling->sharedPresentSupportedUsageFlags, sizeof(VkImageUsageFlags));
 }
 
@@ -8504,10 +11162,16 @@
 #ifdef VK_KHR_external_fence_win32
 void marshal_VkImportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkFence_u64(&forMarshaling->fence, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8519,10 +11183,16 @@
 
 void unmarshal_VkImportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportFenceWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_0, (VkFence*)&forUnmarshaling->fence, 1);
@@ -8534,10 +11204,16 @@
 
 void marshal_VkExportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     vkStream->putBe64(cgen_var_0);
@@ -8551,10 +11227,16 @@
 
 void unmarshal_VkExportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportFenceWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     // WARNING PTR CHECK
     const SECURITY_ATTRIBUTES* check_pAttributes;
     check_pAttributes = (const SECURITY_ATTRIBUTES*)(uintptr_t)vkStream->getBe64();
@@ -8572,10 +11254,16 @@
 
 void marshal_VkFenceGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkFence_u64(&forMarshaling->fence, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8584,10 +11272,16 @@
 
 void unmarshal_VkFenceGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFenceGetWin32HandleInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_0, (VkFence*)&forUnmarshaling->fence, 1);
@@ -8598,10 +11292,16 @@
 #ifdef VK_KHR_external_fence_fd
 void marshal_VkImportFenceFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkFence_u64(&forMarshaling->fence, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8612,10 +11312,16 @@
 
 void unmarshal_VkImportFenceFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportFenceFdInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_0, (VkFence*)&forUnmarshaling->fence, 1);
@@ -8626,10 +11332,16 @@
 
 void marshal_VkFenceGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkFence_u64(&forMarshaling->fence, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8638,10 +11350,16 @@
 
 void unmarshal_VkFenceGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFenceGetFdInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkFence(&cgen_var_0, (VkFence*)&forUnmarshaling->fence, 1);
@@ -8652,48 +11370,78 @@
 #ifdef VK_KHR_performance_query
 void marshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->performanceCounterQueryPools, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->performanceCounterMultipleQueryPools, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePerformanceQueryFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->performanceCounterQueryPools, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->performanceCounterMultipleQueryPools, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->allowCommandBufferQueryCopies, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePerformanceQueryPropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->allowCommandBufferQueryCopies, sizeof(VkBool32));
 }
 
 void marshal_VkPerformanceCounterKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPerformanceCounterUnitKHR*)&forMarshaling->unit, sizeof(VkPerformanceCounterUnitKHR));
     vkStream->write((VkPerformanceCounterScopeKHR*)&forMarshaling->scope, sizeof(VkPerformanceCounterScopeKHR));
     vkStream->write((VkPerformanceCounterStorageKHR*)&forMarshaling->storage, sizeof(VkPerformanceCounterStorageKHR));
@@ -8702,10 +11450,16 @@
 
 void unmarshal_VkPerformanceCounterKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceCounterKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPerformanceCounterUnitKHR*)&forUnmarshaling->unit, sizeof(VkPerformanceCounterUnitKHR));
     vkStream->read((VkPerformanceCounterScopeKHR*)&forUnmarshaling->scope, sizeof(VkPerformanceCounterScopeKHR));
     vkStream->read((VkPerformanceCounterStorageKHR*)&forUnmarshaling->storage, sizeof(VkPerformanceCounterStorageKHR));
@@ -8714,10 +11468,16 @@
 
 void marshal_VkPerformanceCounterDescriptionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPerformanceCounterDescriptionFlagsKHR*)&forMarshaling->flags, sizeof(VkPerformanceCounterDescriptionFlagsKHR));
     vkStream->write((char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->category, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -8726,10 +11486,16 @@
 
 void unmarshal_VkPerformanceCounterDescriptionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceCounterDescriptionKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPerformanceCounterDescriptionFlagsKHR*)&forUnmarshaling->flags, sizeof(VkPerformanceCounterDescriptionFlagsKHR));
     vkStream->read((char*)forUnmarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->category, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -8738,10 +11504,16 @@
 
 void marshal_VkQueryPoolPerformanceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->counterIndexCount, sizeof(uint32_t));
     vkStream->write((const uint32_t*)forMarshaling->pCounterIndices, forMarshaling->counterIndexCount * sizeof(const uint32_t));
@@ -8749,10 +11521,16 @@
 
 void unmarshal_VkQueryPoolPerformanceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueryPoolPerformanceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->queueFamilyIndex, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->counterIndexCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->pCounterIndices, forUnmarshaling->counterIndexCount * sizeof(const uint32_t));
@@ -8760,53 +11538,81 @@
 
 void marshal_VkPerformanceCounterResultKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((int32_t*)&forMarshaling->int32, sizeof(int32_t));
 }
 
 void unmarshal_VkPerformanceCounterResultKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceCounterResultKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((int32_t*)&forUnmarshaling->int32, sizeof(int32_t));
 }
 
 void marshal_VkAcquireProfilingLockInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAcquireProfilingLockFlagsKHR*)&forMarshaling->flags, sizeof(VkAcquireProfilingLockFlagsKHR));
     vkStream->write((uint64_t*)&forMarshaling->timeout, sizeof(uint64_t));
 }
 
 void unmarshal_VkAcquireProfilingLockInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAcquireProfilingLockInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAcquireProfilingLockFlagsKHR*)&forUnmarshaling->flags, sizeof(VkAcquireProfilingLockFlagsKHR));
     vkStream->read((uint64_t*)&forUnmarshaling->timeout, sizeof(uint64_t));
 }
 
 void marshal_VkPerformanceQuerySubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->counterPassIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkPerformanceQuerySubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceQuerySubmitInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->counterPassIndex, sizeof(uint32_t));
 }
 
@@ -8816,10 +11622,16 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void marshal_VkPhysicalDeviceSurfaceInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkSurfaceKHR_u64(&forMarshaling->surface, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8827,10 +11639,16 @@
 
 void unmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSurfaceInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkSurfaceKHR(&cgen_var_0, (VkSurfaceKHR*)&forUnmarshaling->surface, 1);
@@ -8838,38 +11656,62 @@
 
 void marshal_VkSurfaceCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkSurfaceCapabilitiesKHR(vkStream, (VkSurfaceCapabilitiesKHR*)(&forMarshaling->surfaceCapabilities));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkSurfaceCapabilitiesKHR(vkStream, rootType, (VkSurfaceCapabilitiesKHR*)(&forMarshaling->surfaceCapabilities));
 }
 
 void unmarshal_VkSurfaceCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilities2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkSurfaceCapabilitiesKHR(vkStream, (VkSurfaceCapabilitiesKHR*)(&forUnmarshaling->surfaceCapabilities));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkSurfaceCapabilitiesKHR(vkStream, rootType, (VkSurfaceCapabilitiesKHR*)(&forUnmarshaling->surfaceCapabilities));
 }
 
 void marshal_VkSurfaceFormat2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkSurfaceFormatKHR(vkStream, (VkSurfaceFormatKHR*)(&forMarshaling->surfaceFormat));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkSurfaceFormatKHR(vkStream, rootType, (VkSurfaceFormatKHR*)(&forMarshaling->surfaceFormat));
 }
 
 void unmarshal_VkSurfaceFormat2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFormat2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkSurfaceFormatKHR(vkStream, (VkSurfaceFormatKHR*)(&forUnmarshaling->surfaceFormat));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkSurfaceFormatKHR(vkStream, rootType, (VkSurfaceFormatKHR*)(&forUnmarshaling->surfaceFormat));
 }
 
 #endif
@@ -8878,64 +11720,106 @@
 #ifdef VK_KHR_get_display_properties2
 void marshal_VkDisplayProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkDisplayPropertiesKHR(vkStream, (VkDisplayPropertiesKHR*)(&forMarshaling->displayProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkDisplayPropertiesKHR(vkStream, rootType, (VkDisplayPropertiesKHR*)(&forMarshaling->displayProperties));
 }
 
 void unmarshal_VkDisplayProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayProperties2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkDisplayPropertiesKHR(vkStream, (VkDisplayPropertiesKHR*)(&forUnmarshaling->displayProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkDisplayPropertiesKHR(vkStream, rootType, (VkDisplayPropertiesKHR*)(&forUnmarshaling->displayProperties));
 }
 
 void marshal_VkDisplayPlaneProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkDisplayPlanePropertiesKHR(vkStream, (VkDisplayPlanePropertiesKHR*)(&forMarshaling->displayPlaneProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkDisplayPlanePropertiesKHR(vkStream, rootType, (VkDisplayPlanePropertiesKHR*)(&forMarshaling->displayPlaneProperties));
 }
 
 void unmarshal_VkDisplayPlaneProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneProperties2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkDisplayPlanePropertiesKHR(vkStream, (VkDisplayPlanePropertiesKHR*)(&forUnmarshaling->displayPlaneProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkDisplayPlanePropertiesKHR(vkStream, rootType, (VkDisplayPlanePropertiesKHR*)(&forUnmarshaling->displayPlaneProperties));
 }
 
 void marshal_VkDisplayModeProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkDisplayModePropertiesKHR(vkStream, (VkDisplayModePropertiesKHR*)(&forMarshaling->displayModeProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkDisplayModePropertiesKHR(vkStream, rootType, (VkDisplayModePropertiesKHR*)(&forMarshaling->displayModeProperties));
 }
 
 void unmarshal_VkDisplayModeProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModeProperties2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkDisplayModePropertiesKHR(vkStream, (VkDisplayModePropertiesKHR*)(&forUnmarshaling->displayModeProperties));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkDisplayModePropertiesKHR(vkStream, rootType, (VkDisplayModePropertiesKHR*)(&forUnmarshaling->displayModeProperties));
 }
 
 void marshal_VkDisplayPlaneInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDisplayModeKHR_u64(&forMarshaling->mode, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -8944,10 +11828,16 @@
 
 void unmarshal_VkDisplayPlaneInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDisplayModeKHR(&cgen_var_0, (VkDisplayModeKHR*)&forUnmarshaling->mode, 1);
@@ -8956,20 +11846,32 @@
 
 void marshal_VkDisplayPlaneCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkDisplayPlaneCapabilitiesKHR(vkStream, (VkDisplayPlaneCapabilitiesKHR*)(&forMarshaling->capabilities));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkDisplayPlaneCapabilitiesKHR(vkStream, rootType, (VkDisplayPlaneCapabilitiesKHR*)(&forMarshaling->capabilities));
 }
 
 void unmarshal_VkDisplayPlaneCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneCapabilities2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkDisplayPlaneCapabilitiesKHR(vkStream, (VkDisplayPlaneCapabilitiesKHR*)(&forUnmarshaling->capabilities));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkDisplayPlaneCapabilitiesKHR(vkStream, rootType, (VkDisplayPlaneCapabilitiesKHR*)(&forUnmarshaling->capabilities));
 }
 
 #endif
@@ -8990,10 +11892,16 @@
 #ifdef VK_KHR_portability_subset
 void marshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->constantAlphaColorBlendFactors, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->events, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->imageViewFormatReinterpretation, sizeof(VkBool32));
@@ -9013,10 +11921,16 @@
 
 void unmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePortabilitySubsetFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->constantAlphaColorBlendFactors, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->events, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->imageViewFormatReinterpretation, sizeof(VkBool32));
@@ -9036,19 +11950,31 @@
 
 void marshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->minVertexInputBindingStrideAlignment, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePortabilitySubsetPropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->minVertexInputBindingStrideAlignment, sizeof(uint32_t));
 }
 
@@ -9066,20 +11992,32 @@
 #ifdef VK_KHR_shader_clock
 void marshal_VkPhysicalDeviceShaderClockFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderSubgroupClock, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderDeviceClock, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderClockFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSubgroupClock, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderDeviceClock, sizeof(VkBool32));
 }
@@ -9100,19 +12038,31 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void marshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderTerminateInvocation, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderTerminateInvocation, sizeof(VkBool32));
 }
 
@@ -9120,50 +12070,80 @@
 #ifdef VK_KHR_fragment_shading_rate
 void marshal_VkFragmentShadingRateAttachmentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pFragmentShadingRateAttachment));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->shadingRateAttachmentTexelSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pFragmentShadingRateAttachment));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->shadingRateAttachmentTexelSize));
 }
 
 void unmarshal_VkFragmentShadingRateAttachmentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFragmentShadingRateAttachmentInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkAttachmentReference2(vkStream, (VkAttachmentReference2*)(forUnmarshaling->pFragmentShadingRateAttachment));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->shadingRateAttachmentTexelSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkAttachmentReference2(vkStream, rootType, (VkAttachmentReference2*)(forUnmarshaling->pFragmentShadingRateAttachment));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->shadingRateAttachmentTexelSize));
 }
 
 void marshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->fragmentSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->fragmentSize));
     vkStream->write((VkFragmentShadingRateCombinerOpKHR*)forMarshaling->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
 }
 
 void unmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineFragmentShadingRateStateCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->fragmentSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->fragmentSize));
     vkStream->read((VkFragmentShadingRateCombinerOpKHR*)forUnmarshaling->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
 }
 
 void marshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->pipelineFragmentShadingRate, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->primitiveFragmentShadingRate, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->attachmentFragmentShadingRate, sizeof(VkBool32));
@@ -9171,10 +12151,16 @@
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->pipelineFragmentShadingRate, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->primitiveFragmentShadingRate, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->attachmentFragmentShadingRate, sizeof(VkBool32));
@@ -9182,17 +12168,23 @@
 
 void marshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minFragmentShadingRateAttachmentTexelSize));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxFragmentShadingRateAttachmentTexelSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minFragmentShadingRateAttachmentTexelSize));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxFragmentShadingRateAttachmentTexelSize));
     vkStream->write((uint32_t*)&forMarshaling->maxFragmentShadingRateAttachmentTexelSizeAspectRatio, sizeof(uint32_t));
     vkStream->write((VkBool32*)&forMarshaling->primitiveFragmentShadingRateWithMultipleViewports, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->layeredShadingRateAttachments, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->fragmentShadingRateNonTrivialCombinerOps, sizeof(VkBool32));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxFragmentSize));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxFragmentSize));
     vkStream->write((uint32_t*)&forMarshaling->maxFragmentSizeAspectRatio, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxFragmentShadingRateCoverageSamples, sizeof(uint32_t));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->maxFragmentShadingRateRasterizationSamples, sizeof(VkSampleCountFlagBits));
@@ -9207,17 +12199,23 @@
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRatePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->minFragmentShadingRateAttachmentTexelSize));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxFragmentShadingRateAttachmentTexelSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->minFragmentShadingRateAttachmentTexelSize));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxFragmentShadingRateAttachmentTexelSize));
     vkStream->read((uint32_t*)&forUnmarshaling->maxFragmentShadingRateAttachmentTexelSizeAspectRatio, sizeof(uint32_t));
     vkStream->read((VkBool32*)&forUnmarshaling->primitiveFragmentShadingRateWithMultipleViewports, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->layeredShadingRateAttachments, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentShadingRateNonTrivialCombinerOps, sizeof(VkBool32));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxFragmentSize));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxFragmentSize));
     vkStream->read((uint32_t*)&forUnmarshaling->maxFragmentSizeAspectRatio, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxFragmentShadingRateCoverageSamples, sizeof(uint32_t));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->maxFragmentShadingRateRasterizationSamples, sizeof(VkSampleCountFlagBits));
@@ -9232,22 +12230,34 @@
 
 void marshal_VkPhysicalDeviceFragmentShadingRateKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSampleCountFlags*)&forMarshaling->sampleCounts, sizeof(VkSampleCountFlags));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->fragmentSize));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->fragmentSize));
 }
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSampleCountFlags*)&forUnmarshaling->sampleCounts, sizeof(VkSampleCountFlags));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->fragmentSize));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->fragmentSize));
 }
 
 #endif
@@ -9256,19 +12266,31 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void marshal_VkSurfaceProtectedCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->supportsProtected, sizeof(VkBool32));
 }
 
 void unmarshal_VkSurfaceProtectedCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceProtectedCapabilitiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->supportsProtected, sizeof(VkBool32));
 }
 
@@ -9284,28 +12306,46 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void marshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->pipelineExecutableInfo, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->pipelineExecutableInfo, sizeof(VkBool32));
 }
 
 void marshal_VkPipelineInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkPipeline_u64(&forMarshaling->pipeline, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9313,10 +12353,16 @@
 
 void unmarshal_VkPipelineInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkPipeline(&cgen_var_0, (VkPipeline*)&forUnmarshaling->pipeline, 1);
@@ -9324,10 +12370,16 @@
 
 void marshal_VkPipelineExecutablePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkShaderStageFlags*)&forMarshaling->stages, sizeof(VkShaderStageFlags));
     vkStream->write((char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -9336,10 +12388,16 @@
 
 void unmarshal_VkPipelineExecutablePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutablePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkShaderStageFlags*)&forUnmarshaling->stages, sizeof(VkShaderStageFlags));
     vkStream->read((char*)forUnmarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -9348,10 +12406,16 @@
 
 void marshal_VkPipelineExecutableInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkPipeline_u64(&forMarshaling->pipeline, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9360,10 +12424,16 @@
 
 void unmarshal_VkPipelineExecutableInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkPipeline(&cgen_var_0, (VkPipeline*)&forUnmarshaling->pipeline, 1);
@@ -9372,48 +12442,70 @@
 
 void marshal_VkPipelineExecutableStatisticValueKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkBool32*)&forMarshaling->b32, sizeof(VkBool32));
 }
 
 void unmarshal_VkPipelineExecutableStatisticValueKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableStatisticValueKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkBool32*)&forUnmarshaling->b32, sizeof(VkBool32));
 }
 
 void marshal_VkPipelineExecutableStatisticKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->write((VkPipelineExecutableStatisticFormatKHR*)&forMarshaling->format, sizeof(VkPipelineExecutableStatisticFormatKHR));
-    marshal_VkPipelineExecutableStatisticValueKHR(vkStream, (VkPipelineExecutableStatisticValueKHR*)(&forMarshaling->value));
+    marshal_VkPipelineExecutableStatisticValueKHR(vkStream, rootType, (VkPipelineExecutableStatisticValueKHR*)(&forMarshaling->value));
 }
 
 void unmarshal_VkPipelineExecutableStatisticKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableStatisticKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((char*)forUnmarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->read((VkPipelineExecutableStatisticFormatKHR*)&forUnmarshaling->format, sizeof(VkPipelineExecutableStatisticFormatKHR));
-    unmarshal_VkPipelineExecutableStatisticValueKHR(vkStream, (VkPipelineExecutableStatisticValueKHR*)(&forUnmarshaling->value));
+    unmarshal_VkPipelineExecutableStatisticValueKHR(vkStream, rootType, (VkPipelineExecutableStatisticValueKHR*)(&forUnmarshaling->value));
 }
 
 void marshal_VkPipelineExecutableInternalRepresentationKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->write((VkBool32*)&forMarshaling->isText, sizeof(VkBool32));
@@ -9430,10 +12522,16 @@
 
 void unmarshal_VkPipelineExecutableInternalRepresentationKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableInternalRepresentationKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((char*)forUnmarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     vkStream->read((VkBool32*)&forUnmarshaling->isText, sizeof(VkBool32));
@@ -9455,10 +12553,16 @@
 #ifdef VK_KHR_pipeline_library
 void marshal_VkPipelineLibraryCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->libraryCount, sizeof(uint32_t));
     if (forMarshaling->libraryCount)
     {
@@ -9471,10 +12575,16 @@
 
 void unmarshal_VkPipelineLibraryCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineLibraryCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->libraryCount, sizeof(uint32_t));
     if (forUnmarshaling->libraryCount)
     {
@@ -9491,10 +12601,16 @@
 #ifdef VK_KHR_copy_commands2
 void marshal_VkBufferCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->srcOffset, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->dstOffset, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -9502,10 +12618,16 @@
 
 void unmarshal_VkBufferCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferCopy2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->srcOffset, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->dstOffset, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
@@ -9513,10 +12635,16 @@
 
 void marshal_VkCopyBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->srcBuffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9528,17 +12656,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
         {
-            marshal_VkBufferCopy2KHR(vkStream, (const VkBufferCopy2KHR*)(forMarshaling->pRegions + i));
+            marshal_VkBufferCopy2KHR(vkStream, rootType, (const VkBufferCopy2KHR*)(forMarshaling->pRegions + i));
         }
     }
 }
 
 void unmarshal_VkCopyBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyBufferInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->srcBuffer, 1);
@@ -9550,43 +12684,61 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i)
         {
-            unmarshal_VkBufferCopy2KHR(vkStream, (VkBufferCopy2KHR*)(forUnmarshaling->pRegions + i));
+            unmarshal_VkBufferCopy2KHR(vkStream, rootType, (VkBufferCopy2KHR*)(forUnmarshaling->pRegions + i));
         }
     }
 }
 
 void marshal_VkImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset));
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent));
 }
 
 void unmarshal_VkImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageCopy2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->srcOffset));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->dstOffset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->extent));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->srcOffset));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->dstOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->extent));
 }
 
 void marshal_VkCopyImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->srcImage, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9600,17 +12752,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
         {
-            marshal_VkImageCopy2KHR(vkStream, (const VkImageCopy2KHR*)(forMarshaling->pRegions + i));
+            marshal_VkImageCopy2KHR(vkStream, rootType, (const VkImageCopy2KHR*)(forMarshaling->pRegions + i));
         }
     }
 }
 
 void unmarshal_VkCopyImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyImageInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->srcImage, 1);
@@ -9624,45 +12782,63 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i)
         {
-            unmarshal_VkImageCopy2KHR(vkStream, (VkImageCopy2KHR*)(forUnmarshaling->pRegions + i));
+            unmarshal_VkImageCopy2KHR(vkStream, rootType, (VkImageCopy2KHR*)(forUnmarshaling->pRegions + i));
         }
     }
 }
 
 void marshal_VkBufferImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->bufferOffset, sizeof(VkDeviceSize));
     vkStream->write((uint32_t*)&forMarshaling->bufferRowLength, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->bufferImageHeight, sizeof(uint32_t));
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->imageOffset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->imageExtent));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->imageOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageExtent));
 }
 
 void unmarshal_VkBufferImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferImageCopy2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->bufferOffset, sizeof(VkDeviceSize));
     vkStream->read((uint32_t*)&forUnmarshaling->bufferRowLength, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->bufferImageHeight, sizeof(uint32_t));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->imageOffset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->imageExtent));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->imageOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageExtent));
 }
 
 void marshal_VkCopyBufferToImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->srcBuffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9675,17 +12851,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
         {
-            marshal_VkBufferImageCopy2KHR(vkStream, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i));
+            marshal_VkBufferImageCopy2KHR(vkStream, rootType, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i));
         }
     }
 }
 
 void unmarshal_VkCopyBufferToImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyBufferToImageInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->srcBuffer, 1);
@@ -9698,17 +12880,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i)
         {
-            unmarshal_VkBufferImageCopy2KHR(vkStream, (VkBufferImageCopy2KHR*)(forUnmarshaling->pRegions + i));
+            unmarshal_VkBufferImageCopy2KHR(vkStream, rootType, (VkBufferImageCopy2KHR*)(forUnmarshaling->pRegions + i));
         }
     }
 }
 
 void marshal_VkCopyImageToBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->srcImage, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9721,17 +12909,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
         {
-            marshal_VkBufferImageCopy2KHR(vkStream, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i));
+            marshal_VkBufferImageCopy2KHR(vkStream, rootType, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i));
         }
     }
 }
 
 void unmarshal_VkCopyImageToBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyImageToBufferInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->srcImage, 1);
@@ -9744,53 +12938,71 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i)
         {
-            unmarshal_VkBufferImageCopy2KHR(vkStream, (VkBufferImageCopy2KHR*)(forUnmarshaling->pRegions + i));
+            unmarshal_VkBufferImageCopy2KHR(vkStream, rootType, (VkBufferImageCopy2KHR*)(forUnmarshaling->pRegions + i));
         }
     }
 }
 
 void marshal_VkImageBlit2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
-    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
     {
-        marshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->srcOffsets + i));
+        rootType = forMarshaling->sType;
     }
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        marshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->dstOffsets + i));
+        marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->srcOffsets + i));
+    }
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    {
+        marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->dstOffsets + i));
     }
 }
 
 void unmarshal_VkImageBlit2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageBlit2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
-    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
     {
-        unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forUnmarshaling->srcOffsets + i));
+        rootType = forUnmarshaling->sType;
     }
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forUnmarshaling->dstOffsets + i));
+        unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forUnmarshaling->srcOffsets + i));
+    }
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    {
+        unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forUnmarshaling->dstOffsets + i));
     }
 }
 
 void marshal_VkBlitImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->srcImage, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9804,7 +13016,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
         {
-            marshal_VkImageBlit2KHR(vkStream, (const VkImageBlit2KHR*)(forMarshaling->pRegions + i));
+            marshal_VkImageBlit2KHR(vkStream, rootType, (const VkImageBlit2KHR*)(forMarshaling->pRegions + i));
         }
     }
     vkStream->write((VkFilter*)&forMarshaling->filter, sizeof(VkFilter));
@@ -9812,10 +13024,16 @@
 
 void unmarshal_VkBlitImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBlitImageInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->srcImage, 1);
@@ -9829,7 +13047,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i)
         {
-            unmarshal_VkImageBlit2KHR(vkStream, (VkImageBlit2KHR*)(forUnmarshaling->pRegions + i));
+            unmarshal_VkImageBlit2KHR(vkStream, rootType, (VkImageBlit2KHR*)(forUnmarshaling->pRegions + i));
         }
     }
     vkStream->read((VkFilter*)&forUnmarshaling->filter, sizeof(VkFilter));
@@ -9837,36 +13055,54 @@
 
 void marshal_VkImageResolve2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset));
-    marshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
-    marshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset));
-    marshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset));
+    marshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent));
 }
 
 void unmarshal_VkImageResolve2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageResolve2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->srcOffset));
-    unmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
-    unmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forUnmarshaling->dstOffset));
-    unmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forUnmarshaling->extent));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->srcSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->srcOffset));
+    unmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->dstSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->dstOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->extent));
 }
 
 void marshal_VkResolveImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->srcImage, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -9880,17 +13116,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
         {
-            marshal_VkImageResolve2KHR(vkStream, (const VkImageResolve2KHR*)(forMarshaling->pRegions + i));
+            marshal_VkImageResolve2KHR(vkStream, rootType, (const VkImageResolve2KHR*)(forMarshaling->pRegions + i));
         }
     }
 }
 
 void unmarshal_VkResolveImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkResolveImageInfo2KHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->srcImage, 1);
@@ -9904,7 +13146,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i)
         {
-            unmarshal_VkImageResolve2KHR(vkStream, (VkImageResolve2KHR*)(forUnmarshaling->pRegions + i));
+            unmarshal_VkImageResolve2KHR(vkStream, rootType, (VkImageResolve2KHR*)(forUnmarshaling->pRegions + i));
         }
     }
 }
@@ -9913,10 +13155,16 @@
 #ifdef VK_ANDROID_native_buffer
 void marshal_VkNativeBufferANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->handle;
     vkStream->putBe64(cgen_var_0);
@@ -9933,10 +13181,16 @@
 
 void unmarshal_VkNativeBufferANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkNativeBufferANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     // WARNING PTR CHECK
     const uint32_t* check_handle;
     check_handle = (const uint32_t*)(uintptr_t)vkStream->getBe64();
@@ -9959,10 +13213,16 @@
 #ifdef VK_EXT_debug_report
 void marshal_VkDebugReportCallbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDebugReportFlagsEXT*)&forMarshaling->flags, sizeof(VkDebugReportFlagsEXT));
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->pfnCallback;
     vkStream->putBe64(cgen_var_0);
@@ -9977,10 +13237,16 @@
 
 void unmarshal_VkDebugReportCallbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugReportCallbackCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDebugReportFlagsEXT*)&forUnmarshaling->flags, sizeof(VkDebugReportFlagsEXT));
     forUnmarshaling->pfnCallback = (PFN_vkDebugReportCallbackEXT)vkStream->getBe64();
     // WARNING PTR CHECK
@@ -10006,19 +13272,31 @@
 #ifdef VK_AMD_rasterization_order
 void marshal_VkPipelineRasterizationStateRasterizationOrderAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkRasterizationOrderAMD*)&forMarshaling->rasterizationOrder, sizeof(VkRasterizationOrderAMD));
 }
 
 void unmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationStateRasterizationOrderAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkRasterizationOrderAMD*)&forUnmarshaling->rasterizationOrder, sizeof(VkRasterizationOrderAMD));
 }
 
@@ -10030,10 +13308,16 @@
 #ifdef VK_EXT_debug_marker
 void marshal_VkDebugMarkerObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDebugReportObjectTypeEXT*)&forMarshaling->objectType, sizeof(VkDebugReportObjectTypeEXT));
     vkStream->write((uint64_t*)&forMarshaling->object, sizeof(uint64_t));
     vkStream->putString(forMarshaling->pObjectName);
@@ -10041,10 +13325,16 @@
 
 void unmarshal_VkDebugMarkerObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugMarkerObjectNameInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDebugReportObjectTypeEXT*)&forUnmarshaling->objectType, sizeof(VkDebugReportObjectTypeEXT));
     vkStream->read((uint64_t*)&forUnmarshaling->object, sizeof(uint64_t));
     vkStream->loadStringInPlace((char**)&forUnmarshaling->pObjectName);
@@ -10052,10 +13342,16 @@
 
 void marshal_VkDebugMarkerObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDebugReportObjectTypeEXT*)&forMarshaling->objectType, sizeof(VkDebugReportObjectTypeEXT));
     vkStream->write((uint64_t*)&forMarshaling->object, sizeof(uint64_t));
     vkStream->write((uint64_t*)&forMarshaling->tagName, sizeof(uint64_t));
@@ -10066,10 +13362,16 @@
 
 void unmarshal_VkDebugMarkerObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugMarkerObjectTagInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDebugReportObjectTypeEXT*)&forUnmarshaling->objectType, sizeof(VkDebugReportObjectTypeEXT));
     vkStream->read((uint64_t*)&forUnmarshaling->object, sizeof(uint64_t));
     vkStream->read((uint64_t*)&forUnmarshaling->tagName, sizeof(uint64_t));
@@ -10079,20 +13381,32 @@
 
 void marshal_VkDebugMarkerMarkerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->putString(forMarshaling->pMarkerName);
     vkStream->write((float*)forMarshaling->color, 4 * sizeof(float));
 }
 
 void unmarshal_VkDebugMarkerMarkerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugMarkerMarkerInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->loadStringInPlace((char**)&forUnmarshaling->pMarkerName);
     vkStream->read((float*)forUnmarshaling->color, 4 * sizeof(float));
 }
@@ -10103,46 +13417,76 @@
 #ifdef VK_NV_dedicated_allocation
 void marshal_VkDedicatedAllocationImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->dedicatedAllocation, sizeof(VkBool32));
 }
 
 void unmarshal_VkDedicatedAllocationImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDedicatedAllocationImageCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->dedicatedAllocation, sizeof(VkBool32));
 }
 
 void marshal_VkDedicatedAllocationBufferCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->dedicatedAllocation, sizeof(VkBool32));
 }
 
 void unmarshal_VkDedicatedAllocationBufferCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDedicatedAllocationBufferCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->dedicatedAllocation, sizeof(VkBool32));
 }
 
 void marshal_VkDedicatedAllocationMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -10153,10 +13497,16 @@
 
 void unmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDedicatedAllocationMemoryAllocateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0, (VkImage*)&forUnmarshaling->image, 1);
@@ -10169,30 +13519,48 @@
 #ifdef VK_EXT_transform_feedback
 void marshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->transformFeedback, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->geometryStreams, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTransformFeedbackFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->transformFeedback, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->geometryStreams, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxTransformFeedbackStreams, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxTransformFeedbackBuffers, sizeof(uint32_t));
     vkStream->write((VkDeviceSize*)&forMarshaling->maxTransformFeedbackBufferSize, sizeof(VkDeviceSize));
@@ -10207,10 +13575,16 @@
 
 void unmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTransformFeedbackPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxTransformFeedbackStreams, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxTransformFeedbackBuffers, sizeof(uint32_t));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->maxTransformFeedbackBufferSize, sizeof(VkDeviceSize));
@@ -10225,20 +13599,32 @@
 
 void marshal_VkPipelineRasterizationStateStreamCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineRasterizationStateStreamCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineRasterizationStateStreamCreateFlagsEXT));
     vkStream->write((uint32_t*)&forMarshaling->rasterizationStream, sizeof(uint32_t));
 }
 
 void unmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationStateStreamCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineRasterizationStateStreamCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkPipelineRasterizationStateStreamCreateFlagsEXT));
     vkStream->read((uint32_t*)&forUnmarshaling->rasterizationStream, sizeof(uint32_t));
 }
@@ -10247,10 +13633,16 @@
 #ifdef VK_NVX_image_view_handle
 void marshal_VkImageViewHandleInfoNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkImageView_u64(&forMarshaling->imageView, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -10262,10 +13654,16 @@
 
 void unmarshal_VkImageViewHandleInfoNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewHandleInfoNVX* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkImageView(&cgen_var_0, (VkImageView*)&forUnmarshaling->imageView, 1);
@@ -10277,20 +13675,32 @@
 
 void marshal_VkImageViewAddressPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
 }
 
 void unmarshal_VkImageViewAddressPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewAddressPropertiesNVX* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->deviceAddress, sizeof(VkDeviceAddress));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
 }
@@ -10307,19 +13717,31 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void marshal_VkTextureLODGatherFormatPropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->supportsTextureGatherLODBiasAMD, sizeof(VkBool32));
 }
 
 void unmarshal_VkTextureLODGatherFormatPropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTextureLODGatherFormatPropertiesAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->supportsTextureGatherLODBiasAMD, sizeof(VkBool32));
 }
 
@@ -10327,8 +13749,10 @@
 #ifdef VK_AMD_shader_info
 void marshal_VkShaderResourceUsageAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->numUsedVgprs, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->numUsedSgprs, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->ldsSizePerLocalWorkGroup, sizeof(uint32_t));
@@ -10340,8 +13764,10 @@
 
 void unmarshal_VkShaderResourceUsageAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderResourceUsageAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->numUsedVgprs, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->numUsedSgprs, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->ldsSizePerLocalWorkGroup, sizeof(uint32_t));
@@ -10351,10 +13777,12 @@
 
 void marshal_VkShaderStatisticsInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkShaderStageFlags*)&forMarshaling->shaderStageMask, sizeof(VkShaderStageFlags));
-    marshal_VkShaderResourceUsageAMD(vkStream, (VkShaderResourceUsageAMD*)(&forMarshaling->resourceUsage));
+    marshal_VkShaderResourceUsageAMD(vkStream, rootType, (VkShaderResourceUsageAMD*)(&forMarshaling->resourceUsage));
     vkStream->write((uint32_t*)&forMarshaling->numPhysicalVgprs, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->numPhysicalSgprs, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->numAvailableVgprs, sizeof(uint32_t));
@@ -10364,10 +13792,12 @@
 
 void unmarshal_VkShaderStatisticsInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderStatisticsInfoAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkShaderStageFlags*)&forUnmarshaling->shaderStageMask, sizeof(VkShaderStageFlags));
-    unmarshal_VkShaderResourceUsageAMD(vkStream, (VkShaderResourceUsageAMD*)(&forUnmarshaling->resourceUsage));
+    unmarshal_VkShaderResourceUsageAMD(vkStream, rootType, (VkShaderResourceUsageAMD*)(&forUnmarshaling->resourceUsage));
     vkStream->read((uint32_t*)&forUnmarshaling->numPhysicalVgprs, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->numPhysicalSgprs, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->numAvailableVgprs, sizeof(uint32_t));
@@ -10381,20 +13811,32 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void marshal_VkStreamDescriptorSurfaceCreateInfoGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkStreamDescriptorSurfaceCreateFlagsGGP*)&forMarshaling->flags, sizeof(VkStreamDescriptorSurfaceCreateFlagsGGP));
     vkStream->write((GgpStreamDescriptor*)&forMarshaling->streamDescriptor, sizeof(GgpStreamDescriptor));
 }
 
 void unmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkStreamDescriptorSurfaceCreateInfoGGP* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkStreamDescriptorSurfaceCreateFlagsGGP*)&forUnmarshaling->flags, sizeof(VkStreamDescriptorSurfaceCreateFlagsGGP));
     vkStream->read((GgpStreamDescriptor*)&forUnmarshaling->streamDescriptor, sizeof(GgpStreamDescriptor));
 }
@@ -10403,19 +13845,31 @@
 #ifdef VK_NV_corner_sampled_image
 void marshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->cornerSampledImage, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCornerSampledImageFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->cornerSampledImage, sizeof(VkBool32));
 }
 
@@ -10425,9 +13879,11 @@
 #ifdef VK_NV_external_memory_capabilities
 void marshal_VkExternalImageFormatPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* forMarshaling)
 {
-    marshal_VkImageFormatProperties(vkStream, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties));
+    (void)rootType;
+    marshal_VkImageFormatProperties(vkStream, rootType, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties));
     vkStream->write((VkExternalMemoryFeatureFlagsNV*)&forMarshaling->externalMemoryFeatures, sizeof(VkExternalMemoryFeatureFlagsNV));
     vkStream->write((VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     vkStream->write((VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->compatibleHandleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
@@ -10435,9 +13891,11 @@
 
 void unmarshal_VkExternalImageFormatPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalImageFormatPropertiesNV* forUnmarshaling)
 {
-    unmarshal_VkImageFormatProperties(vkStream, (VkImageFormatProperties*)(&forUnmarshaling->imageFormatProperties));
+    (void)rootType;
+    unmarshal_VkImageFormatProperties(vkStream, rootType, (VkImageFormatProperties*)(&forUnmarshaling->imageFormatProperties));
     vkStream->read((VkExternalMemoryFeatureFlagsNV*)&forUnmarshaling->externalMemoryFeatures, sizeof(VkExternalMemoryFeatureFlagsNV));
     vkStream->read((VkExternalMemoryHandleTypeFlagsNV*)&forUnmarshaling->exportFromImportedHandleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     vkStream->read((VkExternalMemoryHandleTypeFlagsNV*)&forUnmarshaling->compatibleHandleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
@@ -10447,37 +13905,61 @@
 #ifdef VK_NV_external_memory
 void marshal_VkExternalMemoryImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
 }
 
 void unmarshal_VkExternalMemoryImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryImageCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagsNV*)&forUnmarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
 }
 
 void marshal_VkExportMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
 }
 
 void unmarshal_VkExportMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryAllocateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagsNV*)&forUnmarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
 }
 
@@ -10485,30 +13967,48 @@
 #ifdef VK_NV_external_memory_win32
 void marshal_VkImportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     vkStream->write((HANDLE*)&forMarshaling->handle, sizeof(HANDLE));
 }
 
 void unmarshal_VkImportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryWin32HandleInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagsNV*)&forUnmarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     vkStream->read((HANDLE*)&forUnmarshaling->handle, sizeof(HANDLE));
 }
 
 void marshal_VkExportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     vkStream->putBe64(cgen_var_0);
@@ -10521,10 +14021,16 @@
 
 void unmarshal_VkExportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryWin32HandleInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     // WARNING PTR CHECK
     const SECURITY_ATTRIBUTES* check_pAttributes;
     check_pAttributes = (const SECURITY_ATTRIBUTES*)(uintptr_t)vkStream->getBe64();
@@ -10543,10 +14049,16 @@
 #ifdef VK_NV_win32_keyed_mutex
 void marshal_VkWin32KeyedMutexAcquireReleaseInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->acquireCount, sizeof(uint32_t));
     if (forMarshaling->acquireCount)
     {
@@ -10570,10 +14082,16 @@
 
 void unmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWin32KeyedMutexAcquireReleaseInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->acquireCount, sizeof(uint32_t));
     if (forUnmarshaling->acquireCount)
     {
@@ -10599,20 +14117,32 @@
 #ifdef VK_EXT_validation_flags
 void marshal_VkValidationFlagsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->disabledValidationCheckCount, sizeof(uint32_t));
     vkStream->write((const VkValidationCheckEXT*)forMarshaling->pDisabledValidationChecks, forMarshaling->disabledValidationCheckCount * sizeof(const VkValidationCheckEXT));
 }
 
 void unmarshal_VkValidationFlagsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkValidationFlagsEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->disabledValidationCheckCount, sizeof(uint32_t));
     vkStream->read((VkValidationCheckEXT*)forUnmarshaling->pDisabledValidationChecks, forUnmarshaling->disabledValidationCheckCount * sizeof(const VkValidationCheckEXT));
 }
@@ -10621,10 +14151,16 @@
 #ifdef VK_NN_vi_surface
 void marshal_VkViSurfaceCreateInfoNN(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkViSurfaceCreateFlagsNN*)&forMarshaling->flags, sizeof(VkViSurfaceCreateFlagsNN));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->window;
@@ -10637,10 +14173,16 @@
 
 void unmarshal_VkViSurfaceCreateInfoNN(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViSurfaceCreateInfoNN* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkViSurfaceCreateFlagsNN*)&forUnmarshaling->flags, sizeof(VkViSurfaceCreateFlagsNN));
     // WARNING PTR CHECK
     void* check_window;
@@ -10663,19 +14205,31 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void marshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->textureCompressionASTC_HDR, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->textureCompressionASTC_HDR, sizeof(VkBool32));
 }
 
@@ -10683,37 +14237,61 @@
 #ifdef VK_EXT_astc_decode_mode
 void marshal_VkImageViewASTCDecodeModeEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFormat*)&forMarshaling->decodeMode, sizeof(VkFormat));
 }
 
 void unmarshal_VkImageViewASTCDecodeModeEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewASTCDecodeModeEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFormat*)&forUnmarshaling->decodeMode, sizeof(VkFormat));
 }
 
 void marshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->decodeModeSharedExponent, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceASTCDecodeFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->decodeModeSharedExponent, sizeof(VkBool32));
 }
 
@@ -10721,10 +14299,16 @@
 #ifdef VK_EXT_conditional_rendering
 void marshal_VkConditionalRenderingBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -10734,10 +14318,16 @@
 
 void unmarshal_VkConditionalRenderingBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkConditionalRenderingBeginInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -10747,39 +14337,63 @@
 
 void marshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->conditionalRendering, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->inheritedConditionalRendering, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceConditionalRenderingFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->conditionalRendering, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->inheritedConditionalRendering, sizeof(VkBool32));
 }
 
 void marshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->conditionalRenderingEnable, sizeof(VkBool32));
 }
 
 void unmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferInheritanceConditionalRenderingInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->conditionalRenderingEnable, sizeof(VkBool32));
 }
 
@@ -10787,26 +14401,36 @@
 #ifdef VK_NV_clip_space_w_scaling
 void marshal_VkViewportWScalingNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportWScalingNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)&forMarshaling->xcoeff, sizeof(float));
     vkStream->write((float*)&forMarshaling->ycoeff, sizeof(float));
 }
 
 void unmarshal_VkViewportWScalingNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViewportWScalingNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)&forUnmarshaling->xcoeff, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->ycoeff, sizeof(float));
 }
 
 void marshal_VkPipelineViewportWScalingStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->viewportWScalingEnable, sizeof(VkBool32));
     vkStream->write((uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -10818,7 +14442,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
             {
-                marshal_VkViewportWScalingNV(vkStream, (const VkViewportWScalingNV*)(forMarshaling->pViewportWScalings + i));
+                marshal_VkViewportWScalingNV(vkStream, rootType, (const VkViewportWScalingNV*)(forMarshaling->pViewportWScalings + i));
             }
         }
     }
@@ -10826,10 +14450,16 @@
 
 void unmarshal_VkPipelineViewportWScalingStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportWScalingStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->viewportWScalingEnable, sizeof(VkBool32));
     vkStream->read((uint32_t*)&forUnmarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -10845,7 +14475,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->viewportCount; ++i)
             {
-                unmarshal_VkViewportWScalingNV(vkStream, (VkViewportWScalingNV*)(forUnmarshaling->pViewportWScalings + i));
+                unmarshal_VkViewportWScalingNV(vkStream, rootType, (VkViewportWScalingNV*)(forUnmarshaling->pViewportWScalings + i));
             }
         }
     }
@@ -10859,15 +14489,21 @@
 #ifdef VK_EXT_display_surface_counter
 void marshal_VkSurfaceCapabilities2EXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->minImageCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxImageCount, sizeof(uint32_t));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->currentExtent));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minImageExtent));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxImageExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->currentExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minImageExtent));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxImageExtent));
     vkStream->write((uint32_t*)&forMarshaling->maxImageArrayLayers, sizeof(uint32_t));
     vkStream->write((VkSurfaceTransformFlagsKHR*)&forMarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     vkStream->write((VkSurfaceTransformFlagBitsKHR*)&forMarshaling->currentTransform, sizeof(VkSurfaceTransformFlagBitsKHR));
@@ -10878,15 +14514,21 @@
 
 void unmarshal_VkSurfaceCapabilities2EXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilities2EXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->minImageCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageCount, sizeof(uint32_t));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->currentExtent));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->minImageExtent));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxImageExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->currentExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->minImageExtent));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxImageExtent));
     vkStream->read((uint32_t*)&forUnmarshaling->maxImageArrayLayers, sizeof(uint32_t));
     vkStream->read((VkSurfaceTransformFlagsKHR*)&forUnmarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     vkStream->read((VkSurfaceTransformFlagBitsKHR*)&forUnmarshaling->currentTransform, sizeof(VkSurfaceTransformFlagBitsKHR));
@@ -10899,73 +14541,121 @@
 #ifdef VK_EXT_display_control
 void marshal_VkDisplayPowerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDisplayPowerStateEXT*)&forMarshaling->powerState, sizeof(VkDisplayPowerStateEXT));
 }
 
 void unmarshal_VkDisplayPowerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPowerInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDisplayPowerStateEXT*)&forUnmarshaling->powerState, sizeof(VkDisplayPowerStateEXT));
 }
 
 void marshal_VkDeviceEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceEventTypeEXT*)&forMarshaling->deviceEvent, sizeof(VkDeviceEventTypeEXT));
 }
 
 void unmarshal_VkDeviceEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceEventInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceEventTypeEXT*)&forUnmarshaling->deviceEvent, sizeof(VkDeviceEventTypeEXT));
 }
 
 void marshal_VkDisplayEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDisplayEventTypeEXT*)&forMarshaling->displayEvent, sizeof(VkDisplayEventTypeEXT));
 }
 
 void unmarshal_VkDisplayEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayEventInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDisplayEventTypeEXT*)&forUnmarshaling->displayEvent, sizeof(VkDisplayEventTypeEXT));
 }
 
 void marshal_VkSwapchainCounterCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSurfaceCounterFlagsEXT*)&forMarshaling->surfaceCounters, sizeof(VkSurfaceCounterFlagsEXT));
 }
 
 void unmarshal_VkSwapchainCounterCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSwapchainCounterCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSurfaceCounterFlagsEXT*)&forUnmarshaling->surfaceCounters, sizeof(VkSurfaceCounterFlagsEXT));
 }
 
@@ -10973,22 +14663,28 @@
 #ifdef VK_GOOGLE_display_timing
 void marshal_VkRefreshCycleDurationGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint64_t*)&forMarshaling->refreshDuration, sizeof(uint64_t));
 }
 
 void unmarshal_VkRefreshCycleDurationGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRefreshCycleDurationGOOGLE* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint64_t*)&forUnmarshaling->refreshDuration, sizeof(uint64_t));
 }
 
 void marshal_VkPastPresentationTimingGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->presentID, sizeof(uint32_t));
     vkStream->write((uint64_t*)&forMarshaling->desiredPresentTime, sizeof(uint64_t));
     vkStream->write((uint64_t*)&forMarshaling->actualPresentTime, sizeof(uint64_t));
@@ -10998,8 +14694,10 @@
 
 void unmarshal_VkPastPresentationTimingGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPastPresentationTimingGOOGLE* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->presentID, sizeof(uint32_t));
     vkStream->read((uint64_t*)&forUnmarshaling->desiredPresentTime, sizeof(uint64_t));
     vkStream->read((uint64_t*)&forUnmarshaling->actualPresentTime, sizeof(uint64_t));
@@ -11009,26 +14707,36 @@
 
 void marshal_VkPresentTimeGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->presentID, sizeof(uint32_t));
     vkStream->write((uint64_t*)&forMarshaling->desiredPresentTime, sizeof(uint64_t));
 }
 
 void unmarshal_VkPresentTimeGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentTimeGOOGLE* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->presentID, sizeof(uint32_t));
     vkStream->read((uint64_t*)&forUnmarshaling->desiredPresentTime, sizeof(uint64_t));
 }
 
 void marshal_VkPresentTimesInfoGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->swapchainCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pTimes;
@@ -11039,7 +14747,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->swapchainCount; ++i)
             {
-                marshal_VkPresentTimeGOOGLE(vkStream, (const VkPresentTimeGOOGLE*)(forMarshaling->pTimes + i));
+                marshal_VkPresentTimeGOOGLE(vkStream, rootType, (const VkPresentTimeGOOGLE*)(forMarshaling->pTimes + i));
             }
         }
     }
@@ -11047,10 +14755,16 @@
 
 void unmarshal_VkPresentTimesInfoGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentTimesInfoGOOGLE* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->swapchainCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkPresentTimeGOOGLE* check_pTimes;
@@ -11065,7 +14779,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->swapchainCount; ++i)
             {
-                unmarshal_VkPresentTimeGOOGLE(vkStream, (VkPresentTimeGOOGLE*)(forUnmarshaling->pTimes + i));
+                unmarshal_VkPresentTimeGOOGLE(vkStream, rootType, (VkPresentTimeGOOGLE*)(forUnmarshaling->pTimes + i));
             }
         }
     }
@@ -11081,19 +14795,31 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void marshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->perViewPositionAllComponents, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->perViewPositionAllComponents, sizeof(VkBool32));
 }
 
@@ -11101,8 +14827,10 @@
 #ifdef VK_NV_viewport_swizzle
 void marshal_VkViewportSwizzleNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkViewportCoordinateSwizzleNV*)&forMarshaling->x, sizeof(VkViewportCoordinateSwizzleNV));
     vkStream->write((VkViewportCoordinateSwizzleNV*)&forMarshaling->y, sizeof(VkViewportCoordinateSwizzleNV));
     vkStream->write((VkViewportCoordinateSwizzleNV*)&forMarshaling->z, sizeof(VkViewportCoordinateSwizzleNV));
@@ -11111,8 +14839,10 @@
 
 void unmarshal_VkViewportSwizzleNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViewportSwizzleNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkViewportCoordinateSwizzleNV*)&forUnmarshaling->x, sizeof(VkViewportCoordinateSwizzleNV));
     vkStream->read((VkViewportCoordinateSwizzleNV*)&forUnmarshaling->y, sizeof(VkViewportCoordinateSwizzleNV));
     vkStream->read((VkViewportCoordinateSwizzleNV*)&forUnmarshaling->z, sizeof(VkViewportCoordinateSwizzleNV));
@@ -11121,10 +14851,16 @@
 
 void marshal_VkPipelineViewportSwizzleStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineViewportSwizzleStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineViewportSwizzleStateCreateFlagsNV));
     vkStream->write((uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -11136,7 +14872,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
             {
-                marshal_VkViewportSwizzleNV(vkStream, (const VkViewportSwizzleNV*)(forMarshaling->pViewportSwizzles + i));
+                marshal_VkViewportSwizzleNV(vkStream, rootType, (const VkViewportSwizzleNV*)(forMarshaling->pViewportSwizzles + i));
             }
         }
     }
@@ -11144,10 +14880,16 @@
 
 void unmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportSwizzleStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineViewportSwizzleStateCreateFlagsNV*)&forUnmarshaling->flags, sizeof(VkPipelineViewportSwizzleStateCreateFlagsNV));
     vkStream->read((uint32_t*)&forUnmarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -11163,7 +14905,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->viewportCount; ++i)
             {
-                unmarshal_VkViewportSwizzleNV(vkStream, (VkViewportSwizzleNV*)(forUnmarshaling->pViewportSwizzles + i));
+                unmarshal_VkViewportSwizzleNV(vkStream, rootType, (VkViewportSwizzleNV*)(forUnmarshaling->pViewportSwizzles + i));
             }
         }
     }
@@ -11173,28 +14915,46 @@
 #ifdef VK_EXT_discard_rectangles
 void marshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxDiscardRectangles, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDiscardRectanglePropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxDiscardRectangles, sizeof(uint32_t));
 }
 
 void marshal_VkPipelineDiscardRectangleStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineDiscardRectangleStateCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineDiscardRectangleStateCreateFlagsEXT));
     vkStream->write((VkDiscardRectangleModeEXT*)&forMarshaling->discardRectangleMode, sizeof(VkDiscardRectangleModeEXT));
     vkStream->write((uint32_t*)&forMarshaling->discardRectangleCount, sizeof(uint32_t));
@@ -11207,7 +14967,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->discardRectangleCount; ++i)
             {
-                marshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pDiscardRectangles + i));
+                marshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pDiscardRectangles + i));
             }
         }
     }
@@ -11215,10 +14975,16 @@
 
 void unmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineDiscardRectangleStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineDiscardRectangleStateCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkPipelineDiscardRectangleStateCreateFlagsEXT));
     vkStream->read((VkDiscardRectangleModeEXT*)&forUnmarshaling->discardRectangleMode, sizeof(VkDiscardRectangleModeEXT));
     vkStream->read((uint32_t*)&forUnmarshaling->discardRectangleCount, sizeof(uint32_t));
@@ -11235,7 +15001,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->discardRectangleCount; ++i)
             {
-                unmarshal_VkRect2D(vkStream, (VkRect2D*)(forUnmarshaling->pDiscardRectangles + i));
+                unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(forUnmarshaling->pDiscardRectangles + i));
             }
         }
     }
@@ -11245,10 +15011,16 @@
 #ifdef VK_EXT_conservative_rasterization
 void marshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((float*)&forMarshaling->primitiveOverestimationSize, sizeof(float));
     vkStream->write((float*)&forMarshaling->maxExtraPrimitiveOverestimationSize, sizeof(float));
     vkStream->write((float*)&forMarshaling->extraPrimitiveOverestimationSizeGranularity, sizeof(float));
@@ -11262,10 +15034,16 @@
 
 void unmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((float*)&forUnmarshaling->primitiveOverestimationSize, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->maxExtraPrimitiveOverestimationSize, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->extraPrimitiveOverestimationSizeGranularity, sizeof(float));
@@ -11279,10 +15057,16 @@
 
 void marshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineRasterizationConservativeStateCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineRasterizationConservativeStateCreateFlagsEXT));
     vkStream->write((VkConservativeRasterizationModeEXT*)&forMarshaling->conservativeRasterizationMode, sizeof(VkConservativeRasterizationModeEXT));
     vkStream->write((float*)&forMarshaling->extraPrimitiveOverestimationSize, sizeof(float));
@@ -11290,10 +15074,16 @@
 
 void unmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationConservativeStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineRasterizationConservativeStateCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkPipelineRasterizationConservativeStateCreateFlagsEXT));
     vkStream->read((VkConservativeRasterizationModeEXT*)&forUnmarshaling->conservativeRasterizationMode, sizeof(VkConservativeRasterizationModeEXT));
     vkStream->read((float*)&forUnmarshaling->extraPrimitiveOverestimationSize, sizeof(float));
@@ -11303,38 +15093,62 @@
 #ifdef VK_EXT_depth_clip_enable
 void marshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->depthClipEnable, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDepthClipEnableFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->depthClipEnable, sizeof(VkBool32));
 }
 
 void marshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineRasterizationDepthClipStateCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineRasterizationDepthClipStateCreateFlagsEXT));
     vkStream->write((VkBool32*)&forMarshaling->depthClipEnable, sizeof(VkBool32));
 }
 
 void unmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationDepthClipStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineRasterizationDepthClipStateCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkPipelineRasterizationDepthClipStateCreateFlagsEXT));
     vkStream->read((VkBool32*)&forUnmarshaling->depthClipEnable, sizeof(VkBool32));
 }
@@ -11345,30 +15159,40 @@
 #ifdef VK_EXT_hdr_metadata
 void marshal_VkXYColorEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXYColorEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)&forMarshaling->x, sizeof(float));
     vkStream->write((float*)&forMarshaling->y, sizeof(float));
 }
 
 void unmarshal_VkXYColorEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkXYColorEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)&forUnmarshaling->x, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->y, sizeof(float));
 }
 
 void marshal_VkHdrMetadataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->displayPrimaryRed));
-    marshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->displayPrimaryGreen));
-    marshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->displayPrimaryBlue));
-    marshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->whitePoint));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->displayPrimaryRed));
+    marshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->displayPrimaryGreen));
+    marshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->displayPrimaryBlue));
+    marshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->whitePoint));
     vkStream->write((float*)&forMarshaling->maxLuminance, sizeof(float));
     vkStream->write((float*)&forMarshaling->minLuminance, sizeof(float));
     vkStream->write((float*)&forMarshaling->maxContentLightLevel, sizeof(float));
@@ -11377,14 +15201,20 @@
 
 void unmarshal_VkHdrMetadataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkHdrMetadataEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forUnmarshaling->displayPrimaryRed));
-    unmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forUnmarshaling->displayPrimaryGreen));
-    unmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forUnmarshaling->displayPrimaryBlue));
-    unmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forUnmarshaling->whitePoint));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forUnmarshaling->displayPrimaryRed));
+    unmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forUnmarshaling->displayPrimaryGreen));
+    unmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forUnmarshaling->displayPrimaryBlue));
+    unmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forUnmarshaling->whitePoint));
     vkStream->read((float*)&forUnmarshaling->maxLuminance, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->minLuminance, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->maxContentLightLevel, sizeof(float));
@@ -11395,10 +15225,16 @@
 #ifdef VK_MVK_ios_surface
 void marshal_VkIOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkIOSSurfaceCreateFlagsMVK*)&forMarshaling->flags, sizeof(VkIOSSurfaceCreateFlagsMVK));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pView;
@@ -11411,10 +15247,16 @@
 
 void unmarshal_VkIOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIOSSurfaceCreateInfoMVK* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkIOSSurfaceCreateFlagsMVK*)&forUnmarshaling->flags, sizeof(VkIOSSurfaceCreateFlagsMVK));
     // WARNING PTR CHECK
     const void* check_pView;
@@ -11433,10 +15275,16 @@
 #ifdef VK_MVK_macos_surface
 void marshal_VkMacOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkMacOSSurfaceCreateFlagsMVK*)&forMarshaling->flags, sizeof(VkMacOSSurfaceCreateFlagsMVK));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pView;
@@ -11449,10 +15297,16 @@
 
 void unmarshal_VkMacOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMacOSSurfaceCreateInfoMVK* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkMacOSSurfaceCreateFlagsMVK*)&forUnmarshaling->flags, sizeof(VkMacOSSurfaceCreateFlagsMVK));
     // WARNING PTR CHECK
     const void* check_pView;
@@ -11477,30 +15331,48 @@
 #ifdef VK_EXT_debug_utils
 void marshal_VkDebugUtilsLabelEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->putString(forMarshaling->pLabelName);
     vkStream->write((float*)forMarshaling->color, 4 * sizeof(float));
 }
 
 void unmarshal_VkDebugUtilsLabelEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsLabelEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->loadStringInPlace((char**)&forUnmarshaling->pLabelName);
     vkStream->read((float*)forUnmarshaling->color, 4 * sizeof(float));
 }
 
 void marshal_VkDebugUtilsObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkObjectType*)&forMarshaling->objectType, sizeof(VkObjectType));
     vkStream->write((uint64_t*)&forMarshaling->objectHandle, sizeof(uint64_t));
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
@@ -11521,10 +15393,16 @@
 
 void unmarshal_VkDebugUtilsObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsObjectNameInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkObjectType*)&forUnmarshaling->objectType, sizeof(VkObjectType));
     vkStream->read((uint64_t*)&forUnmarshaling->objectHandle, sizeof(uint64_t));
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
@@ -11549,10 +15427,16 @@
 
 void marshal_VkDebugUtilsMessengerCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDebugUtilsMessengerCallbackDataFlagsEXT*)&forMarshaling->flags, sizeof(VkDebugUtilsMessengerCallbackDataFlagsEXT));
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
@@ -11580,7 +15464,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->queueLabelCount; ++i)
             {
-                marshal_VkDebugUtilsLabelEXT(vkStream, (VkDebugUtilsLabelEXT*)(forMarshaling->pQueueLabels + i));
+                marshal_VkDebugUtilsLabelEXT(vkStream, rootType, (VkDebugUtilsLabelEXT*)(forMarshaling->pQueueLabels + i));
             }
         }
     }
@@ -11594,7 +15478,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->cmdBufLabelCount; ++i)
             {
-                marshal_VkDebugUtilsLabelEXT(vkStream, (VkDebugUtilsLabelEXT*)(forMarshaling->pCmdBufLabels + i));
+                marshal_VkDebugUtilsLabelEXT(vkStream, rootType, (VkDebugUtilsLabelEXT*)(forMarshaling->pCmdBufLabels + i));
             }
         }
     }
@@ -11608,7 +15492,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->objectCount; ++i)
             {
-                marshal_VkDebugUtilsObjectNameInfoEXT(vkStream, (VkDebugUtilsObjectNameInfoEXT*)(forMarshaling->pObjects + i));
+                marshal_VkDebugUtilsObjectNameInfoEXT(vkStream, rootType, (VkDebugUtilsObjectNameInfoEXT*)(forMarshaling->pObjects + i));
             }
         }
     }
@@ -11616,10 +15500,16 @@
 
 void unmarshal_VkDebugUtilsMessengerCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsMessengerCallbackDataEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDebugUtilsMessengerCallbackDataFlagsEXT*)&forUnmarshaling->flags, sizeof(VkDebugUtilsMessengerCallbackDataFlagsEXT));
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
@@ -11655,7 +15545,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->queueLabelCount; ++i)
             {
-                unmarshal_VkDebugUtilsLabelEXT(vkStream, (VkDebugUtilsLabelEXT*)(forUnmarshaling->pQueueLabels + i));
+                unmarshal_VkDebugUtilsLabelEXT(vkStream, rootType, (VkDebugUtilsLabelEXT*)(forUnmarshaling->pQueueLabels + i));
             }
         }
     }
@@ -11673,7 +15563,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->cmdBufLabelCount; ++i)
             {
-                unmarshal_VkDebugUtilsLabelEXT(vkStream, (VkDebugUtilsLabelEXT*)(forUnmarshaling->pCmdBufLabels + i));
+                unmarshal_VkDebugUtilsLabelEXT(vkStream, rootType, (VkDebugUtilsLabelEXT*)(forUnmarshaling->pCmdBufLabels + i));
             }
         }
     }
@@ -11691,7 +15581,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->objectCount; ++i)
             {
-                unmarshal_VkDebugUtilsObjectNameInfoEXT(vkStream, (VkDebugUtilsObjectNameInfoEXT*)(forUnmarshaling->pObjects + i));
+                unmarshal_VkDebugUtilsObjectNameInfoEXT(vkStream, rootType, (VkDebugUtilsObjectNameInfoEXT*)(forUnmarshaling->pObjects + i));
             }
         }
     }
@@ -11699,10 +15589,16 @@
 
 void marshal_VkDebugUtilsMessengerCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDebugUtilsMessengerCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkDebugUtilsMessengerCreateFlagsEXT));
     vkStream->write((VkDebugUtilsMessageSeverityFlagsEXT*)&forMarshaling->messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagsEXT));
     vkStream->write((VkDebugUtilsMessageTypeFlagsEXT*)&forMarshaling->messageType, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
@@ -11719,10 +15615,16 @@
 
 void unmarshal_VkDebugUtilsMessengerCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsMessengerCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDebugUtilsMessengerCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkDebugUtilsMessengerCreateFlagsEXT));
     vkStream->read((VkDebugUtilsMessageSeverityFlagsEXT*)&forUnmarshaling->messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagsEXT));
     vkStream->read((VkDebugUtilsMessageTypeFlagsEXT*)&forUnmarshaling->messageType, sizeof(VkDebugUtilsMessageTypeFlagsEXT));
@@ -11742,10 +15644,16 @@
 
 void marshal_VkDebugUtilsObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkObjectType*)&forMarshaling->objectType, sizeof(VkObjectType));
     vkStream->write((uint64_t*)&forMarshaling->objectHandle, sizeof(uint64_t));
     vkStream->write((uint64_t*)&forMarshaling->tagName, sizeof(uint64_t));
@@ -11756,10 +15664,16 @@
 
 void unmarshal_VkDebugUtilsObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsObjectTagInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkObjectType*)&forUnmarshaling->objectType, sizeof(VkObjectType));
     vkStream->read((uint64_t*)&forUnmarshaling->objectHandle, sizeof(uint64_t));
     vkStream->read((uint64_t*)&forUnmarshaling->tagName, sizeof(uint64_t));
@@ -11771,52 +15685,82 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void marshal_VkAndroidHardwareBufferUsageANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->androidHardwareBufferUsage, sizeof(uint64_t));
 }
 
 void unmarshal_VkAndroidHardwareBufferUsageANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidHardwareBufferUsageANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->androidHardwareBufferUsage, sizeof(uint64_t));
 }
 
 void marshal_VkAndroidHardwareBufferPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->allocationSize, sizeof(VkDeviceSize));
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void unmarshal_VkAndroidHardwareBufferPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidHardwareBufferPropertiesANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->allocationSize, sizeof(VkDeviceSize));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void marshal_VkAndroidHardwareBufferFormatPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     vkStream->write((uint64_t*)&forMarshaling->externalFormat, sizeof(uint64_t));
     vkStream->write((VkFormatFeatureFlags*)&forMarshaling->formatFeatures, sizeof(VkFormatFeatureFlags));
-    marshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forMarshaling->samplerYcbcrConversionComponents));
+    marshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forMarshaling->samplerYcbcrConversionComponents));
     vkStream->write((VkSamplerYcbcrModelConversion*)&forMarshaling->suggestedYcbcrModel, sizeof(VkSamplerYcbcrModelConversion));
     vkStream->write((VkSamplerYcbcrRange*)&forMarshaling->suggestedYcbcrRange, sizeof(VkSamplerYcbcrRange));
     vkStream->write((VkChromaLocation*)&forMarshaling->suggestedXChromaOffset, sizeof(VkChromaLocation));
@@ -11825,14 +15769,20 @@
 
 void unmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidHardwareBufferFormatPropertiesANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
     vkStream->read((uint64_t*)&forUnmarshaling->externalFormat, sizeof(uint64_t));
     vkStream->read((VkFormatFeatureFlags*)&forUnmarshaling->formatFeatures, sizeof(VkFormatFeatureFlags));
-    unmarshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forUnmarshaling->samplerYcbcrConversionComponents));
+    unmarshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forUnmarshaling->samplerYcbcrConversionComponents));
     vkStream->read((VkSamplerYcbcrModelConversion*)&forUnmarshaling->suggestedYcbcrModel, sizeof(VkSamplerYcbcrModelConversion));
     vkStream->read((VkSamplerYcbcrRange*)&forUnmarshaling->suggestedYcbcrRange, sizeof(VkSamplerYcbcrRange));
     vkStream->read((VkChromaLocation*)&forUnmarshaling->suggestedXChromaOffset, sizeof(VkChromaLocation));
@@ -11841,28 +15791,46 @@
 
 void marshal_VkImportAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((AHardwareBuffer*)forMarshaling->buffer, sizeof(AHardwareBuffer));
 }
 
 void unmarshal_VkImportAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportAndroidHardwareBufferInfoANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((AHardwareBuffer*)forUnmarshaling->buffer, sizeof(AHardwareBuffer));
 }
 
 void marshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkDeviceMemory_u64(&forMarshaling->memory, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -11870,10 +15838,16 @@
 
 void unmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryGetAndroidHardwareBufferInfoANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkDeviceMemory(&cgen_var_0, (VkDeviceMemory*)&forUnmarshaling->memory, 1);
@@ -11881,19 +15855,31 @@
 
 void marshal_VkExternalFormatANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->externalFormat, sizeof(uint64_t));
 }
 
 void unmarshal_VkExternalFormatANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalFormatANDROID* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->externalFormat, sizeof(uint64_t));
 }
 
@@ -11909,30 +15895,48 @@
 #ifdef VK_EXT_inline_uniform_block
 void marshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->inlineUniformBlock, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->descriptorBindingInlineUniformBlockUpdateAfterBind, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceInlineUniformBlockFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->inlineUniformBlock, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->descriptorBindingInlineUniformBlockUpdateAfterBind, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxInlineUniformBlockSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxPerStageDescriptorInlineUniformBlocks, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, sizeof(uint32_t));
@@ -11942,10 +15946,16 @@
 
 void unmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceInlineUniformBlockPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxInlineUniformBlockSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxPerStageDescriptorInlineUniformBlocks, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxPerStageDescriptorUpdateAfterBindInlineUniformBlocks, sizeof(uint32_t));
@@ -11955,39 +15965,63 @@
 
 void marshal_VkWriteDescriptorSetInlineUniformBlockEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->dataSize, sizeof(uint32_t));
     vkStream->write((const void*)forMarshaling->pData, forMarshaling->dataSize * sizeof(const uint8_t));
 }
 
 void unmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSetInlineUniformBlockEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->dataSize, sizeof(uint32_t));
     vkStream->read((void*)forUnmarshaling->pData, forUnmarshaling->dataSize * sizeof(const uint8_t));
 }
 
 void marshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxInlineUniformBlockBindings, sizeof(uint32_t));
 }
 
 void unmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorPoolInlineUniformBlockCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxInlineUniformBlockBindings, sizeof(uint32_t));
 }
 
@@ -11997,100 +16031,130 @@
 #ifdef VK_EXT_sample_locations
 void marshal_VkSampleLocationEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)&forMarshaling->x, sizeof(float));
     vkStream->write((float*)&forMarshaling->y, sizeof(float));
 }
 
 void unmarshal_VkSampleLocationEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSampleLocationEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)&forUnmarshaling->x, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->y, sizeof(float));
 }
 
 void marshal_VkSampleLocationsInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->sampleLocationsPerPixel, sizeof(VkSampleCountFlagBits));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->sampleLocationGridSize));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->sampleLocationGridSize));
     vkStream->write((uint32_t*)&forMarshaling->sampleLocationsCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->sampleLocationsCount; ++i)
         {
-            marshal_VkSampleLocationEXT(vkStream, (const VkSampleLocationEXT*)(forMarshaling->pSampleLocations + i));
+            marshal_VkSampleLocationEXT(vkStream, rootType, (const VkSampleLocationEXT*)(forMarshaling->pSampleLocations + i));
         }
     }
 }
 
 void unmarshal_VkSampleLocationsInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSampleLocationsInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->sampleLocationsPerPixel, sizeof(VkSampleCountFlagBits));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->sampleLocationGridSize));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->sampleLocationGridSize));
     vkStream->read((uint32_t*)&forUnmarshaling->sampleLocationsCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->sampleLocationsCount; ++i)
         {
-            unmarshal_VkSampleLocationEXT(vkStream, (VkSampleLocationEXT*)(forUnmarshaling->pSampleLocations + i));
+            unmarshal_VkSampleLocationEXT(vkStream, rootType, (VkSampleLocationEXT*)(forUnmarshaling->pSampleLocations + i));
         }
     }
 }
 
 void marshal_VkAttachmentSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->attachmentIndex, sizeof(uint32_t));
-    marshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo));
+    marshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo));
 }
 
 void unmarshal_VkAttachmentSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentSampleLocationsEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->attachmentIndex, sizeof(uint32_t));
-    unmarshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forUnmarshaling->sampleLocationsInfo));
+    unmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forUnmarshaling->sampleLocationsInfo));
 }
 
 void marshal_VkSubpassSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->subpassIndex, sizeof(uint32_t));
-    marshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo));
+    marshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo));
 }
 
 void unmarshal_VkSubpassSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassSampleLocationsEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->subpassIndex, sizeof(uint32_t));
-    unmarshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forUnmarshaling->sampleLocationsInfo));
+    unmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forUnmarshaling->sampleLocationsInfo));
 }
 
 void marshal_VkRenderPassSampleLocationsBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->attachmentInitialSampleLocationsCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentInitialSampleLocationsCount; ++i)
         {
-            marshal_VkAttachmentSampleLocationsEXT(vkStream, (const VkAttachmentSampleLocationsEXT*)(forMarshaling->pAttachmentInitialSampleLocations + i));
+            marshal_VkAttachmentSampleLocationsEXT(vkStream, rootType, (const VkAttachmentSampleLocationsEXT*)(forMarshaling->pAttachmentInitialSampleLocations + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->postSubpassSampleLocationsCount, sizeof(uint32_t));
@@ -12098,23 +16162,29 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->postSubpassSampleLocationsCount; ++i)
         {
-            marshal_VkSubpassSampleLocationsEXT(vkStream, (const VkSubpassSampleLocationsEXT*)(forMarshaling->pPostSubpassSampleLocations + i));
+            marshal_VkSubpassSampleLocationsEXT(vkStream, rootType, (const VkSubpassSampleLocationsEXT*)(forMarshaling->pPostSubpassSampleLocations + i));
         }
     }
 }
 
 void unmarshal_VkRenderPassSampleLocationsBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassSampleLocationsBeginInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->attachmentInitialSampleLocationsCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->attachmentInitialSampleLocationsCount; ++i)
         {
-            unmarshal_VkAttachmentSampleLocationsEXT(vkStream, (VkAttachmentSampleLocationsEXT*)(forUnmarshaling->pAttachmentInitialSampleLocations + i));
+            unmarshal_VkAttachmentSampleLocationsEXT(vkStream, rootType, (VkAttachmentSampleLocationsEXT*)(forUnmarshaling->pAttachmentInitialSampleLocations + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->postSubpassSampleLocationsCount, sizeof(uint32_t));
@@ -12122,39 +16192,57 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->postSubpassSampleLocationsCount; ++i)
         {
-            unmarshal_VkSubpassSampleLocationsEXT(vkStream, (VkSubpassSampleLocationsEXT*)(forUnmarshaling->pPostSubpassSampleLocations + i));
+            unmarshal_VkSubpassSampleLocationsEXT(vkStream, rootType, (VkSubpassSampleLocationsEXT*)(forUnmarshaling->pPostSubpassSampleLocations + i));
         }
     }
 }
 
 void marshal_VkPipelineSampleLocationsStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->sampleLocationsEnable, sizeof(VkBool32));
-    marshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo));
+    marshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo));
 }
 
 void unmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineSampleLocationsStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->sampleLocationsEnable, sizeof(VkBool32));
-    unmarshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forUnmarshaling->sampleLocationsInfo));
+    unmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forUnmarshaling->sampleLocationsInfo));
 }
 
 void marshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSampleCountFlags*)&forMarshaling->sampleLocationSampleCounts, sizeof(VkSampleCountFlags));
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize));
     vkStream->write((float*)forMarshaling->sampleLocationCoordinateRange, 2 * sizeof(float));
     vkStream->write((uint32_t*)&forMarshaling->sampleLocationSubPixelBits, sizeof(uint32_t));
     vkStream->write((VkBool32*)&forMarshaling->variableSampleLocations, sizeof(VkBool32));
@@ -12162,12 +16250,18 @@
 
 void unmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSampleLocationsPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSampleCountFlags*)&forUnmarshaling->sampleLocationSampleCounts, sizeof(VkSampleCountFlags));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxSampleLocationGridSize));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxSampleLocationGridSize));
     vkStream->read((float*)forUnmarshaling->sampleLocationCoordinateRange, 2 * sizeof(float));
     vkStream->read((uint32_t*)&forUnmarshaling->sampleLocationSubPixelBits, sizeof(uint32_t));
     vkStream->read((VkBool32*)&forUnmarshaling->variableSampleLocations, sizeof(VkBool32));
@@ -12175,48 +16269,78 @@
 
 void marshal_VkMultisamplePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize));
 }
 
 void unmarshal_VkMultisamplePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMultisamplePropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->maxSampleLocationGridSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxSampleLocationGridSize));
 }
 
 #endif
 #ifdef VK_EXT_blend_operation_advanced
 void marshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->advancedBlendCoherentOperations, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->advancedBlendCoherentOperations, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->advancedBlendMaxColorAttachments, sizeof(uint32_t));
     vkStream->write((VkBool32*)&forMarshaling->advancedBlendIndependentBlend, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->advancedBlendNonPremultipliedSrcColor, sizeof(VkBool32));
@@ -12227,10 +16351,16 @@
 
 void unmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->advancedBlendMaxColorAttachments, sizeof(uint32_t));
     vkStream->read((VkBool32*)&forUnmarshaling->advancedBlendIndependentBlend, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->advancedBlendNonPremultipliedSrcColor, sizeof(VkBool32));
@@ -12241,10 +16371,16 @@
 
 void marshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->srcPremultiplied, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->dstPremultiplied, sizeof(VkBool32));
     vkStream->write((VkBlendOverlapEXT*)&forMarshaling->blendOverlap, sizeof(VkBlendOverlapEXT));
@@ -12252,10 +16388,16 @@
 
 void unmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineColorBlendAdvancedStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->srcPremultiplied, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->dstPremultiplied, sizeof(VkBool32));
     vkStream->read((VkBlendOverlapEXT*)&forUnmarshaling->blendOverlap, sizeof(VkBlendOverlapEXT));
@@ -12265,10 +16407,16 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void marshal_VkPipelineCoverageToColorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCoverageToColorStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineCoverageToColorStateCreateFlagsNV));
     vkStream->write((VkBool32*)&forMarshaling->coverageToColorEnable, sizeof(VkBool32));
     vkStream->write((uint32_t*)&forMarshaling->coverageToColorLocation, sizeof(uint32_t));
@@ -12276,10 +16424,16 @@
 
 void unmarshal_VkPipelineCoverageToColorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCoverageToColorStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCoverageToColorStateCreateFlagsNV*)&forUnmarshaling->flags, sizeof(VkPipelineCoverageToColorStateCreateFlagsNV));
     vkStream->read((VkBool32*)&forUnmarshaling->coverageToColorEnable, sizeof(VkBool32));
     vkStream->read((uint32_t*)&forUnmarshaling->coverageToColorLocation, sizeof(uint32_t));
@@ -12289,10 +16443,16 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void marshal_VkPipelineCoverageModulationStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCoverageModulationStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineCoverageModulationStateCreateFlagsNV));
     vkStream->write((VkCoverageModulationModeNV*)&forMarshaling->coverageModulationMode, sizeof(VkCoverageModulationModeNV));
     vkStream->write((VkBool32*)&forMarshaling->coverageModulationTableEnable, sizeof(VkBool32));
@@ -12308,10 +16468,16 @@
 
 void unmarshal_VkPipelineCoverageModulationStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCoverageModulationStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCoverageModulationStateCreateFlagsNV*)&forUnmarshaling->flags, sizeof(VkPipelineCoverageModulationStateCreateFlagsNV));
     vkStream->read((VkCoverageModulationModeNV*)&forUnmarshaling->coverageModulationMode, sizeof(VkCoverageModulationModeNV));
     vkStream->read((VkBool32*)&forUnmarshaling->coverageModulationTableEnable, sizeof(VkBool32));
@@ -12335,39 +16501,63 @@
 #ifdef VK_NV_shader_sm_builtins
 void marshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->shaderSMCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->shaderWarpsPerSM, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->shaderSMCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->shaderWarpsPerSM, sizeof(uint32_t));
 }
 
 void marshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderSMBuiltins, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderSMBuiltins, sizeof(VkBool32));
 }
 
@@ -12377,8 +16567,10 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void marshal_VkDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     vkStream->write((uint32_t*)&forMarshaling->drmFormatModifierPlaneCount, sizeof(uint32_t));
     vkStream->write((VkFormatFeatureFlags*)&forMarshaling->drmFormatModifierTilingFeatures, sizeof(VkFormatFeatureFlags));
@@ -12386,8 +16578,10 @@
 
 void unmarshal_VkDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrmFormatModifierPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint64_t*)&forUnmarshaling->drmFormatModifier, sizeof(uint64_t));
     vkStream->read((uint32_t*)&forUnmarshaling->drmFormatModifierPlaneCount, sizeof(uint32_t));
     vkStream->read((VkFormatFeatureFlags*)&forUnmarshaling->drmFormatModifierTilingFeatures, sizeof(VkFormatFeatureFlags));
@@ -12395,10 +16589,16 @@
 
 void marshal_VkDrmFormatModifierPropertiesListEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->drmFormatModifierCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pDrmFormatModifierProperties;
@@ -12409,7 +16609,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->drmFormatModifierCount; ++i)
             {
-                marshal_VkDrmFormatModifierPropertiesEXT(vkStream, (VkDrmFormatModifierPropertiesEXT*)(forMarshaling->pDrmFormatModifierProperties + i));
+                marshal_VkDrmFormatModifierPropertiesEXT(vkStream, rootType, (VkDrmFormatModifierPropertiesEXT*)(forMarshaling->pDrmFormatModifierProperties + i));
             }
         }
     }
@@ -12417,10 +16617,16 @@
 
 void unmarshal_VkDrmFormatModifierPropertiesListEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrmFormatModifierPropertiesListEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->drmFormatModifierCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     VkDrmFormatModifierPropertiesEXT* check_pDrmFormatModifierProperties;
@@ -12435,7 +16641,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->drmFormatModifierCount; ++i)
             {
-                unmarshal_VkDrmFormatModifierPropertiesEXT(vkStream, (VkDrmFormatModifierPropertiesEXT*)(forUnmarshaling->pDrmFormatModifierProperties + i));
+                unmarshal_VkDrmFormatModifierPropertiesEXT(vkStream, rootType, (VkDrmFormatModifierPropertiesEXT*)(forUnmarshaling->pDrmFormatModifierProperties + i));
             }
         }
     }
@@ -12443,10 +16649,16 @@
 
 void marshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     vkStream->write((VkSharingMode*)&forMarshaling->sharingMode, sizeof(VkSharingMode));
     vkStream->write((uint32_t*)&forMarshaling->queueFamilyIndexCount, sizeof(uint32_t));
@@ -12461,10 +16673,16 @@
 
 void unmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageDrmFormatModifierInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->drmFormatModifier, sizeof(uint64_t));
     vkStream->read((VkSharingMode*)&forUnmarshaling->sharingMode, sizeof(VkSharingMode));
     vkStream->read((uint32_t*)&forUnmarshaling->queueFamilyIndexCount, sizeof(uint32_t));
@@ -12483,73 +16701,109 @@
 
 void marshal_VkImageDrmFormatModifierListCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->drmFormatModifierCount, sizeof(uint32_t));
     vkStream->write((const uint64_t*)forMarshaling->pDrmFormatModifiers, forMarshaling->drmFormatModifierCount * sizeof(const uint64_t));
 }
 
 void unmarshal_VkImageDrmFormatModifierListCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageDrmFormatModifierListCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->drmFormatModifierCount, sizeof(uint32_t));
     vkStream->read((uint64_t*)forUnmarshaling->pDrmFormatModifiers, forUnmarshaling->drmFormatModifierCount * sizeof(const uint64_t));
 }
 
 void marshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     vkStream->write((uint32_t*)&forMarshaling->drmFormatModifierPlaneCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->drmFormatModifierPlaneCount; ++i)
         {
-            marshal_VkSubresourceLayout(vkStream, (const VkSubresourceLayout*)(forMarshaling->pPlaneLayouts + i));
+            marshal_VkSubresourceLayout(vkStream, rootType, (const VkSubresourceLayout*)(forMarshaling->pPlaneLayouts + i));
         }
     }
 }
 
 void unmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageDrmFormatModifierExplicitCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->drmFormatModifier, sizeof(uint64_t));
     vkStream->read((uint32_t*)&forUnmarshaling->drmFormatModifierPlaneCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->drmFormatModifierPlaneCount; ++i)
         {
-            unmarshal_VkSubresourceLayout(vkStream, (VkSubresourceLayout*)(forUnmarshaling->pPlaneLayouts + i));
+            unmarshal_VkSubresourceLayout(vkStream, rootType, (VkSubresourceLayout*)(forUnmarshaling->pPlaneLayouts + i));
         }
     }
 }
 
 void marshal_VkImageDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
 }
 
 void unmarshal_VkImageDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageDrmFormatModifierPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->drmFormatModifier, sizeof(uint64_t));
 }
 
@@ -12557,10 +16811,16 @@
 #ifdef VK_EXT_validation_cache
 void marshal_VkValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkValidationCacheCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkValidationCacheCreateFlagsEXT));
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->initialDataSize;
     vkStream->putBe64(cgen_var_0);
@@ -12569,10 +16829,16 @@
 
 void unmarshal_VkValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkValidationCacheCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkValidationCacheCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkValidationCacheCreateFlagsEXT));
     forUnmarshaling->initialDataSize = (size_t)vkStream->getBe64();
     vkStream->read((void*)forUnmarshaling->pInitialData, forUnmarshaling->initialDataSize * sizeof(const uint8_t));
@@ -12580,10 +16846,16 @@
 
 void marshal_VkShaderModuleValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkValidationCacheEXT_u64(&forMarshaling->validationCache, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -12591,10 +16863,16 @@
 
 void unmarshal_VkShaderModuleValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderModuleValidationCacheCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkValidationCacheEXT(&cgen_var_0, (VkValidationCacheEXT*)&forUnmarshaling->validationCache, 1);
@@ -12608,26 +16886,36 @@
 #ifdef VK_NV_shading_rate_image
 void marshal_VkShadingRatePaletteNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->shadingRatePaletteEntryCount, sizeof(uint32_t));
     vkStream->write((const VkShadingRatePaletteEntryNV*)forMarshaling->pShadingRatePaletteEntries, forMarshaling->shadingRatePaletteEntryCount * sizeof(const VkShadingRatePaletteEntryNV));
 }
 
 void unmarshal_VkShadingRatePaletteNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShadingRatePaletteNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->shadingRatePaletteEntryCount, sizeof(uint32_t));
     vkStream->read((VkShadingRatePaletteEntryNV*)forUnmarshaling->pShadingRatePaletteEntries, forUnmarshaling->shadingRatePaletteEntryCount * sizeof(const VkShadingRatePaletteEntryNV));
 }
 
 void marshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shadingRateImageEnable, sizeof(VkBool32));
     vkStream->write((uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -12639,7 +16927,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
             {
-                marshal_VkShadingRatePaletteNV(vkStream, (const VkShadingRatePaletteNV*)(forMarshaling->pShadingRatePalettes + i));
+                marshal_VkShadingRatePaletteNV(vkStream, rootType, (const VkShadingRatePaletteNV*)(forMarshaling->pShadingRatePalettes + i));
             }
         }
     }
@@ -12647,10 +16935,16 @@
 
 void unmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportShadingRateImageStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shadingRateImageEnable, sizeof(VkBool32));
     vkStream->read((uint32_t*)&forUnmarshaling->viewportCount, sizeof(uint32_t));
     // WARNING PTR CHECK
@@ -12666,7 +16960,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->viewportCount; ++i)
             {
-                unmarshal_VkShadingRatePaletteNV(vkStream, (VkShadingRatePaletteNV*)(forUnmarshaling->pShadingRatePalettes + i));
+                unmarshal_VkShadingRatePaletteNV(vkStream, rootType, (VkShadingRatePaletteNV*)(forUnmarshaling->pShadingRatePalettes + i));
             }
         }
     }
@@ -12674,50 +16968,76 @@
 
 void marshal_VkPhysicalDeviceShadingRateImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shadingRateImage, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shadingRateCoarseSampleOrder, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShadingRateImageFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shadingRateImage, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shadingRateCoarseSampleOrder, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceShadingRateImagePropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->shadingRateTexelSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->shadingRateTexelSize));
     vkStream->write((uint32_t*)&forMarshaling->shadingRatePaletteSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->shadingRateMaxCoarseSamples, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShadingRateImagePropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forUnmarshaling->shadingRateTexelSize));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->shadingRateTexelSize));
     vkStream->read((uint32_t*)&forUnmarshaling->shadingRatePaletteSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->shadingRateMaxCoarseSamples, sizeof(uint32_t));
 }
 
 void marshal_VkCoarseSampleLocationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->pixelX, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->pixelY, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->sample, sizeof(uint32_t));
@@ -12725,8 +17045,10 @@
 
 void unmarshal_VkCoarseSampleLocationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCoarseSampleLocationNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->pixelX, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->pixelY, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->sample, sizeof(uint32_t));
@@ -12734,8 +17056,10 @@
 
 void marshal_VkCoarseSampleOrderCustomNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkShadingRatePaletteEntryNV*)&forMarshaling->shadingRate, sizeof(VkShadingRatePaletteEntryNV));
     vkStream->write((uint32_t*)&forMarshaling->sampleCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->sampleLocationCount, sizeof(uint32_t));
@@ -12743,15 +17067,17 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->sampleLocationCount; ++i)
         {
-            marshal_VkCoarseSampleLocationNV(vkStream, (const VkCoarseSampleLocationNV*)(forMarshaling->pSampleLocations + i));
+            marshal_VkCoarseSampleLocationNV(vkStream, rootType, (const VkCoarseSampleLocationNV*)(forMarshaling->pSampleLocations + i));
         }
     }
 }
 
 void unmarshal_VkCoarseSampleOrderCustomNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCoarseSampleOrderCustomNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkShadingRatePaletteEntryNV*)&forUnmarshaling->shadingRate, sizeof(VkShadingRatePaletteEntryNV));
     vkStream->read((uint32_t*)&forUnmarshaling->sampleCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->sampleLocationCount, sizeof(uint32_t));
@@ -12759,41 +17085,53 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->sampleLocationCount; ++i)
         {
-            unmarshal_VkCoarseSampleLocationNV(vkStream, (VkCoarseSampleLocationNV*)(forUnmarshaling->pSampleLocations + i));
+            unmarshal_VkCoarseSampleLocationNV(vkStream, rootType, (VkCoarseSampleLocationNV*)(forUnmarshaling->pSampleLocations + i));
         }
     }
 }
 
 void marshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkCoarseSampleOrderTypeNV*)&forMarshaling->sampleOrderType, sizeof(VkCoarseSampleOrderTypeNV));
     vkStream->write((uint32_t*)&forMarshaling->customSampleOrderCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->customSampleOrderCount; ++i)
         {
-            marshal_VkCoarseSampleOrderCustomNV(vkStream, (const VkCoarseSampleOrderCustomNV*)(forMarshaling->pCustomSampleOrders + i));
+            marshal_VkCoarseSampleOrderCustomNV(vkStream, rootType, (const VkCoarseSampleOrderCustomNV*)(forMarshaling->pCustomSampleOrders + i));
         }
     }
 }
 
 void unmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkCoarseSampleOrderTypeNV*)&forUnmarshaling->sampleOrderType, sizeof(VkCoarseSampleOrderTypeNV));
     vkStream->read((uint32_t*)&forUnmarshaling->customSampleOrderCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->customSampleOrderCount; ++i)
         {
-            unmarshal_VkCoarseSampleOrderCustomNV(vkStream, (VkCoarseSampleOrderCustomNV*)(forUnmarshaling->pCustomSampleOrders + i));
+            unmarshal_VkCoarseSampleOrderCustomNV(vkStream, rootType, (VkCoarseSampleOrderCustomNV*)(forUnmarshaling->pCustomSampleOrders + i));
         }
     }
 }
@@ -12802,10 +17140,16 @@
 #ifdef VK_NV_ray_tracing
 void marshal_VkRayTracingShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkRayTracingShaderGroupTypeKHR*)&forMarshaling->type, sizeof(VkRayTracingShaderGroupTypeKHR));
     vkStream->write((uint32_t*)&forMarshaling->generalShader, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->closestHitShader, sizeof(uint32_t));
@@ -12815,10 +17159,16 @@
 
 void unmarshal_VkRayTracingShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingShaderGroupCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkRayTracingShaderGroupTypeKHR*)&forUnmarshaling->type, sizeof(VkRayTracingShaderGroupTypeKHR));
     vkStream->read((uint32_t*)&forUnmarshaling->generalShader, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->closestHitShader, sizeof(uint32_t));
@@ -12828,17 +17178,23 @@
 
 void marshal_VkRayTracingPipelineCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
         {
-            marshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
+            marshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->groupCount, sizeof(uint32_t));
@@ -12846,7 +17202,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->groupCount; ++i)
         {
-            marshal_VkRayTracingShaderGroupCreateInfoNV(vkStream, (const VkRayTracingShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i));
+            marshal_VkRayTracingShaderGroupCreateInfoNV(vkStream, rootType, (const VkRayTracingShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->maxRecursionDepth, sizeof(uint32_t));
@@ -12861,17 +17217,23 @@
 
 void unmarshal_VkRayTracingPipelineCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingPipelineCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->stageCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->stageCount; ++i)
         {
-            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
+            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->groupCount, sizeof(uint32_t));
@@ -12879,7 +17241,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->groupCount; ++i)
         {
-            unmarshal_VkRayTracingShaderGroupCreateInfoNV(vkStream, (VkRayTracingShaderGroupCreateInfoNV*)(forUnmarshaling->pGroups + i));
+            unmarshal_VkRayTracingShaderGroupCreateInfoNV(vkStream, rootType, (VkRayTracingShaderGroupCreateInfoNV*)(forUnmarshaling->pGroups + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->maxRecursionDepth, sizeof(uint32_t));
@@ -12894,10 +17256,16 @@
 
 void marshal_VkGeometryTrianglesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->vertexData, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -12919,10 +17287,16 @@
 
 void unmarshal_VkGeometryTrianglesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryTrianglesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->vertexData, 1);
@@ -12944,10 +17318,16 @@
 
 void marshal_VkGeometryAABBNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryAABBNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->aabbData, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -12958,10 +17338,16 @@
 
 void unmarshal_VkGeometryAABBNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryAABBNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->aabbData, 1);
@@ -12972,48 +17358,70 @@
 
 void marshal_VkGeometryDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryDataNV* forMarshaling)
 {
-    marshal_VkGeometryTrianglesNV(vkStream, (VkGeometryTrianglesNV*)(&forMarshaling->triangles));
-    marshal_VkGeometryAABBNV(vkStream, (VkGeometryAABBNV*)(&forMarshaling->aabbs));
+    (void)rootType;
+    marshal_VkGeometryTrianglesNV(vkStream, rootType, (VkGeometryTrianglesNV*)(&forMarshaling->triangles));
+    marshal_VkGeometryAABBNV(vkStream, rootType, (VkGeometryAABBNV*)(&forMarshaling->aabbs));
 }
 
 void unmarshal_VkGeometryDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryDataNV* forUnmarshaling)
 {
-    unmarshal_VkGeometryTrianglesNV(vkStream, (VkGeometryTrianglesNV*)(&forUnmarshaling->triangles));
-    unmarshal_VkGeometryAABBNV(vkStream, (VkGeometryAABBNV*)(&forUnmarshaling->aabbs));
+    (void)rootType;
+    unmarshal_VkGeometryTrianglesNV(vkStream, rootType, (VkGeometryTrianglesNV*)(&forUnmarshaling->triangles));
+    unmarshal_VkGeometryAABBNV(vkStream, rootType, (VkGeometryAABBNV*)(&forUnmarshaling->aabbs));
 }
 
 void marshal_VkGeometryNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkGeometryTypeKHR*)&forMarshaling->geometryType, sizeof(VkGeometryTypeKHR));
-    marshal_VkGeometryDataNV(vkStream, (VkGeometryDataNV*)(&forMarshaling->geometry));
+    marshal_VkGeometryDataNV(vkStream, rootType, (VkGeometryDataNV*)(&forMarshaling->geometry));
     vkStream->write((VkGeometryFlagsKHR*)&forMarshaling->flags, sizeof(VkGeometryFlagsKHR));
 }
 
 void unmarshal_VkGeometryNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkGeometryTypeKHR*)&forUnmarshaling->geometryType, sizeof(VkGeometryTypeKHR));
-    unmarshal_VkGeometryDataNV(vkStream, (VkGeometryDataNV*)(&forUnmarshaling->geometry));
+    unmarshal_VkGeometryDataNV(vkStream, rootType, (VkGeometryDataNV*)(&forUnmarshaling->geometry));
     vkStream->read((VkGeometryFlagsKHR*)&forUnmarshaling->flags, sizeof(VkGeometryFlagsKHR));
 }
 
 void marshal_VkAccelerationStructureInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccelerationStructureTypeNV*)&forMarshaling->type, sizeof(VkAccelerationStructureTypeNV));
     vkStream->write((VkBuildAccelerationStructureFlagsNV*)&forMarshaling->flags, sizeof(VkBuildAccelerationStructureFlagsNV));
     vkStream->write((uint32_t*)&forMarshaling->instanceCount, sizeof(uint32_t));
@@ -13022,17 +17430,23 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->geometryCount; ++i)
         {
-            marshal_VkGeometryNV(vkStream, (const VkGeometryNV*)(forMarshaling->pGeometries + i));
+            marshal_VkGeometryNV(vkStream, rootType, (const VkGeometryNV*)(forMarshaling->pGeometries + i));
         }
     }
 }
 
 void unmarshal_VkAccelerationStructureInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccelerationStructureTypeNV*)&forUnmarshaling->type, sizeof(VkAccelerationStructureTypeNV));
     vkStream->read((VkBuildAccelerationStructureFlagsNV*)&forUnmarshaling->flags, sizeof(VkBuildAccelerationStructureFlagsNV));
     vkStream->read((uint32_t*)&forUnmarshaling->instanceCount, sizeof(uint32_t));
@@ -13041,37 +17455,55 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->geometryCount; ++i)
         {
-            unmarshal_VkGeometryNV(vkStream, (VkGeometryNV*)(forUnmarshaling->pGeometries + i));
+            unmarshal_VkGeometryNV(vkStream, rootType, (VkGeometryNV*)(forUnmarshaling->pGeometries + i));
         }
     }
 }
 
 void marshal_VkAccelerationStructureCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->compactedSize, sizeof(VkDeviceSize));
-    marshal_VkAccelerationStructureInfoNV(vkStream, (VkAccelerationStructureInfoNV*)(&forMarshaling->info));
+    marshal_VkAccelerationStructureInfoNV(vkStream, rootType, (VkAccelerationStructureInfoNV*)(&forMarshaling->info));
 }
 
 void unmarshal_VkAccelerationStructureCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->compactedSize, sizeof(VkDeviceSize));
-    unmarshal_VkAccelerationStructureInfoNV(vkStream, (VkAccelerationStructureInfoNV*)(&forUnmarshaling->info));
+    unmarshal_VkAccelerationStructureInfoNV(vkStream, rootType, (VkAccelerationStructureInfoNV*)(&forUnmarshaling->info));
 }
 
 void marshal_VkBindAccelerationStructureMemoryInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkAccelerationStructureNV_u64(&forMarshaling->accelerationStructure, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -13085,10 +17517,16 @@
 
 void unmarshal_VkBindAccelerationStructureMemoryInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindAccelerationStructureMemoryInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkAccelerationStructureNV(&cgen_var_0, (VkAccelerationStructureNV*)&forUnmarshaling->accelerationStructure, 1);
@@ -13102,10 +17540,16 @@
 
 void marshal_VkWriteDescriptorSetAccelerationStructureNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->accelerationStructureCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAccelerationStructures;
@@ -13124,10 +17568,16 @@
 
 void unmarshal_VkWriteDescriptorSetAccelerationStructureNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSetAccelerationStructureNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->accelerationStructureCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkAccelerationStructureNV* check_pAccelerationStructures;
@@ -13150,10 +17600,16 @@
 
 void marshal_VkAccelerationStructureMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccelerationStructureMemoryRequirementsTypeNV*)&forMarshaling->type, sizeof(VkAccelerationStructureMemoryRequirementsTypeNV));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkAccelerationStructureNV_u64(&forMarshaling->accelerationStructure, &cgen_var_0, 1);
@@ -13162,10 +17618,16 @@
 
 void unmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureMemoryRequirementsInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccelerationStructureMemoryRequirementsTypeNV*)&forUnmarshaling->type, sizeof(VkAccelerationStructureMemoryRequirementsTypeNV));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -13174,10 +17636,16 @@
 
 void marshal_VkPhysicalDeviceRayTracingPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->shaderGroupHandleSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxRecursionDepth, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxShaderGroupStride, sizeof(uint32_t));
@@ -13190,10 +17658,16 @@
 
 void unmarshal_VkPhysicalDeviceRayTracingPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayTracingPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->shaderGroupHandleSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxRecursionDepth, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxShaderGroupStride, sizeof(uint32_t));
@@ -13206,22 +17680,28 @@
 
 void marshal_VkTransformMatrixKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)forMarshaling->matrix, ((3)*(4)) * sizeof(float));
 }
 
 void unmarshal_VkTransformMatrixKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTransformMatrixKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)forUnmarshaling->matrix, ((3)*(4)) * sizeof(float));
 }
 
 void marshal_VkAabbPositionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((float*)&forMarshaling->minX, sizeof(float));
     vkStream->write((float*)&forMarshaling->minY, sizeof(float));
     vkStream->write((float*)&forMarshaling->minZ, sizeof(float));
@@ -13232,8 +17712,10 @@
 
 void unmarshal_VkAabbPositionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAabbPositionsKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((float*)&forUnmarshaling->minX, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->minY, sizeof(float));
     vkStream->read((float*)&forUnmarshaling->minZ, sizeof(float));
@@ -13244,8 +17726,10 @@
 
 void marshal_VkAccelerationStructureInstanceKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* forMarshaling)
 {
+    (void)rootType;
     
     typedef struct VkAccelerationStructureInstanceKHRWithoutBitFields {
         VkTransformMatrixKHR          transform;
@@ -13254,7 +17738,7 @@
     } VkAccelerationStructureInstanceKHRWithoutBitFields;
     
     const VkAccelerationStructureInstanceKHRWithoutBitFields* forMarshaling_new = (const VkAccelerationStructureInstanceKHRWithoutBitFields*)(forMarshaling);
-    marshal_VkTransformMatrixKHR(vkStream, (VkTransformMatrixKHR*)(&forMarshaling_new->transform));
+    marshal_VkTransformMatrixKHR(vkStream, rootType, (VkTransformMatrixKHR*)(&forMarshaling_new->transform));
     for (uint32_t i = 0; i < 2; i++) {
         vkStream->write((uint32_t*)&(forMarshaling_new->dwords[i]), sizeof(uint32_t));
     }
@@ -13264,8 +17748,10 @@
 
 void unmarshal_VkAccelerationStructureInstanceKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureInstanceKHR* forUnmarshaling)
 {
+    (void)rootType;
     
     typedef struct VkAccelerationStructureInstanceKHRWithoutBitFields {
         VkTransformMatrixKHR          transform;
@@ -13274,7 +17760,7 @@
     } VkAccelerationStructureInstanceKHRWithoutBitFields;
     
     VkAccelerationStructureInstanceKHRWithoutBitFields* forUnmarshaling_new = (VkAccelerationStructureInstanceKHRWithoutBitFields*)(forUnmarshaling);
-    unmarshal_VkTransformMatrixKHR(vkStream, (VkTransformMatrixKHR*)(&forUnmarshaling_new->transform));
+    unmarshal_VkTransformMatrixKHR(vkStream, rootType, (VkTransformMatrixKHR*)(&forUnmarshaling_new->transform));
     for (uint32_t i = 0; i < 2; i++) {
         vkStream->read((uint32_t*)&(forUnmarshaling_new->dwords[i]), sizeof(uint32_t));
     }
@@ -13286,37 +17772,61 @@
 #ifdef VK_NV_representative_fragment_test
 void marshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->representativeFragmentTest, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->representativeFragmentTest, sizeof(VkBool32));
 }
 
 void marshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->representativeFragmentTestEnable, sizeof(VkBool32));
 }
 
 void unmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRepresentativeFragmentTestStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->representativeFragmentTestEnable, sizeof(VkBool32));
 }
 
@@ -13324,38 +17834,62 @@
 #ifdef VK_EXT_filter_cubic
 void marshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImageViewType*)&forMarshaling->imageViewType, sizeof(VkImageViewType));
 }
 
 void unmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageViewImageFormatInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImageViewType*)&forUnmarshaling->imageViewType, sizeof(VkImageViewType));
 }
 
 void marshal_VkFilterCubicImageViewImageFormatPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->filterCubic, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->filterCubicMinmax, sizeof(VkBool32));
 }
 
 void unmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFilterCubicImageViewImageFormatPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->filterCubic, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->filterCubicMinmax, sizeof(VkBool32));
 }
@@ -13366,19 +17900,31 @@
 #ifdef VK_EXT_global_priority
 void marshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkQueueGlobalPriorityEXT*)&forMarshaling->globalPriority, sizeof(VkQueueGlobalPriorityEXT));
 }
 
 void unmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceQueueGlobalPriorityCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkQueueGlobalPriorityEXT*)&forUnmarshaling->globalPriority, sizeof(VkQueueGlobalPriorityEXT));
 }
 
@@ -13386,10 +17932,16 @@
 #ifdef VK_EXT_external_memory_host
 void marshal_VkImportMemoryHostPointerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pHostPointer;
@@ -13402,10 +17954,16 @@
 
 void unmarshal_VkImportMemoryHostPointerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryHostPointerInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkExternalMemoryHandleTypeFlagBits*)&forUnmarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     // WARNING PTR CHECK
     void* check_pHostPointer;
@@ -13422,37 +17980,61 @@
 
 void marshal_VkMemoryHostPointerPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void unmarshal_VkMemoryHostPointerPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryHostPointerPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->memoryTypeBits, sizeof(uint32_t));
 }
 
 void marshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->minImportedHostPointerAlignment, sizeof(VkDeviceSize));
 }
 
 void unmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->minImportedHostPointerAlignment, sizeof(VkDeviceSize));
 }
 
@@ -13462,19 +18044,31 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void marshal_VkPipelineCompilerControlCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCompilerControlFlagsAMD*)&forMarshaling->compilerControlFlags, sizeof(VkPipelineCompilerControlFlagsAMD));
 }
 
 void unmarshal_VkPipelineCompilerControlCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCompilerControlCreateInfoAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCompilerControlFlagsAMD*)&forUnmarshaling->compilerControlFlags, sizeof(VkPipelineCompilerControlFlagsAMD));
 }
 
@@ -13482,19 +18076,31 @@
 #ifdef VK_EXT_calibrated_timestamps
 void marshal_VkCalibratedTimestampInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkTimeDomainEXT*)&forMarshaling->timeDomain, sizeof(VkTimeDomainEXT));
 }
 
 void unmarshal_VkCalibratedTimestampInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCalibratedTimestampInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkTimeDomainEXT*)&forUnmarshaling->timeDomain, sizeof(VkTimeDomainEXT));
 }
 
@@ -13502,10 +18108,16 @@
 #ifdef VK_AMD_shader_core_properties
 void marshal_VkPhysicalDeviceShaderCorePropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->shaderEngineCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->shaderArraysPerEngineCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->computeUnitsPerShaderArray, sizeof(uint32_t));
@@ -13524,10 +18136,16 @@
 
 void unmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderCorePropertiesAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->shaderEngineCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->shaderArraysPerEngineCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->computeUnitsPerShaderArray, sizeof(uint32_t));
@@ -13548,19 +18166,31 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void marshal_VkDeviceMemoryOverallocationCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkMemoryOverallocationBehaviorAMD*)&forMarshaling->overallocationBehavior, sizeof(VkMemoryOverallocationBehaviorAMD));
 }
 
 void unmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceMemoryOverallocationCreateInfoAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkMemoryOverallocationBehaviorAMD*)&forUnmarshaling->overallocationBehavior, sizeof(VkMemoryOverallocationBehaviorAMD));
 }
 
@@ -13568,86 +18198,126 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void marshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxVertexAttribDivisor, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxVertexAttribDivisor, sizeof(uint32_t));
 }
 
 void marshal_VkVertexInputBindingDivisorDescriptionEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->divisor, sizeof(uint32_t));
 }
 
 void unmarshal_VkVertexInputBindingDivisorDescriptionEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkVertexInputBindingDivisorDescriptionEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->binding, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->divisor, sizeof(uint32_t));
 }
 
 void marshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->vertexBindingDivisorCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->vertexBindingDivisorCount; ++i)
         {
-            marshal_VkVertexInputBindingDivisorDescriptionEXT(vkStream, (const VkVertexInputBindingDivisorDescriptionEXT*)(forMarshaling->pVertexBindingDivisors + i));
+            marshal_VkVertexInputBindingDivisorDescriptionEXT(vkStream, rootType, (const VkVertexInputBindingDivisorDescriptionEXT*)(forMarshaling->pVertexBindingDivisors + i));
         }
     }
 }
 
 void unmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineVertexInputDivisorStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->vertexBindingDivisorCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->vertexBindingDivisorCount; ++i)
         {
-            unmarshal_VkVertexInputBindingDivisorDescriptionEXT(vkStream, (VkVertexInputBindingDivisorDescriptionEXT*)(forUnmarshaling->pVertexBindingDivisors + i));
+            unmarshal_VkVertexInputBindingDivisorDescriptionEXT(vkStream, rootType, (VkVertexInputBindingDivisorDescriptionEXT*)(forUnmarshaling->pVertexBindingDivisors + i));
         }
     }
 }
 
 void marshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->vertexAttributeInstanceRateDivisor, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->vertexAttributeInstanceRateZeroDivisor, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->vertexAttributeInstanceRateDivisor, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->vertexAttributeInstanceRateZeroDivisor, sizeof(VkBool32));
 }
@@ -13656,19 +18326,31 @@
 #ifdef VK_GGP_frame_token
 void marshal_VkPresentFrameTokenGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((GgpFrameToken*)&forMarshaling->frameToken, sizeof(GgpFrameToken));
 }
 
 void unmarshal_VkPresentFrameTokenGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentFrameTokenGGP* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((GgpFrameToken*)&forUnmarshaling->frameToken, sizeof(GgpFrameToken));
 }
 
@@ -13676,50 +18358,66 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void marshal_VkPipelineCreationFeedbackEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkPipelineCreationFeedbackFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineCreationFeedbackFlagsEXT));
     vkStream->write((uint64_t*)&forMarshaling->duration, sizeof(uint64_t));
 }
 
 void unmarshal_VkPipelineCreationFeedbackEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCreationFeedbackEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkPipelineCreationFeedbackFlagsEXT*)&forUnmarshaling->flags, sizeof(VkPipelineCreationFeedbackFlagsEXT));
     vkStream->read((uint64_t*)&forUnmarshaling->duration, sizeof(uint64_t));
 }
 
 void marshal_VkPipelineCreationFeedbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkPipelineCreationFeedbackEXT(vkStream, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineCreationFeedback));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkPipelineCreationFeedbackEXT(vkStream, rootType, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineCreationFeedback));
     vkStream->write((uint32_t*)&forMarshaling->pipelineStageCreationFeedbackCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->pipelineStageCreationFeedbackCount; ++i)
         {
-            marshal_VkPipelineCreationFeedbackEXT(vkStream, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineStageCreationFeedbacks + i));
+            marshal_VkPipelineCreationFeedbackEXT(vkStream, rootType, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineStageCreationFeedbacks + i));
         }
     }
 }
 
 void unmarshal_VkPipelineCreationFeedbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCreationFeedbackCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkPipelineCreationFeedbackEXT(vkStream, (VkPipelineCreationFeedbackEXT*)(forUnmarshaling->pPipelineCreationFeedback));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkPipelineCreationFeedbackEXT(vkStream, rootType, (VkPipelineCreationFeedbackEXT*)(forUnmarshaling->pPipelineCreationFeedback));
     vkStream->read((uint32_t*)&forUnmarshaling->pipelineStageCreationFeedbackCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->pipelineStageCreationFeedbackCount; ++i)
         {
-            unmarshal_VkPipelineCreationFeedbackEXT(vkStream, (VkPipelineCreationFeedbackEXT*)(forUnmarshaling->pPipelineStageCreationFeedbacks + i));
+            unmarshal_VkPipelineCreationFeedbackEXT(vkStream, rootType, (VkPipelineCreationFeedbackEXT*)(forUnmarshaling->pPipelineStageCreationFeedbacks + i));
         }
     }
 }
@@ -13730,20 +18428,32 @@
 #ifdef VK_NV_compute_shader_derivatives
 void marshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->computeDerivativeGroupQuads, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->computeDerivativeGroupLinear, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->computeDerivativeGroupQuads, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->computeDerivativeGroupLinear, sizeof(VkBool32));
 }
@@ -13752,30 +18462,48 @@
 #ifdef VK_NV_mesh_shader
 void marshal_VkPhysicalDeviceMeshShaderFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->taskShader, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->meshShader, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMeshShaderFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->taskShader, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->meshShader, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceMeshShaderPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxDrawMeshTasksCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxTaskWorkGroupInvocations, sizeof(uint32_t));
     vkStream->write((uint32_t*)forMarshaling->maxTaskWorkGroupSize, 3 * sizeof(uint32_t));
@@ -13793,10 +18521,16 @@
 
 void unmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMeshShaderPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxDrawMeshTasksCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxTaskWorkGroupInvocations, sizeof(uint32_t));
     vkStream->read((uint32_t*)forUnmarshaling->maxTaskWorkGroupSize, 3 * sizeof(uint32_t));
@@ -13814,16 +18548,20 @@
 
 void marshal_VkDrawMeshTasksIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->taskCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->firstTask, sizeof(uint32_t));
 }
 
 void unmarshal_VkDrawMeshTasksIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrawMeshTasksIndirectCommandNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->taskCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->firstTask, sizeof(uint32_t));
 }
@@ -13832,19 +18570,31 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void marshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->fragmentShaderBarycentric, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentShaderBarycentric, sizeof(VkBool32));
 }
 
@@ -13852,19 +18602,31 @@
 #ifdef VK_NV_shader_image_footprint
 void marshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->imageFootprint, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderImageFootprintFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->imageFootprint, sizeof(VkBool32));
 }
 
@@ -13872,10 +18634,16 @@
 #ifdef VK_NV_scissor_exclusive
 void marshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->exclusiveScissorCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pExclusiveScissors;
@@ -13886,7 +18654,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->exclusiveScissorCount; ++i)
             {
-                marshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pExclusiveScissors + i));
+                marshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pExclusiveScissors + i));
             }
         }
     }
@@ -13894,10 +18662,16 @@
 
 void unmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportExclusiveScissorStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->exclusiveScissorCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkRect2D* check_pExclusiveScissors;
@@ -13912,7 +18686,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->exclusiveScissorCount; ++i)
             {
-                unmarshal_VkRect2D(vkStream, (VkRect2D*)(forUnmarshaling->pExclusiveScissors + i));
+                unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(forUnmarshaling->pExclusiveScissors + i));
             }
         }
     }
@@ -13920,19 +18694,31 @@
 
 void marshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->exclusiveScissor, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExclusiveScissorFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->exclusiveScissor, sizeof(VkBool32));
 }
 
@@ -13940,28 +18726,46 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void marshal_VkQueueFamilyCheckpointPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineStageFlags*)&forMarshaling->checkpointExecutionStageMask, sizeof(VkPipelineStageFlags));
 }
 
 void unmarshal_VkQueueFamilyCheckpointPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueueFamilyCheckpointPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineStageFlags*)&forUnmarshaling->checkpointExecutionStageMask, sizeof(VkPipelineStageFlags));
 }
 
 void marshal_VkCheckpointDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCheckpointDataNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineStageFlagBits*)&forMarshaling->stage, sizeof(VkPipelineStageFlagBits));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pCheckpointMarker;
@@ -13974,10 +18778,16 @@
 
 void unmarshal_VkCheckpointDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCheckpointDataNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineStageFlagBits*)&forUnmarshaling->stage, sizeof(VkPipelineStageFlagBits));
     // WARNING PTR CHECK
     void* check_pCheckpointMarker;
@@ -13996,19 +18806,31 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void marshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderIntegerFunctions2, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderIntegerFunctions2, sizeof(VkBool32));
 }
 
@@ -14016,40 +18838,54 @@
 #ifdef VK_INTEL_performance_query
 void marshal_VkPerformanceValueDataINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->value32, sizeof(uint32_t));
 }
 
 void unmarshal_VkPerformanceValueDataINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceValueDataINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->value32, sizeof(uint32_t));
 }
 
 void marshal_VkPerformanceValueINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkPerformanceValueTypeINTEL*)&forMarshaling->type, sizeof(VkPerformanceValueTypeINTEL));
-    marshal_VkPerformanceValueDataINTEL(vkStream, (VkPerformanceValueDataINTEL*)(&forMarshaling->data));
+    marshal_VkPerformanceValueDataINTEL(vkStream, rootType, (VkPerformanceValueDataINTEL*)(&forMarshaling->data));
 }
 
 void unmarshal_VkPerformanceValueINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceValueINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkPerformanceValueTypeINTEL*)&forUnmarshaling->type, sizeof(VkPerformanceValueTypeINTEL));
-    unmarshal_VkPerformanceValueDataINTEL(vkStream, (VkPerformanceValueDataINTEL*)(&forUnmarshaling->data));
+    unmarshal_VkPerformanceValueDataINTEL(vkStream, rootType, (VkPerformanceValueDataINTEL*)(&forUnmarshaling->data));
 }
 
 void marshal_VkInitializePerformanceApiInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pUserData;
     vkStream->putBe64(cgen_var_0);
@@ -14061,10 +18897,16 @@
 
 void unmarshal_VkInitializePerformanceApiInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkInitializePerformanceApiInfoINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     // WARNING PTR CHECK
     void* check_pUserData;
     check_pUserData = (void*)(uintptr_t)vkStream->getBe64();
@@ -14080,64 +18922,106 @@
 
 void marshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkQueryPoolSamplingModeINTEL*)&forMarshaling->performanceCountersSampling, sizeof(VkQueryPoolSamplingModeINTEL));
 }
 
 void unmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueryPoolPerformanceQueryCreateInfoINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkQueryPoolSamplingModeINTEL*)&forUnmarshaling->performanceCountersSampling, sizeof(VkQueryPoolSamplingModeINTEL));
 }
 
 void marshal_VkPerformanceMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->marker, sizeof(uint64_t));
 }
 
 void unmarshal_VkPerformanceMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceMarkerInfoINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->marker, sizeof(uint64_t));
 }
 
 void marshal_VkPerformanceStreamMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->marker, sizeof(uint32_t));
 }
 
 void unmarshal_VkPerformanceStreamMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceStreamMarkerInfoINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->marker, sizeof(uint32_t));
 }
 
 void marshal_VkPerformanceOverrideInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPerformanceOverrideTypeINTEL*)&forMarshaling->type, sizeof(VkPerformanceOverrideTypeINTEL));
     vkStream->write((VkBool32*)&forMarshaling->enable, sizeof(VkBool32));
     vkStream->write((uint64_t*)&forMarshaling->parameter, sizeof(uint64_t));
@@ -14145,10 +19029,16 @@
 
 void unmarshal_VkPerformanceOverrideInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceOverrideInfoINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPerformanceOverrideTypeINTEL*)&forUnmarshaling->type, sizeof(VkPerformanceOverrideTypeINTEL));
     vkStream->read((VkBool32*)&forUnmarshaling->enable, sizeof(VkBool32));
     vkStream->read((uint64_t*)&forUnmarshaling->parameter, sizeof(uint64_t));
@@ -14156,19 +19046,31 @@
 
 void marshal_VkPerformanceConfigurationAcquireInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPerformanceConfigurationTypeINTEL*)&forMarshaling->type, sizeof(VkPerformanceConfigurationTypeINTEL));
 }
 
 void unmarshal_VkPerformanceConfigurationAcquireInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceConfigurationAcquireInfoINTEL* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPerformanceConfigurationTypeINTEL*)&forUnmarshaling->type, sizeof(VkPerformanceConfigurationTypeINTEL));
 }
 
@@ -14176,10 +19078,16 @@
 #ifdef VK_EXT_pci_bus_info
 void marshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->pciDomain, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->pciBus, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->pciDevice, sizeof(uint32_t));
@@ -14188,10 +19096,16 @@
 
 void unmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePCIBusInfoPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->pciDomain, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->pciBus, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->pciDevice, sizeof(uint32_t));
@@ -14202,37 +19116,61 @@
 #ifdef VK_AMD_display_native_hdr
 void marshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->localDimmingSupport, sizeof(VkBool32));
 }
 
 void unmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayNativeHdrSurfaceCapabilitiesAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->localDimmingSupport, sizeof(VkBool32));
 }
 
 void marshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->localDimmingEnable, sizeof(VkBool32));
 }
 
 void unmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSwapchainDisplayNativeHdrCreateInfoAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->localDimmingEnable, sizeof(VkBool32));
 }
 
@@ -14240,20 +19178,32 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void marshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkImagePipeSurfaceCreateFlagsFUCHSIA*)&forMarshaling->flags, sizeof(VkImagePipeSurfaceCreateFlagsFUCHSIA));
     vkStream->write((zx_handle_t*)&forMarshaling->imagePipeHandle, sizeof(zx_handle_t));
 }
 
 void unmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImagePipeSurfaceCreateInfoFUCHSIA* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkImagePipeSurfaceCreateFlagsFUCHSIA*)&forUnmarshaling->flags, sizeof(VkImagePipeSurfaceCreateFlagsFUCHSIA));
     vkStream->read((zx_handle_t*)&forUnmarshaling->imagePipeHandle, sizeof(zx_handle_t));
 }
@@ -14262,10 +19212,16 @@
 #ifdef VK_EXT_metal_surface
 void marshal_VkMetalSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkMetalSurfaceCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkMetalSurfaceCreateFlagsEXT));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pLayer;
@@ -14278,10 +19234,16 @@
 
 void unmarshal_VkMetalSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMetalSurfaceCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkMetalSurfaceCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkMetalSurfaceCreateFlagsEXT));
     // WARNING PTR CHECK
     const CAMetalLayer* check_pLayer;
@@ -14297,67 +19259,106 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void marshal_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportColorBufferGOOGLE* forMarshaling)
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    vkStream->write((uint32_t*)&forMarshaling->colorBuffer, sizeof(uint32_t));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMap, sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapDynamic, sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapNonSubsampledImages, sizeof(VkBool32));
 }
 
-void unmarshal_VkImportColorBufferGOOGLE(
+void unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanStreamGuest* vkStream,
-    VkImportColorBufferGOOGLE* forUnmarshaling)
+    VkStructureType rootType,
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    vkStream->read((uint32_t*)&forUnmarshaling->colorBuffer, sizeof(uint32_t));
+    forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMap, sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapDynamic, sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapNonSubsampledImages, sizeof(VkBool32));
 }
 
-void marshal_VkImportBufferGOOGLE(
+void marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportBufferGOOGLE* forMarshaling)
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    vkStream->write((uint32_t*)&forMarshaling->buffer, sizeof(uint32_t));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minFragmentDensityTexelSize));
+    marshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxFragmentDensityTexelSize));
+    vkStream->write((VkBool32*)&forMarshaling->fragmentDensityInvocations, sizeof(VkBool32));
 }
 
-void unmarshal_VkImportBufferGOOGLE(
+void unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanStreamGuest* vkStream,
-    VkImportBufferGOOGLE* forUnmarshaling)
+    VkStructureType rootType,
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    vkStream->read((uint32_t*)&forUnmarshaling->buffer, sizeof(uint32_t));
+    forUnmarshaling->sType = VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->minFragmentDensityTexelSize));
+    unmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forUnmarshaling->maxFragmentDensityTexelSize));
+    vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityInvocations, sizeof(VkBool32));
 }
 
-void marshal_VkImportPhysicalAddressGOOGLE(
+void marshal_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportPhysicalAddressGOOGLE* forMarshaling)
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    vkStream->write((uint64_t*)&forMarshaling->physicalAddress, sizeof(uint64_t));
-    vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
-    vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
-    vkStream->write((VkImageTiling*)&forMarshaling->tiling, sizeof(VkImageTiling));
-    vkStream->write((uint32_t*)&forMarshaling->tilingParameter, sizeof(uint32_t));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(&forMarshaling->fragmentDensityMapAttachment));
 }
 
-void unmarshal_VkImportPhysicalAddressGOOGLE(
+void unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanStreamGuest* vkStream,
-    VkImportPhysicalAddressGOOGLE* forUnmarshaling)
+    VkStructureType rootType,
+    VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    vkStream->read((uint64_t*)&forUnmarshaling->physicalAddress, sizeof(uint64_t));
-    vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
-    vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
-    vkStream->read((VkImageTiling*)&forUnmarshaling->tiling, sizeof(VkImageTiling));
-    vkStream->read((uint32_t*)&forUnmarshaling->tilingParameter, sizeof(uint32_t));
+    forUnmarshaling->sType = VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(&forUnmarshaling->fragmentDensityMapAttachment));
 }
 
 #endif
@@ -14370,30 +19371,48 @@
 #ifdef VK_EXT_subgroup_size_control
 void marshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->subgroupSizeControl, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->computeFullSubgroups, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->subgroupSizeControl, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->computeFullSubgroups, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->minSubgroupSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxSubgroupSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxComputeWorkgroupSubgroups, sizeof(uint32_t));
@@ -14402,10 +19421,16 @@
 
 void unmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->minSubgroupSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxSubgroupSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxComputeWorkgroupSubgroups, sizeof(uint32_t));
@@ -14414,19 +19439,31 @@
 
 void marshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->requiredSubgroupSize, sizeof(uint32_t));
 }
 
 void unmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->requiredSubgroupSize, sizeof(uint32_t));
 }
 
@@ -14434,20 +19471,32 @@
 #ifdef VK_AMD_shader_core_properties2
 void marshal_VkPhysicalDeviceShaderCoreProperties2AMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkShaderCorePropertiesFlagsAMD*)&forMarshaling->shaderCoreFeatures, sizeof(VkShaderCorePropertiesFlagsAMD));
     vkStream->write((uint32_t*)&forMarshaling->activeComputeUnitCount, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderCoreProperties2AMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkShaderCorePropertiesFlagsAMD*)&forUnmarshaling->shaderCoreFeatures, sizeof(VkShaderCorePropertiesFlagsAMD));
     vkStream->read((uint32_t*)&forUnmarshaling->activeComputeUnitCount, sizeof(uint32_t));
 }
@@ -14456,19 +19505,31 @@
 #ifdef VK_AMD_device_coherent_memory
 void marshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->deviceCoherentMemory, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCoherentMemoryFeaturesAMD* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->deviceCoherentMemory, sizeof(VkBool32));
 }
 
@@ -14476,20 +19537,32 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void marshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderImageInt64Atomics, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->sparseImageInt64Atomics, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderImageInt64Atomics, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->sparseImageInt64Atomics, sizeof(VkBool32));
 }
@@ -14498,20 +19571,32 @@
 #ifdef VK_EXT_memory_budget
 void marshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)forMarshaling->heapBudget, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)forMarshaling->heapUsage, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
 }
 
 void unmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryBudgetPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)forUnmarshaling->heapBudget, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)forUnmarshaling->heapUsage, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
 }
@@ -14520,37 +19605,61 @@
 #ifdef VK_EXT_memory_priority
 void marshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->memoryPriority, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryPriorityFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->memoryPriority, sizeof(VkBool32));
 }
 
 void marshal_VkMemoryPriorityAllocateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((float*)&forMarshaling->priority, sizeof(float));
 }
 
 void unmarshal_VkMemoryPriorityAllocateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryPriorityAllocateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((float*)&forUnmarshaling->priority, sizeof(float));
 }
 
@@ -14558,19 +19667,31 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void marshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->dedicatedAllocationImageAliasing, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->dedicatedAllocationImageAliasing, sizeof(VkBool32));
 }
 
@@ -14578,10 +19699,16 @@
 #ifdef VK_EXT_buffer_device_address
 void marshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->bufferDeviceAddress, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->bufferDeviceAddressCaptureReplay, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->bufferDeviceAddressMultiDevice, sizeof(VkBool32));
@@ -14589,10 +19716,16 @@
 
 void unmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->bufferDeviceAddress, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->bufferDeviceAddressCaptureReplay, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->bufferDeviceAddressMultiDevice, sizeof(VkBool32));
@@ -14600,19 +19733,31 @@
 
 void marshal_VkBufferDeviceAddressCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
 }
 
 void unmarshal_VkBufferDeviceAddressCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferDeviceAddressCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->deviceAddress, sizeof(VkDeviceAddress));
 }
 
@@ -14620,10 +19765,16 @@
 #ifdef VK_EXT_tooling_info
 void marshal_VkPhysicalDeviceToolPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((char*)forMarshaling->name, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->write((char*)forMarshaling->version, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->write((VkToolPurposeFlagsEXT*)&forMarshaling->purposes, sizeof(VkToolPurposeFlagsEXT));
@@ -14633,10 +19784,16 @@
 
 void unmarshal_VkPhysicalDeviceToolPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceToolPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((char*)forUnmarshaling->name, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->read((char*)forUnmarshaling->version, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     vkStream->read((VkToolPurposeFlagsEXT*)&forUnmarshaling->purposes, sizeof(VkToolPurposeFlagsEXT));
@@ -14650,10 +19807,16 @@
 #ifdef VK_EXT_validation_features
 void marshal_VkValidationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->enabledValidationFeatureCount, sizeof(uint32_t));
     vkStream->write((const VkValidationFeatureEnableEXT*)forMarshaling->pEnabledValidationFeatures, forMarshaling->enabledValidationFeatureCount * sizeof(const VkValidationFeatureEnableEXT));
     vkStream->write((uint32_t*)&forMarshaling->disabledValidationFeatureCount, sizeof(uint32_t));
@@ -14662,10 +19825,16 @@
 
 void unmarshal_VkValidationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkValidationFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->enabledValidationFeatureCount, sizeof(uint32_t));
     vkStream->read((VkValidationFeatureEnableEXT*)forUnmarshaling->pEnabledValidationFeatures, forUnmarshaling->enabledValidationFeatureCount * sizeof(const VkValidationFeatureEnableEXT));
     vkStream->read((uint32_t*)&forUnmarshaling->disabledValidationFeatureCount, sizeof(uint32_t));
@@ -14676,10 +19845,16 @@
 #ifdef VK_NV_cooperative_matrix
 void marshal_VkCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->MSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->NSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->KSize, sizeof(uint32_t));
@@ -14692,10 +19867,16 @@
 
 void unmarshal_VkCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCooperativeMatrixPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->MSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->NSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->KSize, sizeof(uint32_t));
@@ -14708,39 +19889,63 @@
 
 void marshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->cooperativeMatrix, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->cooperativeMatrixRobustBufferAccess, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCooperativeMatrixFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->cooperativeMatrix, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->cooperativeMatrixRobustBufferAccess, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkShaderStageFlags*)&forMarshaling->cooperativeMatrixSupportedStages, sizeof(VkShaderStageFlags));
 }
 
 void unmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCooperativeMatrixPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkShaderStageFlags*)&forUnmarshaling->cooperativeMatrixSupportedStages, sizeof(VkShaderStageFlags));
 }
 
@@ -14748,48 +19953,78 @@
 #ifdef VK_NV_coverage_reduction_mode
 void marshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->coverageReductionMode, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCoverageReductionModeFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->coverageReductionMode, sizeof(VkBool32));
 }
 
 void marshal_VkPipelineCoverageReductionStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCoverageReductionStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineCoverageReductionStateCreateFlagsNV));
     vkStream->write((VkCoverageReductionModeNV*)&forMarshaling->coverageReductionMode, sizeof(VkCoverageReductionModeNV));
 }
 
 void unmarshal_VkPipelineCoverageReductionStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCoverageReductionStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCoverageReductionStateCreateFlagsNV*)&forUnmarshaling->flags, sizeof(VkPipelineCoverageReductionStateCreateFlagsNV));
     vkStream->read((VkCoverageReductionModeNV*)&forUnmarshaling->coverageReductionMode, sizeof(VkCoverageReductionModeNV));
 }
 
 void marshal_VkFramebufferMixedSamplesCombinationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkCoverageReductionModeNV*)&forMarshaling->coverageReductionMode, sizeof(VkCoverageReductionModeNV));
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->rasterizationSamples, sizeof(VkSampleCountFlagBits));
     vkStream->write((VkSampleCountFlags*)&forMarshaling->depthStencilSamples, sizeof(VkSampleCountFlags));
@@ -14798,10 +20033,16 @@
 
 void unmarshal_VkFramebufferMixedSamplesCombinationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferMixedSamplesCombinationNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkCoverageReductionModeNV*)&forUnmarshaling->coverageReductionMode, sizeof(VkCoverageReductionModeNV));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->rasterizationSamples, sizeof(VkSampleCountFlagBits));
     vkStream->read((VkSampleCountFlags*)&forUnmarshaling->depthStencilSamples, sizeof(VkSampleCountFlags));
@@ -14812,10 +20053,16 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void marshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->fragmentShaderSampleInterlock, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->fragmentShaderPixelInterlock, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->fragmentShaderShadingRateInterlock, sizeof(VkBool32));
@@ -14823,10 +20070,16 @@
 
 void unmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentShaderSampleInterlock, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentShaderPixelInterlock, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentShaderShadingRateInterlock, sizeof(VkBool32));
@@ -14836,19 +20089,31 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void marshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->ycbcrImageArrays, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->ycbcrImageArrays, sizeof(VkBool32));
 }
 
@@ -14856,55 +20121,91 @@
 #ifdef VK_EXT_full_screen_exclusive
 void marshal_VkSurfaceFullScreenExclusiveInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFullScreenExclusiveEXT*)&forMarshaling->fullScreenExclusive, sizeof(VkFullScreenExclusiveEXT));
 }
 
 void unmarshal_VkSurfaceFullScreenExclusiveInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFullScreenExclusiveInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFullScreenExclusiveEXT*)&forUnmarshaling->fullScreenExclusive, sizeof(VkFullScreenExclusiveEXT));
 }
 
 void marshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->fullScreenExclusiveSupported, sizeof(VkBool32));
 }
 
 void unmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilitiesFullScreenExclusiveEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->fullScreenExclusiveSupported, sizeof(VkBool32));
 }
 
 void marshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((HMONITOR*)&forMarshaling->hmonitor, sizeof(HMONITOR));
 }
 
 void unmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFullScreenExclusiveWin32InfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((HMONITOR*)&forUnmarshaling->hmonitor, sizeof(HMONITOR));
 }
 
@@ -14912,19 +20213,31 @@
 #ifdef VK_EXT_headless_surface
 void marshal_VkHeadlessSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkHeadlessSurfaceCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkHeadlessSurfaceCreateFlagsEXT));
 }
 
 void unmarshal_VkHeadlessSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkHeadlessSurfaceCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkHeadlessSurfaceCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkHeadlessSurfaceCreateFlagsEXT));
 }
 
@@ -14932,10 +20245,16 @@
 #ifdef VK_EXT_line_rasterization
 void marshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->rectangularLines, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->bresenhamLines, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->smoothLines, sizeof(VkBool32));
@@ -14946,10 +20265,16 @@
 
 void unmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceLineRasterizationFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->rectangularLines, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->bresenhamLines, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->smoothLines, sizeof(VkBool32));
@@ -14960,28 +20285,46 @@
 
 void marshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->lineSubPixelPrecisionBits, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceLineRasterizationPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->lineSubPixelPrecisionBits, sizeof(uint32_t));
 }
 
 void marshal_VkPipelineRasterizationLineStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkLineRasterizationModeEXT*)&forMarshaling->lineRasterizationMode, sizeof(VkLineRasterizationModeEXT));
     vkStream->write((VkBool32*)&forMarshaling->stippledLineEnable, sizeof(VkBool32));
     vkStream->write((uint32_t*)&forMarshaling->lineStippleFactor, sizeof(uint32_t));
@@ -14990,10 +20333,16 @@
 
 void unmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationLineStateCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkLineRasterizationModeEXT*)&forUnmarshaling->lineRasterizationMode, sizeof(VkLineRasterizationModeEXT));
     vkStream->read((VkBool32*)&forUnmarshaling->stippledLineEnable, sizeof(VkBool32));
     vkStream->read((uint32_t*)&forUnmarshaling->lineStippleFactor, sizeof(uint32_t));
@@ -15004,10 +20353,16 @@
 #ifdef VK_EXT_shader_atomic_float
 void marshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderBufferFloat32Atomics, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderBufferFloat32AtomicAdd, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->shaderBufferFloat64Atomics, sizeof(VkBool32));
@@ -15024,10 +20379,16 @@
 
 void unmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderBufferFloat32Atomics, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderBufferFloat32AtomicAdd, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderBufferFloat64Atomics, sizeof(VkBool32));
@@ -15048,19 +20409,31 @@
 #ifdef VK_EXT_index_type_uint8
 void marshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->indexTypeUint8, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceIndexTypeUint8FeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->indexTypeUint8, sizeof(VkBool32));
 }
 
@@ -15068,19 +20441,31 @@
 #ifdef VK_EXT_extended_dynamic_state
 void marshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->extendedDynamicState, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->extendedDynamicState, sizeof(VkBool32));
 }
 
@@ -15088,19 +20473,31 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void marshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->shaderDemoteToHelperInvocation, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->shaderDemoteToHelperInvocation, sizeof(VkBool32));
 }
 
@@ -15108,10 +20505,16 @@
 #ifdef VK_NV_device_generated_commands
 void marshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxGraphicsShaderGroupCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxIndirectSequenceCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxIndirectCommandsTokenCount, sizeof(uint32_t));
@@ -15125,10 +20528,16 @@
 
 void unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxGraphicsShaderGroupCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxIndirectSequenceCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxIndirectCommandsTokenCount, sizeof(uint32_t));
@@ -15142,34 +20551,52 @@
 
 void marshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->deviceGeneratedCommands, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->deviceGeneratedCommands, sizeof(VkBool32));
 }
 
 void marshal_VkGraphicsShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
         {
-            marshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
+            marshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
         }
     }
     // WARNING PTR CHECK
@@ -15177,29 +20604,35 @@
     vkStream->putBe64(cgen_var_0);
     if (forMarshaling->pVertexInputState)
     {
-        marshal_VkPipelineVertexInputStateCreateInfo(vkStream, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState));
+        marshal_VkPipelineVertexInputStateCreateInfo(vkStream, rootType, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState));
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)forMarshaling->pTessellationState;
     vkStream->putBe64(cgen_var_1);
     if (forMarshaling->pTessellationState)
     {
-        marshal_VkPipelineTessellationStateCreateInfo(vkStream, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState));
+        marshal_VkPipelineTessellationStateCreateInfo(vkStream, rootType, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState));
     }
 }
 
 void unmarshal_VkGraphicsShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGraphicsShaderGroupCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->stageCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->stageCount; ++i)
         {
-            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
+            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
         }
     }
     // WARNING PTR CHECK
@@ -15211,7 +20644,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pVertexInputState inconsistent between guest and host\n");
         }
-        unmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, (VkPipelineVertexInputStateCreateInfo*)(forUnmarshaling->pVertexInputState));
+        unmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, rootType, (VkPipelineVertexInputStateCreateInfo*)(forUnmarshaling->pVertexInputState));
     }
     // WARNING PTR CHECK
     const VkPipelineTessellationStateCreateInfo* check_pTessellationState;
@@ -15222,22 +20655,28 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pTessellationState inconsistent between guest and host\n");
         }
-        unmarshal_VkPipelineTessellationStateCreateInfo(vkStream, (VkPipelineTessellationStateCreateInfo*)(forUnmarshaling->pTessellationState));
+        unmarshal_VkPipelineTessellationStateCreateInfo(vkStream, rootType, (VkPipelineTessellationStateCreateInfo*)(forUnmarshaling->pTessellationState));
     }
 }
 
 void marshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->groupCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->groupCount; ++i)
         {
-            marshal_VkGraphicsShaderGroupCreateInfoNV(vkStream, (const VkGraphicsShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i));
+            marshal_VkGraphicsShaderGroupCreateInfoNV(vkStream, rootType, (const VkGraphicsShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->pipelineCount, sizeof(uint32_t));
@@ -15252,16 +20691,22 @@
 
 void unmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGraphicsPipelineShaderGroupsCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->groupCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->groupCount; ++i)
         {
-            unmarshal_VkGraphicsShaderGroupCreateInfoNV(vkStream, (VkGraphicsShaderGroupCreateInfoNV*)(forUnmarshaling->pGroups + i));
+            unmarshal_VkGraphicsShaderGroupCreateInfoNV(vkStream, rootType, (VkGraphicsShaderGroupCreateInfoNV*)(forUnmarshaling->pGroups + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->pipelineCount, sizeof(uint32_t));
@@ -15276,22 +20721,28 @@
 
 void marshal_VkBindShaderGroupIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->groupIndex, sizeof(uint32_t));
 }
 
 void unmarshal_VkBindShaderGroupIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindShaderGroupIndirectCommandNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->groupIndex, sizeof(uint32_t));
 }
 
 void marshal_VkBindIndexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceAddress*)&forMarshaling->bufferAddress, sizeof(VkDeviceAddress));
     vkStream->write((uint32_t*)&forMarshaling->size, sizeof(uint32_t));
     vkStream->write((VkIndexType*)&forMarshaling->indexType, sizeof(VkIndexType));
@@ -15299,8 +20750,10 @@
 
 void unmarshal_VkBindIndexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindIndexBufferIndirectCommandNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->bufferAddress, sizeof(VkDeviceAddress));
     vkStream->read((uint32_t*)&forUnmarshaling->size, sizeof(uint32_t));
     vkStream->read((VkIndexType*)&forUnmarshaling->indexType, sizeof(VkIndexType));
@@ -15308,8 +20761,10 @@
 
 void marshal_VkBindVertexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceAddress*)&forMarshaling->bufferAddress, sizeof(VkDeviceAddress));
     vkStream->write((uint32_t*)&forMarshaling->size, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->stride, sizeof(uint32_t));
@@ -15317,8 +20772,10 @@
 
 void unmarshal_VkBindVertexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindVertexBufferIndirectCommandNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->bufferAddress, sizeof(VkDeviceAddress));
     vkStream->read((uint32_t*)&forUnmarshaling->size, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->stride, sizeof(uint32_t));
@@ -15326,22 +20783,28 @@
 
 void marshal_VkSetStateFlagsIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->data, sizeof(uint32_t));
 }
 
 void unmarshal_VkSetStateFlagsIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSetStateFlagsIndirectCommandNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->data, sizeof(uint32_t));
 }
 
 void marshal_VkIndirectCommandsStreamNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* forMarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -15350,8 +20813,10 @@
 
 void unmarshal_VkIndirectCommandsStreamNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIndirectCommandsStreamNV* forUnmarshaling)
 {
+    (void)rootType;
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkBuffer(&cgen_var_0, (VkBuffer*)&forUnmarshaling->buffer, 1);
@@ -15360,10 +20825,16 @@
 
 void marshal_VkIndirectCommandsLayoutTokenNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkIndirectCommandsTokenTypeNV*)&forMarshaling->tokenType, sizeof(VkIndirectCommandsTokenTypeNV));
     vkStream->write((uint32_t*)&forMarshaling->stream, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->offset, sizeof(uint32_t));
@@ -15383,10 +20854,16 @@
 
 void unmarshal_VkIndirectCommandsLayoutTokenNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIndirectCommandsLayoutTokenNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkIndirectCommandsTokenTypeNV*)&forUnmarshaling->tokenType, sizeof(VkIndirectCommandsTokenTypeNV));
     vkStream->read((uint32_t*)&forUnmarshaling->stream, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->offset, sizeof(uint32_t));
@@ -15406,10 +20883,16 @@
 
 void marshal_VkIndirectCommandsLayoutCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkIndirectCommandsLayoutUsageFlagsNV*)&forMarshaling->flags, sizeof(VkIndirectCommandsLayoutUsageFlagsNV));
     vkStream->write((VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     vkStream->write((uint32_t*)&forMarshaling->tokenCount, sizeof(uint32_t));
@@ -15417,7 +20900,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->tokenCount; ++i)
         {
-            marshal_VkIndirectCommandsLayoutTokenNV(vkStream, (const VkIndirectCommandsLayoutTokenNV*)(forMarshaling->pTokens + i));
+            marshal_VkIndirectCommandsLayoutTokenNV(vkStream, rootType, (const VkIndirectCommandsLayoutTokenNV*)(forMarshaling->pTokens + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->streamCount, sizeof(uint32_t));
@@ -15426,10 +20909,16 @@
 
 void unmarshal_VkIndirectCommandsLayoutCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIndirectCommandsLayoutCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkIndirectCommandsLayoutUsageFlagsNV*)&forUnmarshaling->flags, sizeof(VkIndirectCommandsLayoutUsageFlagsNV));
     vkStream->read((VkPipelineBindPoint*)&forUnmarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     vkStream->read((uint32_t*)&forUnmarshaling->tokenCount, sizeof(uint32_t));
@@ -15437,7 +20926,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->tokenCount; ++i)
         {
-            unmarshal_VkIndirectCommandsLayoutTokenNV(vkStream, (VkIndirectCommandsLayoutTokenNV*)(forUnmarshaling->pTokens + i));
+            unmarshal_VkIndirectCommandsLayoutTokenNV(vkStream, rootType, (VkIndirectCommandsLayoutTokenNV*)(forUnmarshaling->pTokens + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->streamCount, sizeof(uint32_t));
@@ -15446,10 +20935,16 @@
 
 void marshal_VkGeneratedCommandsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkPipeline_u64(&forMarshaling->pipeline, &cgen_var_0, 1);
@@ -15462,7 +20957,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->streamCount; ++i)
         {
-            marshal_VkIndirectCommandsStreamNV(vkStream, (const VkIndirectCommandsStreamNV*)(forMarshaling->pStreams + i));
+            marshal_VkIndirectCommandsStreamNV(vkStream, rootType, (const VkIndirectCommandsStreamNV*)(forMarshaling->pStreams + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->sequencesCount, sizeof(uint32_t));
@@ -15483,10 +20978,16 @@
 
 void unmarshal_VkGeneratedCommandsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeneratedCommandsInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineBindPoint*)&forUnmarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -15499,7 +21000,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->streamCount; ++i)
         {
-            unmarshal_VkIndirectCommandsStreamNV(vkStream, (VkIndirectCommandsStreamNV*)(forUnmarshaling->pStreams + i));
+            unmarshal_VkIndirectCommandsStreamNV(vkStream, rootType, (VkIndirectCommandsStreamNV*)(forUnmarshaling->pStreams + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->sequencesCount, sizeof(uint32_t));
@@ -15520,10 +21021,16 @@
 
 void marshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkPipeline_u64(&forMarshaling->pipeline, &cgen_var_0, 1);
@@ -15536,10 +21043,16 @@
 
 void unmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeneratedCommandsMemoryRequirementsInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineBindPoint*)&forUnmarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -15554,28 +21067,46 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void marshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->texelBufferAlignment, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->texelBufferAlignment, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->storageTexelBufferOffsetAlignmentBytes, sizeof(VkDeviceSize));
     vkStream->write((VkBool32*)&forMarshaling->storageTexelBufferOffsetSingleTexelAlignment, sizeof(VkBool32));
     vkStream->write((VkDeviceSize*)&forMarshaling->uniformTexelBufferOffsetAlignmentBytes, sizeof(VkDeviceSize));
@@ -15584,10 +21115,16 @@
 
 void unmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->storageTexelBufferOffsetAlignmentBytes, sizeof(VkDeviceSize));
     vkStream->read((VkBool32*)&forUnmarshaling->storageTexelBufferOffsetSingleTexelAlignment, sizeof(VkBool32));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->uniformTexelBufferOffsetAlignmentBytes, sizeof(VkDeviceSize));
@@ -15598,68 +21135,110 @@
 #ifdef VK_QCOM_render_pass_transform
 void marshal_VkRenderPassTransformBeginInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
 }
 
 void unmarshal_VkRenderPassTransformBeginInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassTransformBeginInfoQCOM* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSurfaceTransformFlagBitsKHR*)&forUnmarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
 }
 
 void marshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
-    marshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->renderArea));
+    marshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->renderArea));
 }
 
 void unmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferInheritanceRenderPassTransformInfoQCOM* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSurfaceTransformFlagBitsKHR*)&forUnmarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
-    unmarshal_VkRect2D(vkStream, (VkRect2D*)(&forUnmarshaling->renderArea));
+    unmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forUnmarshaling->renderArea));
 }
 
 #endif
 #ifdef VK_EXT_device_memory_report
 void marshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->deviceMemoryReport, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->deviceMemoryReport, sizeof(VkBool32));
 }
 
 void marshal_VkDeviceMemoryReportCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceMemoryReportFlagsEXT*)&forMarshaling->flags, sizeof(VkDeviceMemoryReportFlagsEXT));
     vkStream->write((VkDeviceMemoryReportEventTypeEXT*)&forMarshaling->type, sizeof(VkDeviceMemoryReportEventTypeEXT));
     vkStream->write((uint64_t*)&forMarshaling->memoryObjectId, sizeof(uint64_t));
@@ -15671,10 +21250,16 @@
 
 void unmarshal_VkDeviceMemoryReportCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceMemoryReportCallbackDataEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceMemoryReportFlagsEXT*)&forUnmarshaling->flags, sizeof(VkDeviceMemoryReportFlagsEXT));
     vkStream->read((VkDeviceMemoryReportEventTypeEXT*)&forUnmarshaling->type, sizeof(VkDeviceMemoryReportEventTypeEXT));
     vkStream->read((uint64_t*)&forUnmarshaling->memoryObjectId, sizeof(uint64_t));
@@ -15686,10 +21271,16 @@
 
 void marshal_VkDeviceDeviceMemoryReportCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceMemoryReportFlagsEXT*)&forMarshaling->flags, sizeof(VkDeviceMemoryReportFlagsEXT));
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->pfnUserCallback;
     vkStream->putBe64(cgen_var_0);
@@ -15698,10 +21289,16 @@
 
 void unmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceDeviceMemoryReportCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceMemoryReportFlagsEXT*)&forUnmarshaling->flags, sizeof(VkDeviceMemoryReportFlagsEXT));
     forUnmarshaling->pfnUserCallback = (PFN_vkDeviceMemoryReportCallbackEXT)vkStream->getBe64();
     vkStream->read((void*)forUnmarshaling->pUserData, sizeof(uint8_t));
@@ -15711,10 +21308,16 @@
 #ifdef VK_EXT_robustness2
 void marshal_VkPhysicalDeviceRobustness2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->robustBufferAccess2, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->robustImageAccess2, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->nullDescriptor, sizeof(VkBool32));
@@ -15722,10 +21325,16 @@
 
 void unmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRobustness2FeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->robustBufferAccess2, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->robustImageAccess2, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->nullDescriptor, sizeof(VkBool32));
@@ -15733,20 +21342,32 @@
 
 void marshal_VkPhysicalDeviceRobustness2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->robustStorageBufferAccessSizeAlignment, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->robustUniformBufferAccessSizeAlignment, sizeof(VkDeviceSize));
 }
 
 void unmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRobustness2PropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->robustStorageBufferAccessSizeAlignment, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->robustUniformBufferAccessSizeAlignment, sizeof(VkDeviceSize));
 }
@@ -15755,58 +21376,94 @@
 #ifdef VK_EXT_custom_border_color
 void marshal_VkSamplerCustomBorderColorCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkClearColorValue(vkStream, (VkClearColorValue*)(&forMarshaling->customBorderColor));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkClearColorValue(vkStream, rootType, (VkClearColorValue*)(&forMarshaling->customBorderColor));
     vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
 }
 
 void unmarshal_VkSamplerCustomBorderColorCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerCustomBorderColorCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkClearColorValue(vkStream, (VkClearColorValue*)(&forUnmarshaling->customBorderColor));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkClearColorValue(vkStream, rootType, (VkClearColorValue*)(&forUnmarshaling->customBorderColor));
     vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
 }
 
 void marshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxCustomBorderColorSamplers, sizeof(uint32_t));
 }
 
 void unmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCustomBorderColorPropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxCustomBorderColorSamplers, sizeof(uint32_t));
 }
 
 void marshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->customBorderColors, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->customBorderColorWithoutFormat, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCustomBorderColorFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->customBorderColors, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->customBorderColorWithoutFormat, sizeof(VkBool32));
 }
@@ -15817,55 +21474,91 @@
 #ifdef VK_EXT_private_data
 void marshal_VkPhysicalDevicePrivateDataFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->privateData, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePrivateDataFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->privateData, sizeof(VkBool32));
 }
 
 void marshal_VkDevicePrivateDataCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->privateDataSlotRequestCount, sizeof(uint32_t));
 }
 
 void unmarshal_VkDevicePrivateDataCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDevicePrivateDataCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->privateDataSlotRequestCount, sizeof(uint32_t));
 }
 
 void marshal_VkPrivateDataSlotCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPrivateDataSlotCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPrivateDataSlotCreateFlagsEXT));
 }
 
 void unmarshal_VkPrivateDataSlotCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPrivateDataSlotCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPrivateDataSlotCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkPrivateDataSlotCreateFlagsEXT));
 }
 
@@ -15873,19 +21566,31 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void marshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->pipelineCreationCacheControl, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->pipelineCreationCacheControl, sizeof(VkBool32));
 }
 
@@ -15893,37 +21598,61 @@
 #ifdef VK_NV_device_diagnostics_config
 void marshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->diagnosticsConfig, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDiagnosticsConfigFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->diagnosticsConfig, sizeof(VkBool32));
 }
 
 void marshal_VkDeviceDiagnosticsConfigCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceDiagnosticsConfigFlagsNV*)&forMarshaling->flags, sizeof(VkDeviceDiagnosticsConfigFlagsNV));
 }
 
 void unmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceDiagnosticsConfigCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceDiagnosticsConfigFlagsNV*)&forUnmarshaling->flags, sizeof(VkDeviceDiagnosticsConfigFlagsNV));
 }
 
@@ -15933,10 +21662,16 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void marshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->fragmentShadingRateEnums, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->supersampleFragmentShadingRates, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->noInvocationFragmentShadingRates, sizeof(VkBool32));
@@ -15944,10 +21679,16 @@
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentShadingRateEnums, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->supersampleFragmentShadingRates, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->noInvocationFragmentShadingRates, sizeof(VkBool32));
@@ -15955,28 +21696,46 @@
 
 void marshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSampleCountFlagBits*)&forMarshaling->maxFragmentShadingRateInvocationCount, sizeof(VkSampleCountFlagBits));
 }
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSampleCountFlagBits*)&forUnmarshaling->maxFragmentShadingRateInvocationCount, sizeof(VkSampleCountFlagBits));
 }
 
 void marshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFragmentShadingRateTypeNV*)&forMarshaling->shadingRateType, sizeof(VkFragmentShadingRateTypeNV));
     vkStream->write((VkFragmentShadingRateNV*)&forMarshaling->shadingRate, sizeof(VkFragmentShadingRateNV));
     vkStream->write((VkFragmentShadingRateCombinerOpKHR*)forMarshaling->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
@@ -15984,10 +21743,16 @@
 
 void unmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineFragmentShadingRateEnumStateCreateInfoNV* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFragmentShadingRateTypeNV*)&forUnmarshaling->shadingRateType, sizeof(VkFragmentShadingRateTypeNV));
     vkStream->read((VkFragmentShadingRateNV*)&forUnmarshaling->shadingRate, sizeof(VkFragmentShadingRateNV));
     vkStream->read((VkFragmentShadingRateCombinerOpKHR*)forUnmarshaling->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
@@ -15997,28 +21762,46 @@
 #ifdef VK_EXT_fragment_density_map2
 void marshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->fragmentDensityMapDeferred, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->fragmentDensityMapDeferred, sizeof(VkBool32));
 }
 
 void marshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->subsampledLoads, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->subsampledCoarseReconstructionEarlyAccess, sizeof(VkBool32));
     vkStream->write((uint32_t*)&forMarshaling->maxSubsampledArrayLayers, sizeof(uint32_t));
@@ -16027,10 +21810,16 @@
 
 void unmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->subsampledLoads, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->subsampledCoarseReconstructionEarlyAccess, sizeof(VkBool32));
     vkStream->read((uint32_t*)&forUnmarshaling->maxSubsampledArrayLayers, sizeof(uint32_t));
@@ -16041,19 +21830,31 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void marshal_VkCopyCommandTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
 }
 
 void unmarshal_VkCopyCommandTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyCommandTransformInfoQCOM* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkSurfaceTransformFlagBitsKHR*)&forUnmarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
 }
 
@@ -16061,19 +21862,31 @@
 #ifdef VK_EXT_image_robustness
 void marshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->robustImageAccess, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageRobustnessFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->robustImageAccess, sizeof(VkBool32));
 }
 
@@ -16081,20 +21894,32 @@
 #ifdef VK_EXT_4444_formats
 void marshal_VkPhysicalDevice4444FormatsFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->formatA4R4G4B4, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->formatA4B4G4R4, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevice4444FormatsFeaturesEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->formatA4R4G4B4, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->formatA4B4G4R4, sizeof(VkBool32));
 }
@@ -16103,10 +21928,16 @@
 #ifdef VK_EXT_directfb_surface
 void marshal_VkDirectFBSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDirectFBSurfaceCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkDirectFBSurfaceCreateFlagsEXT));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->dfb;
@@ -16126,10 +21957,16 @@
 
 void unmarshal_VkDirectFBSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDirectFBSurfaceCreateInfoEXT* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDirectFBSurfaceCreateFlagsEXT*)&forUnmarshaling->flags, sizeof(VkDirectFBSurfaceCreateFlagsEXT));
     // WARNING PTR CHECK
     IDirectFB* check_dfb;
@@ -16157,40 +21994,151 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void marshal_VkImportColorBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* forMarshaling)
+{
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((uint32_t*)&forMarshaling->colorBuffer, sizeof(uint32_t));
+}
+
+void unmarshal_VkImportColorBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    VkImportColorBufferGOOGLE* forUnmarshaling)
+{
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    forUnmarshaling->sType = VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    vkStream->read((uint32_t*)&forUnmarshaling->colorBuffer, sizeof(uint32_t));
+}
+
+void marshal_VkImportBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* forMarshaling)
+{
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((uint32_t*)&forMarshaling->buffer, sizeof(uint32_t));
+}
+
+void unmarshal_VkImportBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    VkImportBufferGOOGLE* forUnmarshaling)
+{
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    forUnmarshaling->sType = VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    vkStream->read((uint32_t*)&forUnmarshaling->buffer, sizeof(uint32_t));
+}
+
+void marshal_VkImportPhysicalAddressGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* forMarshaling)
+{
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((uint64_t*)&forMarshaling->physicalAddress, sizeof(uint64_t));
+    vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
+    vkStream->write((VkFormat*)&forMarshaling->format, sizeof(VkFormat));
+    vkStream->write((VkImageTiling*)&forMarshaling->tiling, sizeof(VkImageTiling));
+    vkStream->write((uint32_t*)&forMarshaling->tilingParameter, sizeof(uint32_t));
+}
+
+void unmarshal_VkImportPhysicalAddressGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    VkImportPhysicalAddressGOOGLE* forUnmarshaling)
+{
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    forUnmarshaling->sType = VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    vkStream->read((uint64_t*)&forUnmarshaling->physicalAddress, sizeof(uint64_t));
+    vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
+    vkStream->read((VkFormat*)&forUnmarshaling->format, sizeof(VkFormat));
+    vkStream->read((VkImageTiling*)&forUnmarshaling->tiling, sizeof(VkImageTiling));
+    vkStream->read((uint32_t*)&forUnmarshaling->tilingParameter, sizeof(uint32_t));
+}
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void marshal_VkDeviceOrHostAddressKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
 }
 
 void unmarshal_VkDeviceOrHostAddressKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceOrHostAddressKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->deviceAddress, sizeof(VkDeviceAddress));
 }
 
 void marshal_VkDeviceOrHostAddressConstKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
 }
 
 void unmarshal_VkDeviceOrHostAddressConstKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceOrHostAddressConstKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->deviceAddress, sizeof(VkDeviceAddress));
 }
 
 void marshal_VkAccelerationStructureBuildRangeInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->primitiveCount, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->primitiveOffset, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->firstVertex, sizeof(uint32_t));
@@ -16199,8 +22147,10 @@
 
 void unmarshal_VkAccelerationStructureBuildRangeInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureBuildRangeInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->primitiveCount, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->primitiveOffset, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->firstVertex, sizeof(uint32_t));
@@ -16209,116 +22159,174 @@
 
 void marshal_VkAccelerationStructureGeometryTrianglesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkFormat*)&forMarshaling->vertexFormat, sizeof(VkFormat));
-    marshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->vertexData));
+    marshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->vertexData));
     vkStream->write((VkDeviceSize*)&forMarshaling->vertexStride, sizeof(VkDeviceSize));
     vkStream->write((uint32_t*)&forMarshaling->maxVertex, sizeof(uint32_t));
     vkStream->write((VkIndexType*)&forMarshaling->indexType, sizeof(VkIndexType));
-    marshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->indexData));
-    marshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->transformData));
+    marshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->indexData));
+    marshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->transformData));
 }
 
 void unmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryTrianglesDataKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkFormat*)&forUnmarshaling->vertexFormat, sizeof(VkFormat));
-    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->vertexData));
+    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->vertexData));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->vertexStride, sizeof(VkDeviceSize));
     vkStream->read((uint32_t*)&forUnmarshaling->maxVertex, sizeof(uint32_t));
     vkStream->read((VkIndexType*)&forUnmarshaling->indexType, sizeof(VkIndexType));
-    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->indexData));
-    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->transformData));
+    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->indexData));
+    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->transformData));
 }
 
 void marshal_VkAccelerationStructureGeometryAabbsDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data));
     vkStream->write((VkDeviceSize*)&forMarshaling->stride, sizeof(VkDeviceSize));
 }
 
 void unmarshal_VkAccelerationStructureGeometryAabbsDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryAabbsDataKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->data));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->data));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->stride, sizeof(VkDeviceSize));
 }
 
 void marshal_VkAccelerationStructureGeometryInstancesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->arrayOfPointers, sizeof(VkBool32));
-    marshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data));
+    marshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data));
 }
 
 void unmarshal_VkAccelerationStructureGeometryInstancesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryInstancesDataKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->arrayOfPointers, sizeof(VkBool32));
-    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->data));
+    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->data));
 }
 
 void marshal_VkAccelerationStructureGeometryDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* forMarshaling)
 {
-    marshal_VkAccelerationStructureGeometryTrianglesDataKHR(vkStream, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&forMarshaling->triangles));
+    (void)rootType;
+    marshal_VkAccelerationStructureGeometryTrianglesDataKHR(vkStream, rootType, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&forMarshaling->triangles));
 }
 
 void unmarshal_VkAccelerationStructureGeometryDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryDataKHR* forUnmarshaling)
 {
-    unmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(vkStream, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&forUnmarshaling->triangles));
+    (void)rootType;
+    unmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(vkStream, rootType, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&forUnmarshaling->triangles));
 }
 
 void marshal_VkAccelerationStructureGeometryKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkGeometryTypeKHR*)&forMarshaling->geometryType, sizeof(VkGeometryTypeKHR));
-    marshal_VkAccelerationStructureGeometryDataKHR(vkStream, (VkAccelerationStructureGeometryDataKHR*)(&forMarshaling->geometry));
+    marshal_VkAccelerationStructureGeometryDataKHR(vkStream, rootType, (VkAccelerationStructureGeometryDataKHR*)(&forMarshaling->geometry));
     vkStream->write((VkGeometryFlagsKHR*)&forMarshaling->flags, sizeof(VkGeometryFlagsKHR));
 }
 
 void unmarshal_VkAccelerationStructureGeometryKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkGeometryTypeKHR*)&forUnmarshaling->geometryType, sizeof(VkGeometryTypeKHR));
-    unmarshal_VkAccelerationStructureGeometryDataKHR(vkStream, (VkAccelerationStructureGeometryDataKHR*)(&forUnmarshaling->geometry));
+    unmarshal_VkAccelerationStructureGeometryDataKHR(vkStream, rootType, (VkAccelerationStructureGeometryDataKHR*)(&forUnmarshaling->geometry));
     vkStream->read((VkGeometryFlagsKHR*)&forUnmarshaling->flags, sizeof(VkGeometryFlagsKHR));
 }
 
 void marshal_VkAccelerationStructureBuildGeometryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccelerationStructureTypeKHR*)&forMarshaling->type, sizeof(VkAccelerationStructureTypeKHR));
     vkStream->write((VkBuildAccelerationStructureFlagsKHR*)&forMarshaling->flags, sizeof(VkBuildAccelerationStructureFlagsKHR));
     vkStream->write((VkBuildAccelerationStructureModeKHR*)&forMarshaling->mode, sizeof(VkBuildAccelerationStructureModeKHR));
@@ -16338,19 +22346,25 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->geometryCount; ++i)
             {
-                marshal_VkAccelerationStructureGeometryKHR(vkStream, (const VkAccelerationStructureGeometryKHR*)(forMarshaling->pGeometries + i));
+                marshal_VkAccelerationStructureGeometryKHR(vkStream, rootType, (const VkAccelerationStructureGeometryKHR*)(forMarshaling->pGeometries + i));
             }
         }
     }
-    marshal_VkDeviceOrHostAddressKHR(vkStream, (VkDeviceOrHostAddressKHR*)(&forMarshaling->scratchData));
+    marshal_VkDeviceOrHostAddressKHR(vkStream, rootType, (VkDeviceOrHostAddressKHR*)(&forMarshaling->scratchData));
 }
 
 void unmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureBuildGeometryInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccelerationStructureTypeKHR*)&forUnmarshaling->type, sizeof(VkAccelerationStructureTypeKHR));
     vkStream->read((VkBuildAccelerationStructureFlagsKHR*)&forUnmarshaling->flags, sizeof(VkBuildAccelerationStructureFlagsKHR));
     vkStream->read((VkBuildAccelerationStructureModeKHR*)&forUnmarshaling->mode, sizeof(VkBuildAccelerationStructureModeKHR));
@@ -16374,19 +22388,25 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->geometryCount; ++i)
             {
-                unmarshal_VkAccelerationStructureGeometryKHR(vkStream, (VkAccelerationStructureGeometryKHR*)(forUnmarshaling->pGeometries + i));
+                unmarshal_VkAccelerationStructureGeometryKHR(vkStream, rootType, (VkAccelerationStructureGeometryKHR*)(forUnmarshaling->pGeometries + i));
             }
         }
     }
-    unmarshal_VkDeviceOrHostAddressKHR(vkStream, (VkDeviceOrHostAddressKHR*)(&forUnmarshaling->scratchData));
+    unmarshal_VkDeviceOrHostAddressKHR(vkStream, rootType, (VkDeviceOrHostAddressKHR*)(&forUnmarshaling->scratchData));
 }
 
 void marshal_VkAccelerationStructureCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkAccelerationStructureCreateFlagsKHR*)&forMarshaling->createFlags, sizeof(VkAccelerationStructureCreateFlagsKHR));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkBuffer_u64(&forMarshaling->buffer, &cgen_var_0, 1);
@@ -16399,10 +22419,16 @@
 
 void unmarshal_VkAccelerationStructureCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkAccelerationStructureCreateFlagsKHR*)&forUnmarshaling->createFlags, sizeof(VkAccelerationStructureCreateFlagsKHR));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
@@ -16415,10 +22441,16 @@
 
 void marshal_VkWriteDescriptorSetAccelerationStructureKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->accelerationStructureCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAccelerationStructures;
@@ -16437,10 +22469,16 @@
 
 void unmarshal_VkWriteDescriptorSetAccelerationStructureKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSetAccelerationStructureKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->accelerationStructureCount, sizeof(uint32_t));
     // WARNING PTR CHECK
     const VkAccelerationStructureKHR* check_pAccelerationStructures;
@@ -16463,10 +22501,16 @@
 
 void marshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->accelerationStructure, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->accelerationStructureCaptureReplay, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->accelerationStructureIndirectBuild, sizeof(VkBool32));
@@ -16476,10 +22520,16 @@
 
 void unmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceAccelerationStructureFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->accelerationStructure, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->accelerationStructureCaptureReplay, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->accelerationStructureIndirectBuild, sizeof(VkBool32));
@@ -16489,10 +22539,16 @@
 
 void marshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint64_t*)&forMarshaling->maxGeometryCount, sizeof(uint64_t));
     vkStream->write((uint64_t*)&forMarshaling->maxInstanceCount, sizeof(uint64_t));
     vkStream->write((uint64_t*)&forMarshaling->maxPrimitiveCount, sizeof(uint64_t));
@@ -16505,10 +22561,16 @@
 
 void unmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceAccelerationStructurePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint64_t*)&forUnmarshaling->maxGeometryCount, sizeof(uint64_t));
     vkStream->read((uint64_t*)&forUnmarshaling->maxInstanceCount, sizeof(uint64_t));
     vkStream->read((uint64_t*)&forUnmarshaling->maxPrimitiveCount, sizeof(uint64_t));
@@ -16521,10 +22583,16 @@
 
 void marshal_VkAccelerationStructureDeviceAddressInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkAccelerationStructureKHR_u64(&forMarshaling->accelerationStructure, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -16532,10 +22600,16 @@
 
 void unmarshal_VkAccelerationStructureDeviceAddressInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureDeviceAddressInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkAccelerationStructureKHR(&cgen_var_0, (VkAccelerationStructureKHR*)&forUnmarshaling->accelerationStructure, 1);
@@ -16543,55 +22617,85 @@
 
 void marshal_VkAccelerationStructureVersionInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((const uint8_t*)forMarshaling->pVersionData, 2*VK_UUID_SIZE * sizeof(const uint8_t));
 }
 
 void unmarshal_VkAccelerationStructureVersionInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureVersionInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint8_t*)forUnmarshaling->pVersionData, 2*VK_UUID_SIZE * sizeof(const uint8_t));
 }
 
 void marshal_VkCopyAccelerationStructureToMemoryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkAccelerationStructureKHR_u64(&forMarshaling->src, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
-    marshal_VkDeviceOrHostAddressKHR(vkStream, (VkDeviceOrHostAddressKHR*)(&forMarshaling->dst));
+    marshal_VkDeviceOrHostAddressKHR(vkStream, rootType, (VkDeviceOrHostAddressKHR*)(&forMarshaling->dst));
     vkStream->write((VkCopyAccelerationStructureModeKHR*)&forMarshaling->mode, sizeof(VkCopyAccelerationStructureModeKHR));
 }
 
 void unmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyAccelerationStructureToMemoryInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkAccelerationStructureKHR(&cgen_var_0, (VkAccelerationStructureKHR*)&forUnmarshaling->src, 1);
-    unmarshal_VkDeviceOrHostAddressKHR(vkStream, (VkDeviceOrHostAddressKHR*)(&forUnmarshaling->dst));
+    unmarshal_VkDeviceOrHostAddressKHR(vkStream, rootType, (VkDeviceOrHostAddressKHR*)(&forUnmarshaling->dst));
     vkStream->read((VkCopyAccelerationStructureModeKHR*)&forUnmarshaling->mode, sizeof(VkCopyAccelerationStructureModeKHR));
 }
 
 void marshal_VkCopyMemoryToAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
-    marshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->src));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->src));
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkAccelerationStructureKHR_u64(&forMarshaling->dst, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -16600,11 +22704,17 @@
 
 void unmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyMemoryToAccelerationStructureInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
-    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->src));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    unmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forUnmarshaling->src));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkAccelerationStructureKHR(&cgen_var_0, (VkAccelerationStructureKHR*)&forUnmarshaling->dst, 1);
@@ -16613,10 +22723,16 @@
 
 void marshal_VkCopyAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     uint64_t cgen_var_0;
     vkStream->handleMapping()->mapHandles_VkAccelerationStructureKHR_u64(&forMarshaling->src, &cgen_var_0, 1);
     vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
@@ -16628,10 +22744,16 @@
 
 void unmarshal_VkCopyAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyAccelerationStructureInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     uint64_t cgen_var_0;
     vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
     vkStream->handleMapping()->mapHandles_u64_VkAccelerationStructureKHR(&cgen_var_0, (VkAccelerationStructureKHR*)&forUnmarshaling->src, 1);
@@ -16643,10 +22765,16 @@
 
 void marshal_VkAccelerationStructureBuildSizesInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkDeviceSize*)&forMarshaling->accelerationStructureSize, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->updateScratchSize, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->buildScratchSize, sizeof(VkDeviceSize));
@@ -16654,10 +22782,16 @@
 
 void unmarshal_VkAccelerationStructureBuildSizesInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureBuildSizesInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->accelerationStructureSize, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->updateScratchSize, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->buildScratchSize, sizeof(VkDeviceSize));
@@ -16667,10 +22801,16 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void marshal_VkRayTracingShaderGroupCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkRayTracingShaderGroupTypeKHR*)&forMarshaling->type, sizeof(VkRayTracingShaderGroupTypeKHR));
     vkStream->write((uint32_t*)&forMarshaling->generalShader, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->closestHitShader, sizeof(uint32_t));
@@ -16687,10 +22827,16 @@
 
 void unmarshal_VkRayTracingShaderGroupCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingShaderGroupCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkRayTracingShaderGroupTypeKHR*)&forUnmarshaling->type, sizeof(VkRayTracingShaderGroupTypeKHR));
     vkStream->read((uint32_t*)&forUnmarshaling->generalShader, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->closestHitShader, sizeof(uint32_t));
@@ -16711,37 +22857,55 @@
 
 void marshal_VkRayTracingPipelineInterfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->maxPipelineRayPayloadSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxPipelineRayHitAttributeSize, sizeof(uint32_t));
 }
 
 void unmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingPipelineInterfaceCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->maxPipelineRayPayloadSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxPipelineRayHitAttributeSize, sizeof(uint32_t));
 }
 
 void marshal_VkRayTracingPipelineCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     vkStream->write((uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     if (forMarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
         {
-            marshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
+            marshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->groupCount, sizeof(uint32_t));
@@ -16749,7 +22913,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->groupCount; ++i)
         {
-            marshal_VkRayTracingShaderGroupCreateInfoKHR(vkStream, (const VkRayTracingShaderGroupCreateInfoKHR*)(forMarshaling->pGroups + i));
+            marshal_VkRayTracingShaderGroupCreateInfoKHR(vkStream, rootType, (const VkRayTracingShaderGroupCreateInfoKHR*)(forMarshaling->pGroups + i));
         }
     }
     vkStream->write((uint32_t*)&forMarshaling->maxPipelineRayRecursionDepth, sizeof(uint32_t));
@@ -16758,21 +22922,21 @@
     vkStream->putBe64(cgen_var_0);
     if (forMarshaling->pLibraryInfo)
     {
-        marshal_VkPipelineLibraryCreateInfoKHR(vkStream, (const VkPipelineLibraryCreateInfoKHR*)(forMarshaling->pLibraryInfo));
+        marshal_VkPipelineLibraryCreateInfoKHR(vkStream, rootType, (const VkPipelineLibraryCreateInfoKHR*)(forMarshaling->pLibraryInfo));
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)forMarshaling->pLibraryInterface;
     vkStream->putBe64(cgen_var_1);
     if (forMarshaling->pLibraryInterface)
     {
-        marshal_VkRayTracingPipelineInterfaceCreateInfoKHR(vkStream, (const VkRayTracingPipelineInterfaceCreateInfoKHR*)(forMarshaling->pLibraryInterface));
+        marshal_VkRayTracingPipelineInterfaceCreateInfoKHR(vkStream, rootType, (const VkRayTracingPipelineInterfaceCreateInfoKHR*)(forMarshaling->pLibraryInterface));
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)forMarshaling->pDynamicState;
     vkStream->putBe64(cgen_var_2);
     if (forMarshaling->pDynamicState)
     {
-        marshal_VkPipelineDynamicStateCreateInfo(vkStream, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState));
+        marshal_VkPipelineDynamicStateCreateInfo(vkStream, rootType, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState));
     }
     uint64_t cgen_var_3;
     vkStream->handleMapping()->mapHandles_VkPipelineLayout_u64(&forMarshaling->layout, &cgen_var_3, 1);
@@ -16785,17 +22949,23 @@
 
 void unmarshal_VkRayTracingPipelineCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingPipelineCreateInfoKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkPipelineCreateFlags*)&forUnmarshaling->flags, sizeof(VkPipelineCreateFlags));
     vkStream->read((uint32_t*)&forUnmarshaling->stageCount, sizeof(uint32_t));
     if (forUnmarshaling)
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->stageCount; ++i)
         {
-            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
+            unmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(forUnmarshaling->pStages + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->groupCount, sizeof(uint32_t));
@@ -16803,7 +22973,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->groupCount; ++i)
         {
-            unmarshal_VkRayTracingShaderGroupCreateInfoKHR(vkStream, (VkRayTracingShaderGroupCreateInfoKHR*)(forUnmarshaling->pGroups + i));
+            unmarshal_VkRayTracingShaderGroupCreateInfoKHR(vkStream, rootType, (VkRayTracingShaderGroupCreateInfoKHR*)(forUnmarshaling->pGroups + i));
         }
     }
     vkStream->read((uint32_t*)&forUnmarshaling->maxPipelineRayRecursionDepth, sizeof(uint32_t));
@@ -16816,7 +22986,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pLibraryInfo inconsistent between guest and host\n");
         }
-        unmarshal_VkPipelineLibraryCreateInfoKHR(vkStream, (VkPipelineLibraryCreateInfoKHR*)(forUnmarshaling->pLibraryInfo));
+        unmarshal_VkPipelineLibraryCreateInfoKHR(vkStream, rootType, (VkPipelineLibraryCreateInfoKHR*)(forUnmarshaling->pLibraryInfo));
     }
     // WARNING PTR CHECK
     const VkRayTracingPipelineInterfaceCreateInfoKHR* check_pLibraryInterface;
@@ -16827,7 +22997,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pLibraryInterface inconsistent between guest and host\n");
         }
-        unmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(vkStream, (VkRayTracingPipelineInterfaceCreateInfoKHR*)(forUnmarshaling->pLibraryInterface));
+        unmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(vkStream, rootType, (VkRayTracingPipelineInterfaceCreateInfoKHR*)(forUnmarshaling->pLibraryInterface));
     }
     // WARNING PTR CHECK
     const VkPipelineDynamicStateCreateInfo* check_pDynamicState;
@@ -16838,7 +23008,7 @@
         {
             fprintf(stderr, "fatal: forUnmarshaling->pDynamicState inconsistent between guest and host\n");
         }
-        unmarshal_VkPipelineDynamicStateCreateInfo(vkStream, (VkPipelineDynamicStateCreateInfo*)(forUnmarshaling->pDynamicState));
+        unmarshal_VkPipelineDynamicStateCreateInfo(vkStream, rootType, (VkPipelineDynamicStateCreateInfo*)(forUnmarshaling->pDynamicState));
     }
     uint64_t cgen_var_3;
     vkStream->read((uint64_t*)&cgen_var_3, 1 * 8);
@@ -16851,10 +23021,16 @@
 
 void marshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->rayTracingPipeline, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->rayTracingPipelineShaderGroupHandleCaptureReplay, sizeof(VkBool32));
     vkStream->write((VkBool32*)&forMarshaling->rayTracingPipelineShaderGroupHandleCaptureReplayMixed, sizeof(VkBool32));
@@ -16864,10 +23040,16 @@
 
 void unmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayTracingPipelineFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->rayTracingPipeline, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->rayTracingPipelineShaderGroupHandleCaptureReplay, sizeof(VkBool32));
     vkStream->read((VkBool32*)&forUnmarshaling->rayTracingPipelineShaderGroupHandleCaptureReplayMixed, sizeof(VkBool32));
@@ -16877,10 +23059,16 @@
 
 void marshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((uint32_t*)&forMarshaling->shaderGroupHandleSize, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxRayRecursionDepth, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->maxShaderGroupStride, sizeof(uint32_t));
@@ -16893,10 +23081,16 @@
 
 void unmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayTracingPipelinePropertiesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((uint32_t*)&forUnmarshaling->shaderGroupHandleSize, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxRayRecursionDepth, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->maxShaderGroupStride, sizeof(uint32_t));
@@ -16909,8 +23103,10 @@
 
 void marshal_VkStridedDeviceAddressRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     vkStream->write((VkDeviceSize*)&forMarshaling->stride, sizeof(VkDeviceSize));
     vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -16918,8 +23114,10 @@
 
 void unmarshal_VkStridedDeviceAddressRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkStridedDeviceAddressRegionKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkDeviceAddress*)&forUnmarshaling->deviceAddress, sizeof(VkDeviceAddress));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->stride, sizeof(VkDeviceSize));
     vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
@@ -16927,8 +23125,10 @@
 
 void marshal_VkTraceRaysIndirectCommandKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((uint32_t*)&forMarshaling->width, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->height, sizeof(uint32_t));
     vkStream->write((uint32_t*)&forMarshaling->depth, sizeof(uint32_t));
@@ -16936,8 +23136,10 @@
 
 void unmarshal_VkTraceRaysIndirectCommandKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTraceRaysIndirectCommandKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((uint32_t*)&forUnmarshaling->width, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->height, sizeof(uint32_t));
     vkStream->read((uint32_t*)&forUnmarshaling->depth, sizeof(uint32_t));
@@ -16947,33 +23149,46 @@
 #ifdef VK_KHR_ray_query
 void marshal_VkPhysicalDeviceRayQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* forMarshaling)
 {
+    (void)rootType;
     vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    marshal_extension_struct(vkStream, forMarshaling->pNext);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
     vkStream->write((VkBool32*)&forMarshaling->rayQuery, sizeof(VkBool32));
 }
 
 void unmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayQueryFeaturesKHR* forUnmarshaling)
 {
+    (void)rootType;
     vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    unmarshal_extension_struct(vkStream, (void*)(forUnmarshaling->pNext));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forUnmarshaling->sType;
+    }
+    unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
     vkStream->read((VkBool32*)&forUnmarshaling->rayQuery, sizeof(VkBool32));
 }
 
 #endif
 void marshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const void* structExtension)
 {
     VkInstanceCreateInfo* structAccess = (VkInstanceCreateInfo*)(structExtension);
-    size_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(vkStream->getFeatureBits(), structExtension);
+    size_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(vkStream->getFeatureBits(), rootType, structExtension);
     if (!currExtSize && structExtension)
     {
         // unknown struct extension; skip and call on its pNext field
-        marshal_extension_struct(vkStream, (void*)structAccess->pNext);
+        marshal_extension_struct(vkStream, rootType, (void*)structAccess->pNext);
         return;
     }
     else
@@ -16997,1535 +23212,1613 @@
 #ifdef VK_VERSION_1_1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceSubgroupProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension));
+            marshal_VkPhysicalDeviceSubgroupProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
         {
-            marshal_VkPhysicalDevice16BitStorageFeatures(vkStream, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension));
+            marshal_VkPhysicalDevice16BitStorageFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
         {
-            marshal_VkMemoryDedicatedRequirements(vkStream, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension));
+            marshal_VkMemoryDedicatedRequirements(vkStream, rootType, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
         {
-            marshal_VkMemoryDedicatedAllocateInfo(vkStream, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension));
+            marshal_VkMemoryDedicatedAllocateInfo(vkStream, rootType, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
         {
-            marshal_VkMemoryAllocateFlagsInfo(vkStream, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension));
+            marshal_VkMemoryAllocateFlagsInfo(vkStream, rootType, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
         {
-            marshal_VkDeviceGroupRenderPassBeginInfo(vkStream, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension));
+            marshal_VkDeviceGroupRenderPassBeginInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
         {
-            marshal_VkDeviceGroupCommandBufferBeginInfo(vkStream, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension));
+            marshal_VkDeviceGroupCommandBufferBeginInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
         {
-            marshal_VkDeviceGroupSubmitInfo(vkStream, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension));
+            marshal_VkDeviceGroupSubmitInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
         {
-            marshal_VkDeviceGroupBindSparseInfo(vkStream, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension));
+            marshal_VkDeviceGroupBindSparseInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
         {
-            marshal_VkBindBufferMemoryDeviceGroupInfo(vkStream, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension));
+            marshal_VkBindBufferMemoryDeviceGroupInfo(vkStream, rootType, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
         {
-            marshal_VkBindImageMemoryDeviceGroupInfo(vkStream, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension));
+            marshal_VkBindImageMemoryDeviceGroupInfo(vkStream, rootType, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
         {
-            marshal_VkDeviceGroupDeviceCreateInfo(vkStream, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension));
+            marshal_VkDeviceGroupDeviceCreateInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
         {
-            marshal_VkPhysicalDeviceFeatures2(vkStream, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension));
+            marshal_VkPhysicalDeviceFeatures2(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
         {
-            marshal_VkPhysicalDevicePointClippingProperties(vkStream, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension));
+            marshal_VkPhysicalDevicePointClippingProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
         {
-            marshal_VkRenderPassInputAttachmentAspectCreateInfo(vkStream, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension));
+            marshal_VkRenderPassInputAttachmentAspectCreateInfo(vkStream, rootType, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
         {
-            marshal_VkImageViewUsageCreateInfo(vkStream, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension));
+            marshal_VkImageViewUsageCreateInfo(vkStream, rootType, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
         {
-            marshal_VkPipelineTessellationDomainOriginStateCreateInfo(vkStream, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension));
+            marshal_VkPipelineTessellationDomainOriginStateCreateInfo(vkStream, rootType, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
         {
-            marshal_VkRenderPassMultiviewCreateInfo(vkStream, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension));
+            marshal_VkRenderPassMultiviewCreateInfo(vkStream, rootType, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
         {
-            marshal_VkPhysicalDeviceMultiviewFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceMultiviewFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceMultiviewProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension));
+            marshal_VkPhysicalDeviceMultiviewProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
         {
-            marshal_VkPhysicalDeviceVariablePointersFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceVariablePointersFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
         {
-            marshal_VkPhysicalDeviceProtectedMemoryFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceProtectedMemoryFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceProtectedMemoryProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension));
+            marshal_VkPhysicalDeviceProtectedMemoryProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
         {
-            marshal_VkProtectedSubmitInfo(vkStream, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension));
+            marshal_VkProtectedSubmitInfo(vkStream, rootType, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
         {
-            marshal_VkSamplerYcbcrConversionInfo(vkStream, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension));
+            marshal_VkSamplerYcbcrConversionInfo(vkStream, rootType, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
         {
-            marshal_VkBindImagePlaneMemoryInfo(vkStream, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension));
+            marshal_VkBindImagePlaneMemoryInfo(vkStream, rootType, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
         {
-            marshal_VkImagePlaneMemoryRequirementsInfo(vkStream, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension));
+            marshal_VkImagePlaneMemoryRequirementsInfo(vkStream, rootType, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
         {
-            marshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
         {
-            marshal_VkSamplerYcbcrConversionImageFormatProperties(vkStream, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension));
+            marshal_VkSamplerYcbcrConversionImageFormatProperties(vkStream, rootType, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
         {
-            marshal_VkPhysicalDeviceExternalImageFormatInfo(vkStream, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension));
+            marshal_VkPhysicalDeviceExternalImageFormatInfo(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
         {
-            marshal_VkExternalImageFormatProperties(vkStream, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension));
+            marshal_VkExternalImageFormatProperties(vkStream, rootType, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceIDProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension));
+            marshal_VkPhysicalDeviceIDProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
         {
-            marshal_VkExternalMemoryImageCreateInfo(vkStream, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension));
+            marshal_VkExternalMemoryImageCreateInfo(vkStream, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
         {
-            marshal_VkExternalMemoryBufferCreateInfo(vkStream, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension));
+            marshal_VkExternalMemoryBufferCreateInfo(vkStream, rootType, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
         {
-            marshal_VkExportMemoryAllocateInfo(vkStream, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension));
+            marshal_VkExportMemoryAllocateInfo(vkStream, rootType, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
         {
-            marshal_VkExportFenceCreateInfo(vkStream, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension));
+            marshal_VkExportFenceCreateInfo(vkStream, rootType, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
         {
-            marshal_VkExportSemaphoreCreateInfo(vkStream, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension));
+            marshal_VkExportSemaphoreCreateInfo(vkStream, rootType, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceMaintenance3Properties(vkStream, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension));
+            marshal_VkPhysicalDeviceMaintenance3Properties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
         {
-            marshal_VkPhysicalDeviceShaderDrawParametersFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceShaderDrawParametersFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_VERSION_1_2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
         {
-            marshal_VkPhysicalDeviceVulkan11Features(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension));
+            marshal_VkPhysicalDeviceVulkan11Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceVulkan11Properties(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension));
+            marshal_VkPhysicalDeviceVulkan11Properties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
         {
-            marshal_VkPhysicalDeviceVulkan12Features(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension));
+            marshal_VkPhysicalDeviceVulkan12Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceVulkan12Properties(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension));
+            marshal_VkPhysicalDeviceVulkan12Properties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
         {
-            marshal_VkImageFormatListCreateInfo(vkStream, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension));
+            marshal_VkImageFormatListCreateInfo(vkStream, rootType, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
         {
-            marshal_VkPhysicalDevice8BitStorageFeatures(vkStream, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension));
+            marshal_VkPhysicalDevice8BitStorageFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceDriverProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension));
+            marshal_VkPhysicalDeviceDriverProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
         {
-            marshal_VkPhysicalDeviceShaderAtomicInt64Features(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension));
+            marshal_VkPhysicalDeviceShaderAtomicInt64Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
         {
-            marshal_VkPhysicalDeviceShaderFloat16Int8Features(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension));
+            marshal_VkPhysicalDeviceShaderFloat16Int8Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceFloatControlsProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension));
+            marshal_VkPhysicalDeviceFloatControlsProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
         {
-            marshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkStream, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension));
+            marshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkStream, rootType, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
         {
-            marshal_VkPhysicalDeviceDescriptorIndexingFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceDescriptorIndexingFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceDescriptorIndexingProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension));
+            marshal_VkPhysicalDeviceDescriptorIndexingProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
         {
-            marshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkStream, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension));
+            marshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkStream, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
         {
-            marshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkStream, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension));
+            marshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkStream, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:
         {
-            marshal_VkSubpassDescriptionDepthStencilResolve(vkStream, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension));
+            marshal_VkSubpassDescriptionDepthStencilResolve(vkStream, rootType, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceDepthStencilResolveProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension));
+            marshal_VkPhysicalDeviceDepthStencilResolveProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
         {
-            marshal_VkPhysicalDeviceScalarBlockLayoutFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceScalarBlockLayoutFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
         {
-            marshal_VkImageStencilUsageCreateInfo(vkStream, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension));
+            marshal_VkImageStencilUsageCreateInfo(vkStream, rootType, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
         {
-            marshal_VkSamplerReductionModeCreateInfo(vkStream, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension));
+            marshal_VkSamplerReductionModeCreateInfo(vkStream, rootType, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension));
+            marshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
         {
-            marshal_VkPhysicalDeviceVulkanMemoryModelFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceVulkanMemoryModelFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
         {
-            marshal_VkPhysicalDeviceImagelessFramebufferFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceImagelessFramebufferFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
         {
-            marshal_VkFramebufferAttachmentsCreateInfo(vkStream, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension));
+            marshal_VkFramebufferAttachmentsCreateInfo(vkStream, rootType, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
         {
-            marshal_VkRenderPassAttachmentBeginInfo(vkStream, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension));
+            marshal_VkRenderPassAttachmentBeginInfo(vkStream, rootType, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
         {
-            marshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
         {
-            marshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
         {
-            marshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
         {
-            marshal_VkAttachmentReferenceStencilLayout(vkStream, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension));
+            marshal_VkAttachmentReferenceStencilLayout(vkStream, rootType, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:
         {
-            marshal_VkAttachmentDescriptionStencilLayout(vkStream, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension));
+            marshal_VkAttachmentDescriptionStencilLayout(vkStream, rootType, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
         {
-            marshal_VkPhysicalDeviceHostQueryResetFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceHostQueryResetFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
         {
-            marshal_VkPhysicalDeviceTimelineSemaphoreFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceTimelineSemaphoreFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
         {
-            marshal_VkPhysicalDeviceTimelineSemaphoreProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension));
+            marshal_VkPhysicalDeviceTimelineSemaphoreProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
         {
-            marshal_VkSemaphoreTypeCreateInfo(vkStream, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension));
+            marshal_VkSemaphoreTypeCreateInfo(vkStream, rootType, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
         {
-            marshal_VkTimelineSemaphoreSubmitInfo(vkStream, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension));
+            marshal_VkTimelineSemaphoreSubmitInfo(vkStream, rootType, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
         {
-            marshal_VkPhysicalDeviceBufferDeviceAddressFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension));
+            marshal_VkPhysicalDeviceBufferDeviceAddressFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
         {
-            marshal_VkBufferOpaqueCaptureAddressCreateInfo(vkStream, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension));
+            marshal_VkBufferOpaqueCaptureAddressCreateInfo(vkStream, rootType, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
         {
-            marshal_VkMemoryOpaqueCaptureAddressAllocateInfo(vkStream, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension));
+            marshal_VkMemoryOpaqueCaptureAddressAllocateInfo(vkStream, rootType, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_swapchain
         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            marshal_VkImageSwapchainCreateInfoKHR(vkStream, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension));
+            marshal_VkImageSwapchainCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
         {
-            marshal_VkBindImageMemorySwapchainInfoKHR(vkStream, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension));
+            marshal_VkBindImageMemorySwapchainInfoKHR(vkStream, rootType, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
         {
-            marshal_VkDeviceGroupPresentInfoKHR(vkStream, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension));
+            marshal_VkDeviceGroupPresentInfoKHR(vkStream, rootType, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            marshal_VkDeviceGroupSwapchainCreateInfoKHR(vkStream, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension));
+            marshal_VkDeviceGroupSwapchainCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_display_swapchain
         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
         {
-            marshal_VkDisplayPresentInfoKHR(vkStream, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension));
+            marshal_VkDisplayPresentInfoKHR(vkStream, rootType, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            marshal_VkImportMemoryWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension));
+            marshal_VkImportMemoryWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            marshal_VkExportMemoryWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension));
+            marshal_VkExportMemoryWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_fd
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
         {
-            marshal_VkImportMemoryFdInfoKHR(vkStream, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension));
+            marshal_VkImportMemoryFdInfoKHR(vkStream, rootType, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
         {
-            marshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(vkStream, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension));
+            marshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(vkStream, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_external_semaphore_win32
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
         {
-            marshal_VkExportSemaphoreWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension));
+            marshal_VkExportSemaphoreWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
         {
-            marshal_VkD3D12FenceSubmitInfoKHR(vkStream, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension));
+            marshal_VkD3D12FenceSubmitInfoKHR(vkStream, rootType, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_push_descriptor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
         {
-            marshal_VkPhysicalDevicePushDescriptorPropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension));
+            marshal_VkPhysicalDevicePushDescriptorPropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_incremental_present
         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
         {
-            marshal_VkPresentRegionsKHR(vkStream, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension));
+            marshal_VkPresentRegionsKHR(vkStream, rootType, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_shared_presentable_image
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
         {
-            marshal_VkSharedPresentSurfaceCapabilitiesKHR(vkStream, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension));
+            marshal_VkSharedPresentSurfaceCapabilitiesKHR(vkStream, rootType, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_external_fence_win32
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
         {
-            marshal_VkExportFenceWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension));
+            marshal_VkExportFenceWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_performance_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
         {
-            marshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
         {
-            marshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension));
+            marshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:
         {
-            marshal_VkQueryPoolPerformanceCreateInfoKHR(vkStream, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension));
+            marshal_VkQueryPoolPerformanceCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:
         {
-            marshal_VkPerformanceQuerySubmitInfoKHR(vkStream, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension));
+            marshal_VkPerformanceQuerySubmitInfoKHR(vkStream, rootType, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_portability_subset
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR:
         {
-            marshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR:
         {
-            marshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension));
+            marshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_shader_clock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
         {
-            marshal_VkPhysicalDeviceShaderClockFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceShaderClockFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_shader_terminate_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
         {
-            marshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_fragment_shading_rate
         case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
         {
-            marshal_VkFragmentShadingRateAttachmentInfoKHR(vkStream, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension));
+            marshal_VkFragmentShadingRateAttachmentInfoKHR(vkStream, rootType, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:
         {
-            marshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkStream, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension));
+            marshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
         {
-            marshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
         {
-            marshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_surface_protected_capabilities
         case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:
         {
-            marshal_VkSurfaceProtectedCapabilitiesKHR(vkStream, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension));
+            marshal_VkSurfaceProtectedCapabilitiesKHR(vkStream, rootType, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_pipeline_executable_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
         {
-            marshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
         {
-            marshal_VkNativeBufferANDROID(vkStream, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension));
+            marshal_VkNativeBufferANDROID(vkStream, rootType, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_report
         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
         {
-            marshal_VkDebugReportCallbackCreateInfoEXT(vkStream, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension));
+            marshal_VkDebugReportCallbackCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_rasterization_order
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
         {
-            marshal_VkPipelineRasterizationStateRasterizationOrderAMD(vkStream, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension));
+            marshal_VkPipelineRasterizationStateRasterizationOrderAMD(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
         {
-            marshal_VkDedicatedAllocationImageCreateInfoNV(vkStream, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension));
+            marshal_VkDedicatedAllocationImageCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
         {
-            marshal_VkDedicatedAllocationBufferCreateInfoNV(vkStream, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension));
+            marshal_VkDedicatedAllocationBufferCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
         {
-            marshal_VkDedicatedAllocationMemoryAllocateInfoNV(vkStream, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension));
+            marshal_VkDedicatedAllocationMemoryAllocateInfoNV(vkStream, rootType, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_transform_feedback
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineRasterizationStateStreamCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineRasterizationStateStreamCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
         {
-            marshal_VkTextureLODGatherFormatPropertiesAMD(vkStream, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension));
+            marshal_VkTextureLODGatherFormatPropertiesAMD(vkStream, rootType, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_corner_sampled_image
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
         {
-            marshal_VkExternalMemoryImageCreateInfoNV(vkStream, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension));
+            marshal_VkExternalMemoryImageCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
         {
-            marshal_VkExportMemoryAllocateInfoNV(vkStream, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension));
+            marshal_VkExportMemoryAllocateInfoNV(vkStream, rootType, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            marshal_VkImportMemoryWin32HandleInfoNV(vkStream, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension));
+            marshal_VkImportMemoryWin32HandleInfoNV(vkStream, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            marshal_VkExportMemoryWin32HandleInfoNV(vkStream, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension));
+            marshal_VkExportMemoryWin32HandleInfoNV(vkStream, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
         {
-            marshal_VkWin32KeyedMutexAcquireReleaseInfoNV(vkStream, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension));
+            marshal_VkWin32KeyedMutexAcquireReleaseInfoNV(vkStream, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_flags
         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
         {
-            marshal_VkValidationFlagsEXT(vkStream, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension));
+            marshal_VkValidationFlagsEXT(vkStream, rootType, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_texture_compression_astc_hdr
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_astc_decode_mode
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:
         {
-            marshal_VkImageViewASTCDecodeModeEXT(vkStream, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension));
+            marshal_VkImageViewASTCDecodeModeEXT(vkStream, rootType, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_conditional_rendering
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
         {
-            marshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkStream, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension));
+            marshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkStream, rootType, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_clip_space_w_scaling
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineViewportWScalingStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineViewportWScalingStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_display_control
         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
         {
-            marshal_VkSwapchainCounterCreateInfoEXT(vkStream, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension));
+            marshal_VkSwapchainCounterCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_GOOGLE_display_timing
         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
         {
-            marshal_VkPresentTimesInfoGOOGLE(vkStream, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension));
+            marshal_VkPresentTimesInfoGOOGLE(vkStream, rootType, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
         {
-            marshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(vkStream, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension));
+            marshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_viewport_swizzle
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineViewportSwizzleStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineViewportSwizzleStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_discard_rectangles
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineDiscardRectangleStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineDiscardRectangleStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_conservative_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_depth_clip_enable
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_utils
         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
         {
-            marshal_VkDebugUtilsMessengerCreateInfoEXT(vkStream, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension));
+            marshal_VkDebugUtilsMessengerCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
         {
-            marshal_VkAndroidHardwareBufferUsageANDROID(vkStream, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension));
+            marshal_VkAndroidHardwareBufferUsageANDROID(vkStream, rootType, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
         {
-            marshal_VkAndroidHardwareBufferFormatPropertiesANDROID(vkStream, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension));
+            marshal_VkAndroidHardwareBufferFormatPropertiesANDROID(vkStream, rootType, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
         {
-            marshal_VkImportAndroidHardwareBufferInfoANDROID(vkStream, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension));
+            marshal_VkImportAndroidHardwareBufferInfoANDROID(vkStream, rootType, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
         {
-            marshal_VkExternalFormatANDROID(vkStream, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension));
+            marshal_VkExternalFormatANDROID(vkStream, rootType, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_inline_uniform_block
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
         {
-            marshal_VkWriteDescriptorSetInlineUniformBlockEXT(vkStream, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension));
+            marshal_VkWriteDescriptorSetInlineUniformBlockEXT(vkStream, rootType, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
         {
-            marshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(vkStream, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension));
+            marshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_sample_locations
         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
         {
-            marshal_VkSampleLocationsInfoEXT(vkStream, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension));
+            marshal_VkSampleLocationsInfoEXT(vkStream, rootType, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
         {
-            marshal_VkRenderPassSampleLocationsBeginInfoEXT(vkStream, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension));
+            marshal_VkRenderPassSampleLocationsBeginInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineSampleLocationsStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineSampleLocationsStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_blend_operation_advanced
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineCoverageToColorStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineCoverageToColorStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineCoverageModulationStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineCoverageModulationStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_shader_sm_builtins
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_image_drm_format_modifier
         case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
         {
-            marshal_VkDrmFormatModifierPropertiesListEXT(vkStream, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension));
+            marshal_VkDrmFormatModifierPropertiesListEXT(vkStream, rootType, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
         {
-            marshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension));
+            marshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
         {
-            marshal_VkImageDrmFormatModifierListCreateInfoEXT(vkStream, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension));
+            marshal_VkImageDrmFormatModifierListCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
         {
-            marshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkStream, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension));
+            marshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_cache
         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
         {
-            marshal_VkShaderModuleValidationCacheCreateInfoEXT(vkStream, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension));
+            marshal_VkShaderModuleValidationCacheCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_shading_rate_image
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceShadingRateImageFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceShadingRateImageFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceShadingRateImagePropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceShadingRateImagePropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_ray_tracing
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
         {
-            marshal_VkWriteDescriptorSetAccelerationStructureNV(vkStream, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension));
+            marshal_VkWriteDescriptorSetAccelerationStructureNV(vkStream, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceRayTracingPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceRayTracingPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_representative_fragment_test
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_filter_cubic
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
         {
-            marshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension));
+            marshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:
         {
-            marshal_VkFilterCubicImageViewImageFormatPropertiesEXT(vkStream, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension));
+            marshal_VkFilterCubicImageViewImageFormatPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_global_priority
         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
         {
-            marshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(vkStream, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension));
+            marshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_external_memory_host
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
         {
-            marshal_VkImportMemoryHostPointerInfoEXT(vkStream, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension));
+            marshal_VkImportMemoryHostPointerInfoEXT(vkStream, rootType, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_pipeline_compiler_control
         case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:
         {
-            marshal_VkPipelineCompilerControlCreateInfoAMD(vkStream, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension));
+            marshal_VkPipelineCompilerControlCreateInfoAMD(vkStream, rootType, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
         {
-            marshal_VkPhysicalDeviceShaderCorePropertiesAMD(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension));
+            marshal_VkPhysicalDeviceShaderCorePropertiesAMD(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_memory_overallocation_behavior
         case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
         {
-            marshal_VkDeviceMemoryOverallocationCreateInfoAMD(vkStream, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension));
+            marshal_VkDeviceMemoryOverallocationCreateInfoAMD(vkStream, rootType, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_GGP_frame_token
         case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:
         {
-            marshal_VkPresentFrameTokenGGP(vkStream, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension));
+            marshal_VkPresentFrameTokenGGP(vkStream, rootType, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_feedback
         case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineCreationFeedbackCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineCreationFeedbackCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_compute_shader_derivatives
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_mesh_shader
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceMeshShaderFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceMeshShaderFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceMeshShaderPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceMeshShaderPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shader_barycentric
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_shader_image_footprint
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_scissor_exclusive
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
         {
-            marshal_VkQueueFamilyCheckpointPropertiesNV(vkStream, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension));
+            marshal_VkQueueFamilyCheckpointPropertiesNV(vkStream, rootType, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_INTEL_shader_integer_functions2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
         {
-            marshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension));
+            marshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_INTEL_performance_query
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL:
         {
-            marshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(vkStream, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension));
+            marshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(vkStream, rootType, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_pci_bus_info
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_display_native_hdr
         case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:
         {
-            marshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(vkStream, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension));
+            marshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(vkStream, rootType, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
         {
-            marshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(vkStream, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension));
+            marshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(vkStream, rootType, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension));
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            marshal_VkImportColorBufferGOOGLE(vkStream, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    marshal_VkImportColorBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension));
+                    break;
+                }
+                default:
+                {
+                    marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension));
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            marshal_VkImportBufferGOOGLE(vkStream, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    marshal_VkImportPhysicalAddressGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension));
+                    break;
+                }
+                default:
+                {
+                    marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension));
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            marshal_VkImportPhysicalAddressGOOGLE(vkStream, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    marshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    marshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    marshal_VkImportBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension));
+                    break;
+                }
+                default:
+                {
+                    marshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension));
+                    break;
+                }
+            }
             break;
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:
         {
-            marshal_VkPhysicalDeviceShaderCoreProperties2AMD(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension));
+            marshal_VkPhysicalDeviceShaderCoreProperties2AMD(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_AMD_device_coherent_memory
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
         {
-            marshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(vkStream, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension));
+            marshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_image_atomic_int64
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_memory_budget
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_memory_priority
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:
         {
-            marshal_VkMemoryPriorityAllocateInfoEXT(vkStream, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension));
+            marshal_VkMemoryPriorityAllocateInfoEXT(vkStream, rootType, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation_image_aliasing
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_buffer_device_address
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
         {
-            marshal_VkBufferDeviceAddressCreateInfoEXT(vkStream, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension));
+            marshal_VkBufferDeviceAddressCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_features
         case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:
         {
-            marshal_VkValidationFeaturesEXT(vkStream, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension));
+            marshal_VkValidationFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_cooperative_matrix
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_coverage_reduction_mode
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineCoverageReductionStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineCoverageReductionStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_shader_interlock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_full_screen_exclusive
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:
         {
-            marshal_VkSurfaceFullScreenExclusiveInfoEXT(vkStream, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension));
+            marshal_VkSurfaceFullScreenExclusiveInfoEXT(vkStream, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:
         {
-            marshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(vkStream, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension));
+            marshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(vkStream, rootType, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:
         {
-            marshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(vkStream, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension));
+            marshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(vkStream, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_line_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
         {
-            marshal_VkPipelineRasterizationLineStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension));
+            marshal_VkPipelineRasterizationLineStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_atomic_float
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_index_type_uint8
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_extended_dynamic_state
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_device_generated_commands
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV:
         {
-            marshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(vkStream, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension));
+            marshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_texel_buffer_alignment
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_QCOM_render_pass_transform
         case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
         {
-            marshal_VkRenderPassTransformBeginInfoQCOM(vkStream, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension));
+            marshal_VkRenderPassTransformBeginInfoQCOM(vkStream, rootType, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
         {
-            marshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(vkStream, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension));
+            marshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(vkStream, rootType, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_device_memory_report
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
         {
-            marshal_VkDeviceDeviceMemoryReportCreateInfoEXT(vkStream, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension));
+            marshal_VkDeviceDeviceMemoryReportCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_robustness2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceRobustness2FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceRobustness2FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceRobustness2PropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceRobustness2PropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_custom_border_color
         case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
         {
-            marshal_VkSamplerCustomBorderColorCreateInfoEXT(vkStream, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension));
+            marshal_VkSamplerCustomBorderColorCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_private_data
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
         {
-            marshal_VkPhysicalDevicePrivateDataFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDevicePrivateDataFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
         {
-            marshal_VkDevicePrivateDataCreateInfoEXT(vkStream, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension));
+            marshal_VkDevicePrivateDataCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_cache_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
         {
-            marshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostics_config
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV:
         {
-            marshal_VkDeviceDiagnosticsConfigCreateInfoNV(vkStream, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension));
+            marshal_VkDeviceDiagnosticsConfigCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shading_rate_enums
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
         {
-            marshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:
         {
-            marshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:
         {
-            marshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension));
+            marshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_density_map2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:
         {
-            marshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
         case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
         {
-            marshal_VkCopyCommandTransformInfoQCOM(vkStream, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension));
+            marshal_VkCopyCommandTransformInfoQCOM(vkStream, rootType, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_image_robustness
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
         {
-            marshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_EXT_4444_formats
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
         {
-            marshal_VkPhysicalDevice4444FormatsFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension));
+            marshal_VkPhysicalDevice4444FormatsFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension));
+            break;
+        }
+#endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            marshal_VkImportColorBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            marshal_VkImportBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            marshal_VkImportPhysicalAddressGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
-            marshal_VkWriteDescriptorSetAccelerationStructureKHR(vkStream, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension));
+            marshal_VkWriteDescriptorSetAccelerationStructureKHR(vkStream, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
         {
-            marshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
         {
-            marshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_ray_tracing_pipeline
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
         {
-            marshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR:
         {
-            marshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension));
             break;
         }
 #endif
 #ifdef VK_KHR_ray_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
         {
-            marshal_VkPhysicalDeviceRayQueryFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension));
+            marshal_VkPhysicalDeviceRayQueryFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension));
             break;
         }
 #endif
@@ -18539,14 +24832,15 @@
 
 void unmarshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     void* structExtension_out)
 {
     VkInstanceCreateInfo* structAccess = (VkInstanceCreateInfo*)(structExtension_out);
-    size_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(vkStream->getFeatureBits(), structExtension_out);
+    size_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(vkStream->getFeatureBits(), rootType, structExtension_out);
     if (!currExtSize && structExtension_out)
     {
         // unknown struct extension; skip and call on its pNext field
-        unmarshal_extension_struct(vkStream, (void*)structAccess->pNext);
+        unmarshal_extension_struct(vkStream, rootType, (void*)structAccess->pNext);
         return;
     }
     else
@@ -18572,1535 +24866,1613 @@
 #ifdef VK_VERSION_1_1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceSubgroupProperties(vkStream, reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSubgroupProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
         {
-            unmarshal_VkPhysicalDevice16BitStorageFeatures(vkStream, reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDevice16BitStorageFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
         {
-            unmarshal_VkMemoryDedicatedRequirements(vkStream, reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
+            unmarshal_VkMemoryDedicatedRequirements(vkStream, rootType, reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
         {
-            unmarshal_VkMemoryDedicatedAllocateInfo(vkStream, reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
+            unmarshal_VkMemoryDedicatedAllocateInfo(vkStream, rootType, reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
         {
-            unmarshal_VkMemoryAllocateFlagsInfo(vkStream, reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
+            unmarshal_VkMemoryAllocateFlagsInfo(vkStream, rootType, reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
         {
-            unmarshal_VkDeviceGroupRenderPassBeginInfo(vkStream, reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
+            unmarshal_VkDeviceGroupRenderPassBeginInfo(vkStream, rootType, reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
         {
-            unmarshal_VkDeviceGroupCommandBufferBeginInfo(vkStream, reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
+            unmarshal_VkDeviceGroupCommandBufferBeginInfo(vkStream, rootType, reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
         {
-            unmarshal_VkDeviceGroupSubmitInfo(vkStream, reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
+            unmarshal_VkDeviceGroupSubmitInfo(vkStream, rootType, reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
         {
-            unmarshal_VkDeviceGroupBindSparseInfo(vkStream, reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
+            unmarshal_VkDeviceGroupBindSparseInfo(vkStream, rootType, reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
         {
-            unmarshal_VkBindBufferMemoryDeviceGroupInfo(vkStream, reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
+            unmarshal_VkBindBufferMemoryDeviceGroupInfo(vkStream, rootType, reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
         {
-            unmarshal_VkBindImageMemoryDeviceGroupInfo(vkStream, reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
+            unmarshal_VkBindImageMemoryDeviceGroupInfo(vkStream, rootType, reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
         {
-            unmarshal_VkDeviceGroupDeviceCreateInfo(vkStream, reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
+            unmarshal_VkDeviceGroupDeviceCreateInfo(vkStream, rootType, reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
         {
-            unmarshal_VkPhysicalDeviceFeatures2(vkStream, reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFeatures2(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
         {
-            unmarshal_VkPhysicalDevicePointClippingProperties(vkStream, reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePointClippingProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
         {
-            unmarshal_VkRenderPassInputAttachmentAspectCreateInfo(vkStream, reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
+            unmarshal_VkRenderPassInputAttachmentAspectCreateInfo(vkStream, rootType, reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
         {
-            unmarshal_VkImageViewUsageCreateInfo(vkStream, reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
+            unmarshal_VkImageViewUsageCreateInfo(vkStream, rootType, reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
         {
-            unmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(vkStream, reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
+            unmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(vkStream, rootType, reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
         {
-            unmarshal_VkRenderPassMultiviewCreateInfo(vkStream, reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
+            unmarshal_VkRenderPassMultiviewCreateInfo(vkStream, rootType, reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceMultiviewFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMultiviewFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceMultiviewProperties(vkStream, reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMultiviewProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceVariablePointersFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceVariablePointersFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVariablePointersFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVariablePointersFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceProtectedMemoryFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceProtectedMemoryFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceProtectedMemoryProperties(vkStream, reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceProtectedMemoryProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
         {
-            unmarshal_VkProtectedSubmitInfo(vkStream, reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
+            unmarshal_VkProtectedSubmitInfo(vkStream, rootType, reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
         {
-            unmarshal_VkSamplerYcbcrConversionInfo(vkStream, reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
+            unmarshal_VkSamplerYcbcrConversionInfo(vkStream, rootType, reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
         {
-            unmarshal_VkBindImagePlaneMemoryInfo(vkStream, reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
+            unmarshal_VkBindImagePlaneMemoryInfo(vkStream, rootType, reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
         {
-            unmarshal_VkImagePlaneMemoryRequirementsInfo(vkStream, reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
+            unmarshal_VkImagePlaneMemoryRequirementsInfo(vkStream, rootType, reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
         {
-            unmarshal_VkSamplerYcbcrConversionImageFormatProperties(vkStream, reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
+            unmarshal_VkSamplerYcbcrConversionImageFormatProperties(vkStream, rootType, reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
         {
-            unmarshal_VkPhysicalDeviceExternalImageFormatInfo(vkStream, reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceExternalImageFormatInfo(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
         {
-            unmarshal_VkExternalImageFormatProperties(vkStream, reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
+            unmarshal_VkExternalImageFormatProperties(vkStream, rootType, reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceIDProperties(vkStream, reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceIDProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
         {
-            unmarshal_VkExternalMemoryImageCreateInfo(vkStream, reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
+            unmarshal_VkExternalMemoryImageCreateInfo(vkStream, rootType, reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
         {
-            unmarshal_VkExternalMemoryBufferCreateInfo(vkStream, reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
+            unmarshal_VkExternalMemoryBufferCreateInfo(vkStream, rootType, reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
         {
-            unmarshal_VkExportMemoryAllocateInfo(vkStream, reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
+            unmarshal_VkExportMemoryAllocateInfo(vkStream, rootType, reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
         {
-            unmarshal_VkExportFenceCreateInfo(vkStream, reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
+            unmarshal_VkExportFenceCreateInfo(vkStream, rootType, reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
         {
-            unmarshal_VkExportSemaphoreCreateInfo(vkStream, reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
+            unmarshal_VkExportSemaphoreCreateInfo(vkStream, rootType, reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceMaintenance3Properties(vkStream, reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMaintenance3Properties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_VERSION_1_2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceVulkan11Features(vkStream, reinterpret_cast<VkPhysicalDeviceVulkan11Features*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVulkan11Features(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVulkan11Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceVulkan11Properties(vkStream, reinterpret_cast<VkPhysicalDeviceVulkan11Properties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVulkan11Properties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVulkan11Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceVulkan12Features(vkStream, reinterpret_cast<VkPhysicalDeviceVulkan12Features*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVulkan12Features(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVulkan12Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceVulkan12Properties(vkStream, reinterpret_cast<VkPhysicalDeviceVulkan12Properties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVulkan12Properties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVulkan12Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
         {
-            unmarshal_VkImageFormatListCreateInfo(vkStream, reinterpret_cast<VkImageFormatListCreateInfo*>(structExtension_out));
+            unmarshal_VkImageFormatListCreateInfo(vkStream, rootType, reinterpret_cast<VkImageFormatListCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
         {
-            unmarshal_VkPhysicalDevice8BitStorageFeatures(vkStream, reinterpret_cast<VkPhysicalDevice8BitStorageFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDevice8BitStorageFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDevice8BitStorageFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceDriverProperties(vkStream, reinterpret_cast<VkPhysicalDeviceDriverProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDriverProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDriverProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceShaderAtomicInt64Features(vkStream, reinterpret_cast<VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderAtomicInt64Features(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceShaderFloat16Int8Features(vkStream, reinterpret_cast<VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderFloat16Int8Features(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceFloatControlsProperties(vkStream, reinterpret_cast<VkPhysicalDeviceFloatControlsProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFloatControlsProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFloatControlsProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
         {
-            unmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkStream, reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension_out));
+            unmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkStream, rootType, reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceDescriptorIndexingProperties(vkStream, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDescriptorIndexingProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
         {
-            unmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkStream, reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension_out));
+            unmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkStream, rootType, reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
         {
-            unmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkStream, reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension_out));
+            unmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkStream, rootType, reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:
         {
-            unmarshal_VkSubpassDescriptionDepthStencilResolve(vkStream, reinterpret_cast<VkSubpassDescriptionDepthStencilResolve*>(structExtension_out));
+            unmarshal_VkSubpassDescriptionDepthStencilResolve(vkStream, rootType, reinterpret_cast<VkSubpassDescriptionDepthStencilResolve*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceDepthStencilResolveProperties(vkStream, reinterpret_cast<VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDepthStencilResolveProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
         {
-            unmarshal_VkImageStencilUsageCreateInfo(vkStream, reinterpret_cast<VkImageStencilUsageCreateInfo*>(structExtension_out));
+            unmarshal_VkImageStencilUsageCreateInfo(vkStream, rootType, reinterpret_cast<VkImageStencilUsageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
         {
-            unmarshal_VkSamplerReductionModeCreateInfo(vkStream, reinterpret_cast<VkSamplerReductionModeCreateInfo*>(structExtension_out));
+            unmarshal_VkSamplerReductionModeCreateInfo(vkStream, rootType, reinterpret_cast<VkSamplerReductionModeCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkStream, reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
         {
-            unmarshal_VkFramebufferAttachmentsCreateInfo(vkStream, reinterpret_cast<VkFramebufferAttachmentsCreateInfo*>(structExtension_out));
+            unmarshal_VkFramebufferAttachmentsCreateInfo(vkStream, rootType, reinterpret_cast<VkFramebufferAttachmentsCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
         {
-            unmarshal_VkRenderPassAttachmentBeginInfo(vkStream, reinterpret_cast<VkRenderPassAttachmentBeginInfo*>(structExtension_out));
+            unmarshal_VkRenderPassAttachmentBeginInfo(vkStream, rootType, reinterpret_cast<VkRenderPassAttachmentBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
         {
-            unmarshal_VkAttachmentReferenceStencilLayout(vkStream, reinterpret_cast<VkAttachmentReferenceStencilLayout*>(structExtension_out));
+            unmarshal_VkAttachmentReferenceStencilLayout(vkStream, rootType, reinterpret_cast<VkAttachmentReferenceStencilLayout*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:
         {
-            unmarshal_VkAttachmentDescriptionStencilLayout(vkStream, reinterpret_cast<VkAttachmentDescriptionStencilLayout*>(structExtension_out));
+            unmarshal_VkAttachmentDescriptionStencilLayout(vkStream, rootType, reinterpret_cast<VkAttachmentDescriptionStencilLayout*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceHostQueryResetFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceHostQueryResetFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceHostQueryResetFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceHostQueryResetFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
         {
-            unmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(vkStream, reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
         {
-            unmarshal_VkSemaphoreTypeCreateInfo(vkStream, reinterpret_cast<VkSemaphoreTypeCreateInfo*>(structExtension_out));
+            unmarshal_VkSemaphoreTypeCreateInfo(vkStream, rootType, reinterpret_cast<VkSemaphoreTypeCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
         {
-            unmarshal_VkTimelineSemaphoreSubmitInfo(vkStream, reinterpret_cast<VkTimelineSemaphoreSubmitInfo*>(structExtension_out));
+            unmarshal_VkTimelineSemaphoreSubmitInfo(vkStream, rootType, reinterpret_cast<VkTimelineSemaphoreSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
         {
-            unmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(vkStream, reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
         {
-            unmarshal_VkBufferOpaqueCaptureAddressCreateInfo(vkStream, reinterpret_cast<VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension_out));
+            unmarshal_VkBufferOpaqueCaptureAddressCreateInfo(vkStream, rootType, reinterpret_cast<VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
         {
-            unmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(vkStream, reinterpret_cast<VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension_out));
+            unmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(vkStream, rootType, reinterpret_cast<VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_swapchain
         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            unmarshal_VkImageSwapchainCreateInfoKHR(vkStream, reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
+            unmarshal_VkImageSwapchainCreateInfoKHR(vkStream, rootType, reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
         {
-            unmarshal_VkBindImageMemorySwapchainInfoKHR(vkStream, reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
+            unmarshal_VkBindImageMemorySwapchainInfoKHR(vkStream, rootType, reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
         {
-            unmarshal_VkDeviceGroupPresentInfoKHR(vkStream, reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
+            unmarshal_VkDeviceGroupPresentInfoKHR(vkStream, rootType, reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            unmarshal_VkDeviceGroupSwapchainCreateInfoKHR(vkStream, reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
+            unmarshal_VkDeviceGroupSwapchainCreateInfoKHR(vkStream, rootType, reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_display_swapchain
         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
         {
-            unmarshal_VkDisplayPresentInfoKHR(vkStream, reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
+            unmarshal_VkDisplayPresentInfoKHR(vkStream, rootType, reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            unmarshal_VkImportMemoryWin32HandleInfoKHR(vkStream, reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            unmarshal_VkImportMemoryWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            unmarshal_VkExportMemoryWin32HandleInfoKHR(vkStream, reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            unmarshal_VkExportMemoryWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_fd
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
         {
-            unmarshal_VkImportMemoryFdInfoKHR(vkStream, reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
+            unmarshal_VkImportMemoryFdInfoKHR(vkStream, rootType, reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
         {
-            unmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(vkStream, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
+            unmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(vkStream, rootType, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_semaphore_win32
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
         {
-            unmarshal_VkExportSemaphoreWin32HandleInfoKHR(vkStream, reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
+            unmarshal_VkExportSemaphoreWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
         {
-            unmarshal_VkD3D12FenceSubmitInfoKHR(vkStream, reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
+            unmarshal_VkD3D12FenceSubmitInfoKHR(vkStream, rootType, reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_push_descriptor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
         {
-            unmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(vkStream, reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_incremental_present
         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
         {
-            unmarshal_VkPresentRegionsKHR(vkStream, reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
+            unmarshal_VkPresentRegionsKHR(vkStream, rootType, reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shared_presentable_image
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
         {
-            unmarshal_VkSharedPresentSurfaceCapabilitiesKHR(vkStream, reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
+            unmarshal_VkSharedPresentSurfaceCapabilitiesKHR(vkStream, rootType, reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_fence_win32
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
         {
-            unmarshal_VkExportFenceWin32HandleInfoKHR(vkStream, reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
+            unmarshal_VkExportFenceWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_performance_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
         {
-            unmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(vkStream, reinterpret_cast<VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:
         {
-            unmarshal_VkQueryPoolPerformanceCreateInfoKHR(vkStream, reinterpret_cast<VkQueryPoolPerformanceCreateInfoKHR*>(structExtension_out));
+            unmarshal_VkQueryPoolPerformanceCreateInfoKHR(vkStream, rootType, reinterpret_cast<VkQueryPoolPerformanceCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:
         {
-            unmarshal_VkPerformanceQuerySubmitInfoKHR(vkStream, reinterpret_cast<VkPerformanceQuerySubmitInfoKHR*>(structExtension_out));
+            unmarshal_VkPerformanceQuerySubmitInfoKHR(vkStream, rootType, reinterpret_cast<VkPerformanceQuerySubmitInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_portability_subset
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR:
         {
-            unmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(vkStream, reinterpret_cast<VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shader_clock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shader_terminate_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_fragment_shading_rate
         case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
         {
-            unmarshal_VkFragmentShadingRateAttachmentInfoKHR(vkStream, reinterpret_cast<VkFragmentShadingRateAttachmentInfoKHR*>(structExtension_out));
+            unmarshal_VkFragmentShadingRateAttachmentInfoKHR(vkStream, rootType, reinterpret_cast<VkFragmentShadingRateAttachmentInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:
         {
-            unmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkStream, reinterpret_cast<VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension_out));
+            unmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkStream, rootType, reinterpret_cast<VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
         {
-            unmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_surface_protected_capabilities
         case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:
         {
-            unmarshal_VkSurfaceProtectedCapabilitiesKHR(vkStream, reinterpret_cast<VkSurfaceProtectedCapabilitiesKHR*>(structExtension_out));
+            unmarshal_VkSurfaceProtectedCapabilitiesKHR(vkStream, rootType, reinterpret_cast<VkSurfaceProtectedCapabilitiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_pipeline_executable_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
         {
-            unmarshal_VkNativeBufferANDROID(vkStream, reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
+            unmarshal_VkNativeBufferANDROID(vkStream, rootType, reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_report
         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
         {
-            unmarshal_VkDebugReportCallbackCreateInfoEXT(vkStream, reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkDebugReportCallbackCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_rasterization_order
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
         {
-            unmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(vkStream, reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
+            unmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(vkStream, rootType, reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
         {
-            unmarshal_VkDedicatedAllocationImageCreateInfoNV(vkStream, reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
+            unmarshal_VkDedicatedAllocationImageCreateInfoNV(vkStream, rootType, reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
         {
-            unmarshal_VkDedicatedAllocationBufferCreateInfoNV(vkStream, reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
+            unmarshal_VkDedicatedAllocationBufferCreateInfoNV(vkStream, rootType, reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
         {
-            unmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(vkStream, reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
+            unmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(vkStream, rootType, reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_transform_feedback
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
         {
-            unmarshal_VkTextureLODGatherFormatPropertiesAMD(vkStream, reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
+            unmarshal_VkTextureLODGatherFormatPropertiesAMD(vkStream, rootType, reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_corner_sampled_image
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
         {
-            unmarshal_VkExternalMemoryImageCreateInfoNV(vkStream, reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
+            unmarshal_VkExternalMemoryImageCreateInfoNV(vkStream, rootType, reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
         {
-            unmarshal_VkExportMemoryAllocateInfoNV(vkStream, reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
+            unmarshal_VkExportMemoryAllocateInfoNV(vkStream, rootType, reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            unmarshal_VkImportMemoryWin32HandleInfoNV(vkStream, reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
+            unmarshal_VkImportMemoryWin32HandleInfoNV(vkStream, rootType, reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            unmarshal_VkExportMemoryWin32HandleInfoNV(vkStream, reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
+            unmarshal_VkExportMemoryWin32HandleInfoNV(vkStream, rootType, reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
         {
-            unmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(vkStream, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
+            unmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(vkStream, rootType, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_flags
         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
         {
-            unmarshal_VkValidationFlagsEXT(vkStream, reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
+            unmarshal_VkValidationFlagsEXT(vkStream, rootType, reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_texture_compression_astc_hdr
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_astc_decode_mode
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:
         {
-            unmarshal_VkImageViewASTCDecodeModeEXT(vkStream, reinterpret_cast<VkImageViewASTCDecodeModeEXT*>(structExtension_out));
+            unmarshal_VkImageViewASTCDecodeModeEXT(vkStream, rootType, reinterpret_cast<VkImageViewASTCDecodeModeEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_conditional_rendering
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
         {
-            unmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkStream, reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension_out));
+            unmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkStream, rootType, reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_clip_space_w_scaling
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineViewportWScalingStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineViewportWScalingStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_display_control
         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
         {
-            unmarshal_VkSwapchainCounterCreateInfoEXT(vkStream, reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkSwapchainCounterCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_GOOGLE_display_timing
         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
         {
-            unmarshal_VkPresentTimesInfoGOOGLE(vkStream, reinterpret_cast<VkPresentTimesInfoGOOGLE*>(structExtension_out));
+            unmarshal_VkPresentTimesInfoGOOGLE(vkStream, rootType, reinterpret_cast<VkPresentTimesInfoGOOGLE*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
         {
-            unmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(vkStream, reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_viewport_swizzle
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_discard_rectangles
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_conservative_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_depth_clip_enable
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_utils
         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
         {
-            unmarshal_VkDebugUtilsMessengerCreateInfoEXT(vkStream, reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkDebugUtilsMessengerCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
         {
-            unmarshal_VkAndroidHardwareBufferUsageANDROID(vkStream, reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
+            unmarshal_VkAndroidHardwareBufferUsageANDROID(vkStream, rootType, reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
         {
-            unmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(vkStream, reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
+            unmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(vkStream, rootType, reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
         {
-            unmarshal_VkImportAndroidHardwareBufferInfoANDROID(vkStream, reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
+            unmarshal_VkImportAndroidHardwareBufferInfoANDROID(vkStream, rootType, reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
         {
-            unmarshal_VkExternalFormatANDROID(vkStream, reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
+            unmarshal_VkExternalFormatANDROID(vkStream, rootType, reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_inline_uniform_block
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
         {
-            unmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(vkStream, reinterpret_cast<VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension_out));
+            unmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(vkStream, rootType, reinterpret_cast<VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
         {
-            unmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(vkStream, reinterpret_cast<VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_sample_locations
         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
         {
-            unmarshal_VkSampleLocationsInfoEXT(vkStream, reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
+            unmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
         {
-            unmarshal_VkRenderPassSampleLocationsBeginInfoEXT(vkStream, reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
+            unmarshal_VkRenderPassSampleLocationsBeginInfoEXT(vkStream, rootType, reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_blend_operation_advanced
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineCoverageToColorStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineCoverageToColorStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineCoverageModulationStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineCoverageModulationStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_shader_sm_builtins
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_image_drm_format_modifier
         case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
         {
-            unmarshal_VkDrmFormatModifierPropertiesListEXT(vkStream, reinterpret_cast<VkDrmFormatModifierPropertiesListEXT*>(structExtension_out));
+            unmarshal_VkDrmFormatModifierPropertiesListEXT(vkStream, rootType, reinterpret_cast<VkDrmFormatModifierPropertiesListEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
         {
-            unmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkStream, reinterpret_cast<VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
         {
-            unmarshal_VkImageDrmFormatModifierListCreateInfoEXT(vkStream, reinterpret_cast<VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkImageDrmFormatModifierListCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
         {
-            unmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkStream, reinterpret_cast<VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_cache
         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
         {
-            unmarshal_VkShaderModuleValidationCacheCreateInfoEXT(vkStream, reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkShaderModuleValidationCacheCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_shading_rate_image
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_ray_tracing
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
         {
-            unmarshal_VkWriteDescriptorSetAccelerationStructureNV(vkStream, reinterpret_cast<VkWriteDescriptorSetAccelerationStructureNV*>(structExtension_out));
+            unmarshal_VkWriteDescriptorSetAccelerationStructureNV(vkStream, rootType, reinterpret_cast<VkWriteDescriptorSetAccelerationStructureNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceRayTracingPropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRayTracingPropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_representative_fragment_test
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_filter_cubic
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
         {
-            unmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkStream, reinterpret_cast<VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:
         {
-            unmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(vkStream, reinterpret_cast<VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension_out));
+            unmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(vkStream, rootType, reinterpret_cast<VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_global_priority
         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
         {
-            unmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(vkStream, reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_external_memory_host
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
         {
-            unmarshal_VkImportMemoryHostPointerInfoEXT(vkStream, reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
+            unmarshal_VkImportMemoryHostPointerInfoEXT(vkStream, rootType, reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_pipeline_compiler_control
         case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:
         {
-            unmarshal_VkPipelineCompilerControlCreateInfoAMD(vkStream, reinterpret_cast<VkPipelineCompilerControlCreateInfoAMD*>(structExtension_out));
+            unmarshal_VkPipelineCompilerControlCreateInfoAMD(vkStream, rootType, reinterpret_cast<VkPipelineCompilerControlCreateInfoAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
         {
-            unmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(vkStream, reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_memory_overallocation_behavior
         case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
         {
-            unmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(vkStream, reinterpret_cast<VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension_out));
+            unmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(vkStream, rootType, reinterpret_cast<VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_GGP_frame_token
         case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:
         {
-            unmarshal_VkPresentFrameTokenGGP(vkStream, reinterpret_cast<VkPresentFrameTokenGGP*>(structExtension_out));
+            unmarshal_VkPresentFrameTokenGGP(vkStream, rootType, reinterpret_cast<VkPresentFrameTokenGGP*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_feedback
         case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineCreationFeedbackCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineCreationFeedbackCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_compute_shader_derivatives
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_mesh_shader
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shader_barycentric
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_shader_image_footprint
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_scissor_exclusive
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
         {
-            unmarshal_VkQueueFamilyCheckpointPropertiesNV(vkStream, reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
+            unmarshal_VkQueueFamilyCheckpointPropertiesNV(vkStream, rootType, reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_INTEL_shader_integer_functions2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
         {
-            unmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(vkStream, reinterpret_cast<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_INTEL_performance_query
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL:
         {
-            unmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(vkStream, reinterpret_cast<VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension_out));
+            unmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(vkStream, rootType, reinterpret_cast<VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_pci_bus_info
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_display_native_hdr
         case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:
         {
-            unmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(vkStream, reinterpret_cast<VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension_out));
+            unmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(vkStream, rootType, reinterpret_cast<VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
         {
-            unmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(vkStream, reinterpret_cast<VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension_out));
+            unmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(vkStream, rootType, reinterpret_cast<VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension_out));
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            unmarshal_VkImportColorBufferGOOGLE(vkStream, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    unmarshal_VkImportColorBufferGOOGLE(vkStream, rootType, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+                    break;
+                }
+                default:
+                {
+                    unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            unmarshal_VkImportBufferGOOGLE(vkStream, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    unmarshal_VkImportPhysicalAddressGOOGLE(vkStream, rootType, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+                    break;
+                }
+                default:
+                {
+                    unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            unmarshal_VkImportPhysicalAddressGOOGLE(vkStream, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    unmarshal_VkImportBufferGOOGLE(vkStream, rootType, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+                    break;
+                }
+                default:
+                {
+                    unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
+                    break;
+                }
+            }
             break;
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:
         {
-            unmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(vkStream, reinterpret_cast<VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_device_coherent_memory
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
         {
-            unmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(vkStream, reinterpret_cast<VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_image_atomic_int64
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_memory_budget
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_memory_priority
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:
         {
-            unmarshal_VkMemoryPriorityAllocateInfoEXT(vkStream, reinterpret_cast<VkMemoryPriorityAllocateInfoEXT*>(structExtension_out));
+            unmarshal_VkMemoryPriorityAllocateInfoEXT(vkStream, rootType, reinterpret_cast<VkMemoryPriorityAllocateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation_image_aliasing
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_buffer_device_address
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
         {
-            unmarshal_VkBufferDeviceAddressCreateInfoEXT(vkStream, reinterpret_cast<VkBufferDeviceAddressCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkBufferDeviceAddressCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkBufferDeviceAddressCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_features
         case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:
         {
-            unmarshal_VkValidationFeaturesEXT(vkStream, reinterpret_cast<VkValidationFeaturesEXT*>(structExtension_out));
+            unmarshal_VkValidationFeaturesEXT(vkStream, rootType, reinterpret_cast<VkValidationFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_cooperative_matrix
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_coverage_reduction_mode
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineCoverageReductionStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineCoverageReductionStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_shader_interlock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_full_screen_exclusive
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:
         {
-            unmarshal_VkSurfaceFullScreenExclusiveInfoEXT(vkStream, reinterpret_cast<VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension_out));
+            unmarshal_VkSurfaceFullScreenExclusiveInfoEXT(vkStream, rootType, reinterpret_cast<VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:
         {
-            unmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(vkStream, reinterpret_cast<VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension_out));
+            unmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(vkStream, rootType, reinterpret_cast<VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:
         {
-            unmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(vkStream, reinterpret_cast<VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension_out));
+            unmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(vkStream, rootType, reinterpret_cast<VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_line_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
         {
-            unmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(vkStream, reinterpret_cast<VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_atomic_float
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_index_type_uint8
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_extended_dynamic_state
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_generated_commands
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV:
         {
-            unmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(vkStream, reinterpret_cast<VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension_out));
+            unmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(vkStream, rootType, reinterpret_cast<VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_texel_buffer_alignment
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_QCOM_render_pass_transform
         case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
         {
-            unmarshal_VkRenderPassTransformBeginInfoQCOM(vkStream, reinterpret_cast<VkRenderPassTransformBeginInfoQCOM*>(structExtension_out));
+            unmarshal_VkRenderPassTransformBeginInfoQCOM(vkStream, rootType, reinterpret_cast<VkRenderPassTransformBeginInfoQCOM*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
         {
-            unmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(vkStream, reinterpret_cast<VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension_out));
+            unmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(vkStream, rootType, reinterpret_cast<VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_device_memory_report
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
         {
-            unmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(vkStream, reinterpret_cast<VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_robustness2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_custom_border_color
         case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
         {
-            unmarshal_VkSamplerCustomBorderColorCreateInfoEXT(vkStream, reinterpret_cast<VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkSamplerCustomBorderColorCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_private_data
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
         {
-            unmarshal_VkDevicePrivateDataCreateInfoEXT(vkStream, reinterpret_cast<VkDevicePrivateDataCreateInfoEXT*>(structExtension_out));
+            unmarshal_VkDevicePrivateDataCreateInfoEXT(vkStream, rootType, reinterpret_cast<VkDevicePrivateDataCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_cache_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostics_config
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV:
         {
-            unmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(vkStream, reinterpret_cast<VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension_out));
+            unmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(vkStream, rootType, reinterpret_cast<VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shading_rate_enums
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
         {
-            unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:
         {
-            unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:
         {
-            unmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(vkStream, reinterpret_cast<VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension_out));
+            unmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(vkStream, rootType, reinterpret_cast<VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_density_map2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:
         {
-            unmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
         case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
         {
-            unmarshal_VkCopyCommandTransformInfoQCOM(vkStream, reinterpret_cast<VkCopyCommandTransformInfoQCOM*>(structExtension_out));
+            unmarshal_VkCopyCommandTransformInfoQCOM(vkStream, rootType, reinterpret_cast<VkCopyCommandTransformInfoQCOM*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_image_robustness
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_4444_formats
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
         {
-            unmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(vkStream, reinterpret_cast<VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension_out));
+            unmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(vkStream, rootType, reinterpret_cast<VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            unmarshal_VkImportColorBufferGOOGLE(vkStream, rootType, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            unmarshal_VkImportBufferGOOGLE(vkStream, rootType, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            unmarshal_VkImportPhysicalAddressGOOGLE(vkStream, rootType, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
-            unmarshal_VkWriteDescriptorSetAccelerationStructureKHR(vkStream, reinterpret_cast<VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension_out));
+            unmarshal_VkWriteDescriptorSetAccelerationStructureKHR(vkStream, rootType, reinterpret_cast<VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
         {
-            unmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_ray_tracing_pipeline
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR:
         {
-            unmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_ray_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
         {
-            unmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(vkStream, reinterpret_cast<VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension_out));
+            unmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(vkStream, rootType, reinterpret_cast<VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
@@ -21468,8 +27840,6 @@
         {
             return "OP_vkMapMemoryIntoAddressSpaceGOOGLE";
         }
-#endif
-#ifdef VK_GOOGLE_color_buffer
         case OP_vkRegisterImageColorBufferGOOGLE:
         {
             return "OP_vkRegisterImageColorBufferGOOGLE";
@@ -21478,8 +27848,6 @@
         {
             return "OP_vkRegisterBufferColorBufferGOOGLE";
         }
-#endif
-#ifdef VK_GOOGLE_gfxstream
         case OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE:
         {
             return "OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE";
diff --git a/system/vulkan_enc/goldfish_vk_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
index 68ea1a6..86c6b4e 100644
--- a/system/vulkan_enc/goldfish_vk_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_marshaling_guest.h
@@ -46,218 +46,272 @@
 #ifdef VK_VERSION_1_0
 void marshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent2D* forMarshaling);
 
 void unmarshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExtent2D* forUnmarshaling);
 
 void marshal_VkExtent3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent3D* forMarshaling);
 
 void unmarshal_VkExtent3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExtent3D* forUnmarshaling);
 
 void marshal_VkOffset2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset2D* forMarshaling);
 
 void unmarshal_VkOffset2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkOffset2D* forUnmarshaling);
 
 void marshal_VkOffset3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset3D* forMarshaling);
 
 void unmarshal_VkOffset3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkOffset3D* forUnmarshaling);
 
 void marshal_VkRect2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRect2D* forMarshaling);
 
 void unmarshal_VkRect2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRect2D* forUnmarshaling);
 
 void marshal_VkBaseInStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseInStructure* forMarshaling);
 
 void unmarshal_VkBaseInStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBaseInStructure* forUnmarshaling);
 
 void marshal_VkBaseOutStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseOutStructure* forMarshaling);
 
 void unmarshal_VkBaseOutStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBaseOutStructure* forUnmarshaling);
 
 void marshal_VkBufferMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* forMarshaling);
 
 void unmarshal_VkBufferMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferMemoryBarrier* forUnmarshaling);
 
 void marshal_VkDispatchIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* forMarshaling);
 
 void unmarshal_VkDispatchIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDispatchIndirectCommand* forUnmarshaling);
 
 void marshal_VkDrawIndexedIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* forMarshaling);
 
 void unmarshal_VkDrawIndexedIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrawIndexedIndirectCommand* forUnmarshaling);
 
 void marshal_VkDrawIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* forMarshaling);
 
 void unmarshal_VkDrawIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrawIndirectCommand* forUnmarshaling);
 
 void marshal_VkImageSubresourceRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceRange* forMarshaling);
 
 void unmarshal_VkImageSubresourceRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSubresourceRange* forUnmarshaling);
 
 void marshal_VkImageMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* forMarshaling);
 
 void unmarshal_VkImageMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageMemoryBarrier* forUnmarshaling);
 
 void marshal_VkMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryBarrier* forMarshaling);
 
 void unmarshal_VkMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryBarrier* forUnmarshaling);
 
 void marshal_VkAllocationCallbacks(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAllocationCallbacks* forMarshaling);
 
 void unmarshal_VkAllocationCallbacks(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAllocationCallbacks* forUnmarshaling);
 
 void marshal_VkApplicationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkApplicationInfo* forMarshaling);
 
 void unmarshal_VkApplicationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkApplicationInfo* forUnmarshaling);
 
 void marshal_VkFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties* forMarshaling);
 
 void unmarshal_VkFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFormatProperties* forUnmarshaling);
 
 void marshal_VkImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties* forMarshaling);
 
 void unmarshal_VkImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageFormatProperties* forUnmarshaling);
 
 void marshal_VkInstanceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* forMarshaling);
 
 void unmarshal_VkInstanceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkInstanceCreateInfo* forUnmarshaling);
 
 void marshal_VkMemoryHeap(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHeap* forMarshaling);
 
 void unmarshal_VkMemoryHeap(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryHeap* forUnmarshaling);
 
 void marshal_VkMemoryType(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryType* forMarshaling);
 
 void unmarshal_VkMemoryType(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryType* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceLimits(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceLimits(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceLimits* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSparseProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSparseProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSparseProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProperties* forUnmarshaling);
 
 void marshal_VkQueueFamilyProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* forMarshaling);
 
 void unmarshal_VkQueueFamilyProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueueFamilyProperties* forUnmarshaling);
 
 #define OP_vkCreateInstance 20000
@@ -273,48 +327,58 @@
 #define OP_vkGetDeviceProcAddr 20010
 void marshal_VkDeviceQueueCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* forMarshaling);
 
 void unmarshal_VkDeviceQueueCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceQueueCreateInfo* forUnmarshaling);
 
 void marshal_VkDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* forMarshaling);
 
 void unmarshal_VkDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateDevice 20011
 #define OP_vkDestroyDevice 20012
 void marshal_VkExtensionProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtensionProperties* forMarshaling);
 
 void unmarshal_VkExtensionProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExtensionProperties* forUnmarshaling);
 
 #define OP_vkEnumerateInstanceExtensionProperties 20013
 #define OP_vkEnumerateDeviceExtensionProperties 20014
 void marshal_VkLayerProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkLayerProperties* forMarshaling);
 
 void unmarshal_VkLayerProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkLayerProperties* forUnmarshaling);
 
 #define OP_vkEnumerateInstanceLayerProperties 20015
 #define OP_vkEnumerateDeviceLayerProperties 20016
 void marshal_VkSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubmitInfo* forMarshaling);
 
 void unmarshal_VkSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubmitInfo* forUnmarshaling);
 
 #define OP_vkGetDeviceQueue 20017
@@ -323,18 +387,22 @@
 #define OP_vkDeviceWaitIdle 20020
 void marshal_VkMappedMemoryRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMappedMemoryRange* forMarshaling);
 
 void unmarshal_VkMappedMemoryRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMappedMemoryRange* forUnmarshaling);
 
 void marshal_VkMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* forMarshaling);
 
 void unmarshal_VkMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryAllocateInfo* forUnmarshaling);
 
 #define OP_vkAllocateMemory 20021
@@ -346,10 +414,12 @@
 #define OP_vkGetDeviceMemoryCommitment 20027
 void marshal_VkMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements* forMarshaling);
 
 void unmarshal_VkMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryRequirements* forUnmarshaling);
 
 #define OP_vkBindBufferMemory 20028
@@ -358,74 +428,92 @@
 #define OP_vkGetImageMemoryRequirements 20031
 void marshal_VkSparseMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseMemoryBind* forMarshaling);
 
 void unmarshal_VkSparseMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseMemoryBind* forUnmarshaling);
 
 void marshal_VkSparseBufferMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* forMarshaling);
 
 void unmarshal_VkSparseBufferMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseBufferMemoryBindInfo* forUnmarshaling);
 
 void marshal_VkSparseImageOpaqueMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* forMarshaling);
 
 void unmarshal_VkSparseImageOpaqueMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageOpaqueMemoryBindInfo* forUnmarshaling);
 
 void marshal_VkImageSubresource(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresource* forMarshaling);
 
 void unmarshal_VkImageSubresource(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSubresource* forUnmarshaling);
 
 void marshal_VkSparseImageMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* forMarshaling);
 
 void unmarshal_VkSparseImageMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryBind* forUnmarshaling);
 
 void marshal_VkSparseImageMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* forMarshaling);
 
 void unmarshal_VkSparseImageMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryBindInfo* forUnmarshaling);
 
 void marshal_VkBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindSparseInfo* forMarshaling);
 
 void unmarshal_VkBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindSparseInfo* forUnmarshaling);
 
 void marshal_VkSparseImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* forMarshaling);
 
 void unmarshal_VkSparseImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageFormatProperties* forUnmarshaling);
 
 void marshal_VkSparseImageMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* forMarshaling);
 
 void unmarshal_VkSparseImageMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryRequirements* forUnmarshaling);
 
 #define OP_vkGetImageSparseMemoryRequirements 20032
@@ -433,10 +521,12 @@
 #define OP_vkQueueBindSparse 20034
 void marshal_VkFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceCreateInfo* forMarshaling);
 
 void unmarshal_VkFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFenceCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateFence 20035
@@ -446,20 +536,24 @@
 #define OP_vkWaitForFences 20039
 void marshal_VkSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* forMarshaling);
 
 void unmarshal_VkSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateSemaphore 20040
 #define OP_vkDestroySemaphore 20041
 void marshal_VkEventCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkEventCreateInfo* forMarshaling);
 
 void unmarshal_VkEventCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkEventCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateEvent 20042
@@ -469,10 +563,12 @@
 #define OP_vkResetEvent 20046
 void marshal_VkQueryPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* forMarshaling);
 
 void unmarshal_VkQueryPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueryPoolCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateQueryPool 20047
@@ -480,38 +576,46 @@
 #define OP_vkGetQueryPoolResults 20049
 void marshal_VkBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCreateInfo* forMarshaling);
 
 void unmarshal_VkBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateBuffer 20050
 #define OP_vkDestroyBuffer 20051
 void marshal_VkBufferViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* forMarshaling);
 
 void unmarshal_VkBufferViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferViewCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateBufferView 20052
 #define OP_vkDestroyBufferView 20053
 void marshal_VkImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCreateInfo* forMarshaling);
 
 void unmarshal_VkImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageCreateInfo* forUnmarshaling);
 
 void marshal_VkSubresourceLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubresourceLayout* forMarshaling);
 
 void unmarshal_VkSubresourceLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubresourceLayout* forUnmarshaling);
 
 #define OP_vkCreateImage 20054
@@ -519,38 +623,46 @@
 #define OP_vkGetImageSubresourceLayout 20056
 void marshal_VkComponentMapping(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComponentMapping* forMarshaling);
 
 void unmarshal_VkComponentMapping(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkComponentMapping* forUnmarshaling);
 
 void marshal_VkImageViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* forMarshaling);
 
 void unmarshal_VkImageViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateImageView 20057
 #define OP_vkDestroyImageView 20058
 void marshal_VkShaderModuleCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* forMarshaling);
 
 void unmarshal_VkShaderModuleCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderModuleCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateShaderModule 20059
 #define OP_vkDestroyShaderModule 20060
 void marshal_VkPipelineCacheCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineCacheCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCacheCreateInfo* forUnmarshaling);
 
 #define OP_vkCreatePipelineCache 20061
@@ -559,154 +671,192 @@
 #define OP_vkMergePipelineCaches 20064
 void marshal_VkSpecializationMapEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* forMarshaling);
 
 void unmarshal_VkSpecializationMapEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSpecializationMapEntry* forUnmarshaling);
 
 void marshal_VkSpecializationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationInfo* forMarshaling);
 
 void unmarshal_VkSpecializationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSpecializationInfo* forUnmarshaling);
 
 void marshal_VkPipelineShaderStageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineShaderStageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineShaderStageCreateInfo* forUnmarshaling);
 
 void marshal_VkComputePipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* forMarshaling);
 
 void unmarshal_VkComputePipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkComputePipelineCreateInfo* forUnmarshaling);
 
 void marshal_VkVertexInputBindingDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* forMarshaling);
 
 void unmarshal_VkVertexInputBindingDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkVertexInputBindingDescription* forUnmarshaling);
 
 void marshal_VkVertexInputAttributeDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* forMarshaling);
 
 void unmarshal_VkVertexInputAttributeDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkVertexInputAttributeDescription* forUnmarshaling);
 
 void marshal_VkPipelineVertexInputStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineVertexInputStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineVertexInputStateCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineInputAssemblyStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineInputAssemblyStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineInputAssemblyStateCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineTessellationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineTessellationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineTessellationStateCreateInfo* forUnmarshaling);
 
 void marshal_VkViewport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewport* forMarshaling);
 
 void unmarshal_VkViewport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViewport* forUnmarshaling);
 
 void marshal_VkPipelineViewportStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineViewportStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportStateCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineRasterizationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineRasterizationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationStateCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineMultisampleStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineMultisampleStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineMultisampleStateCreateInfo* forUnmarshaling);
 
 void marshal_VkStencilOpState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStencilOpState* forMarshaling);
 
 void unmarshal_VkStencilOpState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkStencilOpState* forUnmarshaling);
 
 void marshal_VkPipelineDepthStencilStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineDepthStencilStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineDepthStencilStateCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineColorBlendAttachmentState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* forMarshaling);
 
 void unmarshal_VkPipelineColorBlendAttachmentState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineColorBlendAttachmentState* forUnmarshaling);
 
 void marshal_VkPipelineColorBlendStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineColorBlendStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineColorBlendStateCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineDynamicStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineDynamicStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineDynamicStateCreateInfo* forUnmarshaling);
 
 void marshal_VkGraphicsPipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* forMarshaling);
 
 void unmarshal_VkGraphicsPipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGraphicsPipelineCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateGraphicsPipelines 20065
@@ -714,102 +864,126 @@
 #define OP_vkDestroyPipeline 20067
 void marshal_VkPushConstantRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPushConstantRange* forMarshaling);
 
 void unmarshal_VkPushConstantRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPushConstantRange* forUnmarshaling);
 
 void marshal_VkPipelineLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineLayoutCreateInfo* forUnmarshaling);
 
 #define OP_vkCreatePipelineLayout 20068
 #define OP_vkDestroyPipelineLayout 20069
 void marshal_VkSamplerCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* forMarshaling);
 
 void unmarshal_VkSamplerCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateSampler 20070
 #define OP_vkDestroySampler 20071
 void marshal_VkCopyDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* forMarshaling);
 
 void unmarshal_VkCopyDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyDescriptorSet* forUnmarshaling);
 
 void marshal_VkDescriptorBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* forMarshaling);
 
 void unmarshal_VkDescriptorBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorBufferInfo* forUnmarshaling);
 
 void marshal_VkDescriptorImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* forMarshaling);
 
 void unmarshal_VkDescriptorImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorImageInfo* forUnmarshaling);
 
 void marshal_VkDescriptorPoolSize(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* forMarshaling);
 
 void unmarshal_VkDescriptorPoolSize(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorPoolSize* forUnmarshaling);
 
 void marshal_VkDescriptorPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* forMarshaling);
 
 void unmarshal_VkDescriptorPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorPoolCreateInfo* forUnmarshaling);
 
 void marshal_VkDescriptorSetAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* forMarshaling);
 
 void unmarshal_VkDescriptorSetAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetAllocateInfo* forUnmarshaling);
 
 void marshal_VkDescriptorSetLayoutBinding(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* forMarshaling);
 
 void unmarshal_VkDescriptorSetLayoutBinding(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutBinding* forUnmarshaling);
 
 void marshal_VkDescriptorSetLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* forMarshaling);
 
 void unmarshal_VkDescriptorSetLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutCreateInfo* forUnmarshaling);
 
 void marshal_VkWriteDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* forMarshaling);
 
 void unmarshal_VkWriteDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSet* forUnmarshaling);
 
 #define OP_vkCreateDescriptorSetLayout 20072
@@ -822,50 +996,62 @@
 #define OP_vkUpdateDescriptorSets 20079
 void marshal_VkAttachmentDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription* forMarshaling);
 
 void unmarshal_VkAttachmentDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentDescription* forUnmarshaling);
 
 void marshal_VkAttachmentReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference* forMarshaling);
 
 void unmarshal_VkAttachmentReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentReference* forUnmarshaling);
 
 void marshal_VkFramebufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* forMarshaling);
 
 void unmarshal_VkFramebufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferCreateInfo* forUnmarshaling);
 
 void marshal_VkSubpassDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription* forMarshaling);
 
 void unmarshal_VkSubpassDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDescription* forUnmarshaling);
 
 void marshal_VkSubpassDependency(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency* forMarshaling);
 
 void unmarshal_VkSubpassDependency(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDependency* forUnmarshaling);
 
 void marshal_VkRenderPassCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* forMarshaling);
 
 void unmarshal_VkRenderPassCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateFramebuffer 20080
@@ -875,10 +1061,12 @@
 #define OP_vkGetRenderAreaGranularity 20084
 void marshal_VkCommandPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* forMarshaling);
 
 void unmarshal_VkCommandPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandPoolCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateCommandPool 20085
@@ -886,26 +1074,32 @@
 #define OP_vkResetCommandPool 20087
 void marshal_VkCommandBufferAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* forMarshaling);
 
 void unmarshal_VkCommandBufferAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferAllocateInfo* forUnmarshaling);
 
 void marshal_VkCommandBufferInheritanceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* forMarshaling);
 
 void unmarshal_VkCommandBufferInheritanceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferInheritanceInfo* forUnmarshaling);
 
 void marshal_VkCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* forMarshaling);
 
 void unmarshal_VkCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferBeginInfo* forUnmarshaling);
 
 #define OP_vkAllocateCommandBuffers 20088
@@ -915,98 +1109,122 @@
 #define OP_vkResetCommandBuffer 20092
 void marshal_VkBufferCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy* forMarshaling);
 
 void unmarshal_VkBufferCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferCopy* forUnmarshaling);
 
 void marshal_VkImageSubresourceLayers(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* forMarshaling);
 
 void unmarshal_VkImageSubresourceLayers(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSubresourceLayers* forUnmarshaling);
 
 void marshal_VkBufferImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy* forMarshaling);
 
 void unmarshal_VkBufferImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferImageCopy* forUnmarshaling);
 
 void marshal_VkClearColorValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearColorValue* forMarshaling);
 
 void unmarshal_VkClearColorValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearColorValue* forUnmarshaling);
 
 void marshal_VkClearDepthStencilValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* forMarshaling);
 
 void unmarshal_VkClearDepthStencilValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearDepthStencilValue* forUnmarshaling);
 
 void marshal_VkClearValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearValue* forMarshaling);
 
 void unmarshal_VkClearValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearValue* forUnmarshaling);
 
 void marshal_VkClearAttachment(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearAttachment* forMarshaling);
 
 void unmarshal_VkClearAttachment(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearAttachment* forUnmarshaling);
 
 void marshal_VkClearRect(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearRect* forMarshaling);
 
 void unmarshal_VkClearRect(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkClearRect* forUnmarshaling);
 
 void marshal_VkImageBlit(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit* forMarshaling);
 
 void unmarshal_VkImageBlit(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageBlit* forUnmarshaling);
 
 void marshal_VkImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy* forMarshaling);
 
 void unmarshal_VkImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageCopy* forUnmarshaling);
 
 void marshal_VkImageResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve* forMarshaling);
 
 void unmarshal_VkImageResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageResolve* forUnmarshaling);
 
 void marshal_VkRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* forMarshaling);
 
 void unmarshal_VkRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassBeginInfo* forUnmarshaling);
 
 #define OP_vkCmdBindPipeline 20093
@@ -1058,92 +1276,114 @@
 #define OP_vkEnumerateInstanceVersion 20137
 void marshal_VkPhysicalDeviceSubgroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSubgroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSubgroupProperties* forUnmarshaling);
 
 void marshal_VkBindBufferMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* forMarshaling);
 
 void unmarshal_VkBindBufferMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindBufferMemoryInfo* forUnmarshaling);
 
 void marshal_VkBindImageMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* forMarshaling);
 
 void unmarshal_VkBindImageMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImageMemoryInfo* forUnmarshaling);
 
 #define OP_vkBindBufferMemory2 20138
 #define OP_vkBindImageMemory2 20139
 void marshal_VkPhysicalDevice16BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDevice16BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevice16BitStorageFeatures* forUnmarshaling);
 
 void marshal_VkMemoryDedicatedRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* forMarshaling);
 
 void unmarshal_VkMemoryDedicatedRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryDedicatedRequirements* forUnmarshaling);
 
 void marshal_VkMemoryDedicatedAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* forMarshaling);
 
 void unmarshal_VkMemoryDedicatedAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryDedicatedAllocateInfo* forUnmarshaling);
 
 void marshal_VkMemoryAllocateFlagsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* forMarshaling);
 
 void unmarshal_VkMemoryAllocateFlagsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryAllocateFlagsInfo* forUnmarshaling);
 
 void marshal_VkDeviceGroupRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* forMarshaling);
 
 void unmarshal_VkDeviceGroupRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupRenderPassBeginInfo* forUnmarshaling);
 
 void marshal_VkDeviceGroupCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* forMarshaling);
 
 void unmarshal_VkDeviceGroupCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupCommandBufferBeginInfo* forUnmarshaling);
 
 void marshal_VkDeviceGroupSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* forMarshaling);
 
 void unmarshal_VkDeviceGroupSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupSubmitInfo* forUnmarshaling);
 
 void marshal_VkDeviceGroupBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* forMarshaling);
 
 void unmarshal_VkDeviceGroupBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupBindSparseInfo* forUnmarshaling);
 
 #define OP_vkGetDeviceGroupPeerMemoryFeatures 20140
@@ -1151,75 +1391,93 @@
 #define OP_vkCmdDispatchBase 20142
 void marshal_VkBindBufferMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* forMarshaling);
 
 void unmarshal_VkBindBufferMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindBufferMemoryDeviceGroupInfo* forUnmarshaling);
 
 void marshal_VkBindImageMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* forMarshaling);
 
 void unmarshal_VkBindImageMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImageMemoryDeviceGroupInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceGroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceGroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceGroupProperties* forUnmarshaling);
 
 void marshal_VkDeviceGroupDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* forMarshaling);
 
 void unmarshal_VkDeviceGroupDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupDeviceCreateInfo* forUnmarshaling);
 
 #define OP_vkEnumeratePhysicalDeviceGroups 20143
 void marshal_VkBufferMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* forMarshaling);
 
 void unmarshal_VkBufferMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferMemoryRequirementsInfo2* forUnmarshaling);
 
 void marshal_VkImageMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* forMarshaling);
 
 void unmarshal_VkImageMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageMemoryRequirementsInfo2* forUnmarshaling);
 
 void marshal_VkImageSparseMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* forMarshaling);
 
 void unmarshal_VkImageSparseMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSparseMemoryRequirementsInfo2* forUnmarshaling);
 
 void marshal_VkMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements2* forMarshaling);
 
 void unmarshal_VkMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryRequirements2* forUnmarshaling);
 
 void marshal_VkSparseImageMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* forMarshaling);
 
 void unmarshal_VkSparseImageMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageMemoryRequirements2* forUnmarshaling);
 
 #define OP_vkGetImageMemoryRequirements2 20144
@@ -1227,74 +1485,92 @@
 #define OP_vkGetImageSparseMemoryRequirements2 20146
 void marshal_VkPhysicalDeviceFeatures2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFeatures2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFeatures2* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProperties2* forUnmarshaling);
 
 void marshal_VkFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties2* forMarshaling);
 
 void unmarshal_VkFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFormatProperties2* forUnmarshaling);
 
 void marshal_VkImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties2* forMarshaling);
 
 void unmarshal_VkImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageFormatProperties2* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageFormatInfo2* forUnmarshaling);
 
 void marshal_VkQueueFamilyProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* forMarshaling);
 
 void unmarshal_VkQueueFamilyProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueueFamilyProperties2* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceMemoryProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMemoryProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryProperties2* forUnmarshaling);
 
 void marshal_VkSparseImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* forMarshaling);
 
 void unmarshal_VkSparseImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSparseImageFormatProperties2* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSparseImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSparseImageFormatInfo2* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceFeatures2 20147
@@ -1307,74 +1583,92 @@
 #define OP_vkTrimCommandPool 20154
 void marshal_VkPhysicalDevicePointClippingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePointClippingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePointClippingProperties* forUnmarshaling);
 
 void marshal_VkInputAttachmentAspectReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* forMarshaling);
 
 void unmarshal_VkInputAttachmentAspectReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkInputAttachmentAspectReference* forUnmarshaling);
 
 void marshal_VkRenderPassInputAttachmentAspectCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* forMarshaling);
 
 void unmarshal_VkRenderPassInputAttachmentAspectCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassInputAttachmentAspectCreateInfo* forUnmarshaling);
 
 void marshal_VkImageViewUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* forMarshaling);
 
 void unmarshal_VkImageViewUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewUsageCreateInfo* forUnmarshaling);
 
 void marshal_VkPipelineTessellationDomainOriginStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* forMarshaling);
 
 void unmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineTessellationDomainOriginStateCreateInfo* forUnmarshaling);
 
 void marshal_VkRenderPassMultiviewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* forMarshaling);
 
 void unmarshal_VkRenderPassMultiviewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassMultiviewCreateInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceMultiviewFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMultiviewFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMultiviewFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceMultiviewProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMultiviewProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMultiviewProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceVariablePointersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVariablePointersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVariablePointersFeatures* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkPhysicalDeviceVariablePointersFeatures, marshal_VkPhysicalDeviceVariablePointerFeatures);
@@ -1383,101 +1677,125 @@
 
 void marshal_VkPhysicalDeviceProtectedMemoryFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceProtectedMemoryFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProtectedMemoryFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceProtectedMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceProtectedMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceProtectedMemoryProperties* forUnmarshaling);
 
 void marshal_VkDeviceQueueInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* forMarshaling);
 
 void unmarshal_VkDeviceQueueInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceQueueInfo2* forUnmarshaling);
 
 void marshal_VkProtectedSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* forMarshaling);
 
 void unmarshal_VkProtectedSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkProtectedSubmitInfo* forUnmarshaling);
 
 #define OP_vkGetDeviceQueue2 20155
 void marshal_VkSamplerYcbcrConversionCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* forMarshaling);
 
 void unmarshal_VkSamplerYcbcrConversionCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerYcbcrConversionCreateInfo* forUnmarshaling);
 
 void marshal_VkSamplerYcbcrConversionInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* forMarshaling);
 
 void unmarshal_VkSamplerYcbcrConversionInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerYcbcrConversionInfo* forUnmarshaling);
 
 void marshal_VkBindImagePlaneMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* forMarshaling);
 
 void unmarshal_VkBindImagePlaneMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImagePlaneMemoryInfo* forUnmarshaling);
 
 void marshal_VkImagePlaneMemoryRequirementsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* forMarshaling);
 
 void unmarshal_VkImagePlaneMemoryRequirementsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImagePlaneMemoryRequirementsInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSamplerYcbcrConversionFeatures* forUnmarshaling);
 
 void marshal_VkSamplerYcbcrConversionImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* forMarshaling);
 
 void unmarshal_VkSamplerYcbcrConversionImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerYcbcrConversionImageFormatProperties* forUnmarshaling);
 
 #define OP_vkCreateSamplerYcbcrConversion 20156
 #define OP_vkDestroySamplerYcbcrConversion 20157
 void marshal_VkDescriptorUpdateTemplateEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* forMarshaling);
 
 void unmarshal_VkDescriptorUpdateTemplateEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorUpdateTemplateEntry* forUnmarshaling);
 
 void marshal_VkDescriptorUpdateTemplateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* forMarshaling);
 
 void unmarshal_VkDescriptorUpdateTemplateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorUpdateTemplateCreateInfo* forUnmarshaling);
 
 #define OP_vkCreateDescriptorUpdateTemplate 20158
@@ -1485,150 +1803,186 @@
 #define OP_vkUpdateDescriptorSetWithTemplate 20160
 void marshal_VkExternalMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* forMarshaling);
 
 void unmarshal_VkExternalMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceExternalImageFormatInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExternalImageFormatInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalImageFormatInfo* forUnmarshaling);
 
 void marshal_VkExternalImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* forMarshaling);
 
 void unmarshal_VkExternalImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalImageFormatProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceExternalBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExternalBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalBufferInfo* forUnmarshaling);
 
 void marshal_VkExternalBufferProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalBufferProperties* forMarshaling);
 
 void unmarshal_VkExternalBufferProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalBufferProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceIDProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceIDProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceIDProperties* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceExternalBufferProperties 20161
 void marshal_VkExternalMemoryImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* forMarshaling);
 
 void unmarshal_VkExternalMemoryImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryImageCreateInfo* forUnmarshaling);
 
 void marshal_VkExternalMemoryBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* forMarshaling);
 
 void unmarshal_VkExternalMemoryBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryBufferCreateInfo* forUnmarshaling);
 
 void marshal_VkExportMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* forMarshaling);
 
 void unmarshal_VkExportMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryAllocateInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceExternalFenceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExternalFenceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalFenceInfo* forUnmarshaling);
 
 void marshal_VkExternalFenceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFenceProperties* forMarshaling);
 
 void unmarshal_VkExternalFenceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalFenceProperties* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceExternalFenceProperties 20162
 void marshal_VkExportFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* forMarshaling);
 
 void unmarshal_VkExportFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportFenceCreateInfo* forUnmarshaling);
 
 void marshal_VkExportSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* forMarshaling);
 
 void unmarshal_VkExportSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportSemaphoreCreateInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceExternalSemaphoreInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalSemaphoreInfo* forUnmarshaling);
 
 void marshal_VkExternalSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* forMarshaling);
 
 void unmarshal_VkExternalSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalSemaphoreProperties* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceExternalSemaphoreProperties 20163
 void marshal_VkPhysicalDeviceMaintenance3Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMaintenance3Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMaintenance3Properties* forUnmarshaling);
 
 void marshal_VkDescriptorSetLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* forMarshaling);
 
 void unmarshal_VkDescriptorSetLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutSupport* forUnmarshaling);
 
 #define OP_vkGetDescriptorSetLayoutSupport 20164
 void marshal_VkPhysicalDeviceShaderDrawParametersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderDrawParametersFeatures* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkPhysicalDeviceShaderDrawParametersFeatures, marshal_VkPhysicalDeviceShaderDrawParameterFeatures);
@@ -1639,108 +1993,134 @@
 #ifdef VK_VERSION_1_2
 void marshal_VkPhysicalDeviceVulkan11Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVulkan11Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan11Features* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceVulkan11Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVulkan11Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan11Properties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceVulkan12Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVulkan12Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan12Features* forUnmarshaling);
 
 void marshal_VkConformanceVersion(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConformanceVersion* forMarshaling);
 
 void unmarshal_VkConformanceVersion(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkConformanceVersion* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceVulkan12Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVulkan12Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkan12Properties* forUnmarshaling);
 
 void marshal_VkImageFormatListCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* forMarshaling);
 
 void unmarshal_VkImageFormatListCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageFormatListCreateInfo* forUnmarshaling);
 
 #define OP_vkCmdDrawIndirectCount 282774587
 #define OP_vkCmdDrawIndexedIndirectCount 245204359
 void marshal_VkAttachmentDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription2* forMarshaling);
 
 void unmarshal_VkAttachmentDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentDescription2* forUnmarshaling);
 
 void marshal_VkAttachmentReference2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference2* forMarshaling);
 
 void unmarshal_VkAttachmentReference2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentReference2* forUnmarshaling);
 
 void marshal_VkSubpassDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription2* forMarshaling);
 
 void unmarshal_VkSubpassDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDescription2* forUnmarshaling);
 
 void marshal_VkSubpassDependency2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency2* forMarshaling);
 
 void unmarshal_VkSubpassDependency2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDependency2* forUnmarshaling);
 
 void marshal_VkRenderPassCreateInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* forMarshaling);
 
 void unmarshal_VkRenderPassCreateInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassCreateInfo2* forUnmarshaling);
 
 void marshal_VkSubpassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* forMarshaling);
 
 void unmarshal_VkSubpassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassBeginInfo* forUnmarshaling);
 
 void marshal_VkSubpassEndInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassEndInfo* forMarshaling);
 
 void unmarshal_VkSubpassEndInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassEndInfo* forUnmarshaling);
 
 #define OP_vkCreateRenderPass2 279590827
@@ -1749,267 +2129,333 @@
 #define OP_vkCmdEndRenderPass2 221297834
 void marshal_VkPhysicalDevice8BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDevice8BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevice8BitStorageFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceDriverProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDriverProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDriverProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceShaderAtomicInt64Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderAtomicInt64Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderAtomicInt64Features* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceShaderFloat16Int8Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderFloat16Int8Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderFloat16Int8Features* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFloatControlsProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFloatControlsProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFloatControlsProperties* forUnmarshaling);
 
 void marshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* forMarshaling);
 
 void unmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetLayoutBindingFlagsCreateInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceDescriptorIndexingFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDescriptorIndexingFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceDescriptorIndexingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDescriptorIndexingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDescriptorIndexingProperties* forUnmarshaling);
 
 void marshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* forMarshaling);
 
 void unmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetVariableDescriptorCountAllocateInfo* forUnmarshaling);
 
 void marshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* forMarshaling);
 
 void unmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorSetVariableDescriptorCountLayoutSupport* forUnmarshaling);
 
 void marshal_VkSubpassDescriptionDepthStencilResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* forMarshaling);
 
 void unmarshal_VkSubpassDescriptionDepthStencilResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassDescriptionDepthStencilResolve* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceDepthStencilResolveProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDepthStencilResolveProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDepthStencilResolveProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceScalarBlockLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceScalarBlockLayoutFeatures* forUnmarshaling);
 
 void marshal_VkImageStencilUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* forMarshaling);
 
 void unmarshal_VkImageStencilUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageStencilUsageCreateInfo* forUnmarshaling);
 
 void marshal_VkSamplerReductionModeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* forMarshaling);
 
 void unmarshal_VkSamplerReductionModeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerReductionModeCreateInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSamplerFilterMinmaxProperties* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceVulkanMemoryModelFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVulkanMemoryModelFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceImagelessFramebufferFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImagelessFramebufferFeatures* forUnmarshaling);
 
 void marshal_VkFramebufferAttachmentImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* forMarshaling);
 
 void unmarshal_VkFramebufferAttachmentImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferAttachmentImageInfo* forUnmarshaling);
 
 void marshal_VkFramebufferAttachmentsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* forMarshaling);
 
 void unmarshal_VkFramebufferAttachmentsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferAttachmentsCreateInfo* forUnmarshaling);
 
 void marshal_VkRenderPassAttachmentBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* forMarshaling);
 
 void unmarshal_VkRenderPassAttachmentBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassAttachmentBeginInfo* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceUniformBufferStandardLayoutFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* forUnmarshaling);
 
 void marshal_VkAttachmentReferenceStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* forMarshaling);
 
 void unmarshal_VkAttachmentReferenceStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentReferenceStencilLayout* forUnmarshaling);
 
 void marshal_VkAttachmentDescriptionStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* forMarshaling);
 
 void unmarshal_VkAttachmentDescriptionStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentDescriptionStencilLayout* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceHostQueryResetFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceHostQueryResetFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceHostQueryResetFeatures* forUnmarshaling);
 
 #define OP_vkResetQueryPool 252097672
 void marshal_VkPhysicalDeviceTimelineSemaphoreFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTimelineSemaphoreFeatures* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceTimelineSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTimelineSemaphoreProperties* forUnmarshaling);
 
 void marshal_VkSemaphoreTypeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* forMarshaling);
 
 void unmarshal_VkSemaphoreTypeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreTypeCreateInfo* forUnmarshaling);
 
 void marshal_VkTimelineSemaphoreSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* forMarshaling);
 
 void unmarshal_VkTimelineSemaphoreSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTimelineSemaphoreSubmitInfo* forUnmarshaling);
 
 void marshal_VkSemaphoreWaitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* forMarshaling);
 
 void unmarshal_VkSemaphoreWaitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreWaitInfo* forUnmarshaling);
 
 void marshal_VkSemaphoreSignalInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* forMarshaling);
 
 void unmarshal_VkSemaphoreSignalInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreSignalInfo* forUnmarshaling);
 
 #define OP_vkGetSemaphoreCounterValue 267066974
@@ -2017,42 +2463,52 @@
 #define OP_vkSignalSemaphore 271024127
 void marshal_VkPhysicalDeviceBufferDeviceAddressFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBufferDeviceAddressFeatures* forUnmarshaling);
 
 void marshal_VkBufferDeviceAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* forMarshaling);
 
 void unmarshal_VkBufferDeviceAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferDeviceAddressInfo* forUnmarshaling);
 
 void marshal_VkBufferOpaqueCaptureAddressCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* forMarshaling);
 
 void unmarshal_VkBufferOpaqueCaptureAddressCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferOpaqueCaptureAddressCreateInfo* forUnmarshaling);
 
 void marshal_VkMemoryOpaqueCaptureAddressAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* forMarshaling);
 
 void unmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryOpaqueCaptureAddressAllocateInfo* forUnmarshaling);
 
 void marshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* forMarshaling);
 
 void unmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceMemoryOpaqueCaptureAddressInfo* forUnmarshaling);
 
 #define OP_vkGetBufferDeviceAddress 222632266
@@ -2062,18 +2518,22 @@
 #ifdef VK_KHR_surface
 void marshal_VkSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* forMarshaling);
 
 void unmarshal_VkSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilitiesKHR* forUnmarshaling);
 
 void marshal_VkSurfaceFormatKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* forMarshaling);
 
 void unmarshal_VkSurfaceFormatKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFormatKHR* forUnmarshaling);
 
 #define OP_vkDestroySurfaceKHR 20165
@@ -2085,18 +2545,22 @@
 #ifdef VK_KHR_swapchain
 void marshal_VkSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSwapchainCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentInfoKHR* forMarshaling);
 
 void unmarshal_VkPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateSwapchainKHR 20170
@@ -2106,50 +2570,62 @@
 #define OP_vkQueuePresentKHR 20174
 void marshal_VkImageSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkImageSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageSwapchainCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkBindImageMemorySwapchainInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* forMarshaling);
 
 void unmarshal_VkBindImageMemorySwapchainInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindImageMemorySwapchainInfoKHR* forUnmarshaling);
 
 void marshal_VkAcquireNextImageInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* forMarshaling);
 
 void unmarshal_VkAcquireNextImageInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAcquireNextImageInfoKHR* forUnmarshaling);
 
 void marshal_VkDeviceGroupPresentCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* forMarshaling);
 
 void unmarshal_VkDeviceGroupPresentCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupPresentCapabilitiesKHR* forUnmarshaling);
 
 void marshal_VkDeviceGroupPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* forMarshaling);
 
 void unmarshal_VkDeviceGroupPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupPresentInfoKHR* forUnmarshaling);
 
 void marshal_VkDeviceGroupSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkDeviceGroupSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceGroupSwapchainCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkGetDeviceGroupPresentCapabilitiesKHR 20175
@@ -2160,58 +2636,72 @@
 #ifdef VK_KHR_display
 void marshal_VkDisplayModeParametersKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* forMarshaling);
 
 void unmarshal_VkDisplayModeParametersKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModeParametersKHR* forUnmarshaling);
 
 void marshal_VkDisplayModeCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkDisplayModeCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModeCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkDisplayModePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* forMarshaling);
 
 void unmarshal_VkDisplayModePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModePropertiesKHR* forUnmarshaling);
 
 void marshal_VkDisplayPlaneCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* forMarshaling);
 
 void unmarshal_VkDisplayPlaneCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneCapabilitiesKHR* forUnmarshaling);
 
 void marshal_VkDisplayPlanePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* forMarshaling);
 
 void unmarshal_VkDisplayPlanePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlanePropertiesKHR* forUnmarshaling);
 
 void marshal_VkDisplayPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* forMarshaling);
 
 void unmarshal_VkDisplayPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPropertiesKHR* forUnmarshaling);
 
 void marshal_VkDisplaySurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkDisplaySurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplaySurfaceCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceDisplayPropertiesKHR 20179
@@ -2225,10 +2715,12 @@
 #ifdef VK_KHR_display_swapchain
 void marshal_VkDisplayPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* forMarshaling);
 
 void unmarshal_VkDisplayPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPresentInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateSharedSwapchainsKHR 20186
@@ -2236,10 +2728,12 @@
 #ifdef VK_KHR_xlib_surface
 void marshal_VkXlibSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkXlibSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkXlibSurfaceCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateXlibSurfaceKHR 20187
@@ -2248,10 +2742,12 @@
 #ifdef VK_KHR_xcb_surface
 void marshal_VkXcbSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkXcbSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkXcbSurfaceCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateXcbSurfaceKHR 20189
@@ -2260,10 +2756,12 @@
 #ifdef VK_KHR_wayland_surface
 void marshal_VkWaylandSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkWaylandSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWaylandSurfaceCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateWaylandSurfaceKHR 20191
@@ -2272,10 +2770,12 @@
 #ifdef VK_KHR_android_surface
 void marshal_VkAndroidSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkAndroidSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidSurfaceCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateAndroidSurfaceKHR 20195
@@ -2283,10 +2783,12 @@
 #ifdef VK_KHR_win32_surface
 void marshal_VkWin32SurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkWin32SurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWin32SurfaceCreateInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateWin32SurfaceKHR 20196
@@ -2446,34 +2948,42 @@
 #ifdef VK_KHR_external_memory_win32
 void marshal_VkImportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkImportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryWin32HandleInfoKHR* forUnmarshaling);
 
 void marshal_VkExportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkExportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryWin32HandleInfoKHR* forUnmarshaling);
 
 void marshal_VkMemoryWin32HandlePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* forMarshaling);
 
 void unmarshal_VkMemoryWin32HandlePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryWin32HandlePropertiesKHR* forUnmarshaling);
 
 void marshal_VkMemoryGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkMemoryGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryGetWin32HandleInfoKHR* forUnmarshaling);
 
 #define OP_vkGetMemoryWin32HandleKHR 20211
@@ -2482,26 +2992,32 @@
 #ifdef VK_KHR_external_memory_fd
 void marshal_VkImportMemoryFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* forMarshaling);
 
 void unmarshal_VkImportMemoryFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryFdInfoKHR* forUnmarshaling);
 
 void marshal_VkMemoryFdPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* forMarshaling);
 
 void unmarshal_VkMemoryFdPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryFdPropertiesKHR* forUnmarshaling);
 
 void marshal_VkMemoryGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* forMarshaling);
 
 void unmarshal_VkMemoryGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryGetFdInfoKHR* forUnmarshaling);
 
 #define OP_vkGetMemoryFdKHR 20213
@@ -2510,10 +3026,12 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void marshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* forMarshaling);
 
 void unmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWin32KeyedMutexAcquireReleaseInfoKHR* forUnmarshaling);
 
 #endif
@@ -2537,34 +3055,42 @@
 #ifdef VK_KHR_external_semaphore_win32
 void marshal_VkImportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkImportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportSemaphoreWin32HandleInfoKHR* forUnmarshaling);
 
 void marshal_VkExportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkExportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportSemaphoreWin32HandleInfoKHR* forUnmarshaling);
 
 void marshal_VkD3D12FenceSubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* forMarshaling);
 
 void unmarshal_VkD3D12FenceSubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkD3D12FenceSubmitInfoKHR* forUnmarshaling);
 
 void marshal_VkSemaphoreGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkSemaphoreGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreGetWin32HandleInfoKHR* forUnmarshaling);
 
 #define OP_vkImportSemaphoreWin32HandleKHR 20216
@@ -2573,18 +3099,22 @@
 #ifdef VK_KHR_external_semaphore_fd
 void marshal_VkImportSemaphoreFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* forMarshaling);
 
 void unmarshal_VkImportSemaphoreFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportSemaphoreFdInfoKHR* forUnmarshaling);
 
 void marshal_VkSemaphoreGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* forMarshaling);
 
 void unmarshal_VkSemaphoreGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSemaphoreGetFdInfoKHR* forUnmarshaling);
 
 #define OP_vkImportSemaphoreFdKHR 20218
@@ -2593,10 +3123,12 @@
 #ifdef VK_KHR_push_descriptor
 void marshal_VkPhysicalDevicePushDescriptorPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePushDescriptorPropertiesKHR* forUnmarshaling);
 
 #define OP_vkCmdPushDescriptorSetKHR 20220
@@ -2621,26 +3153,32 @@
 #ifdef VK_KHR_incremental_present
 void marshal_VkRectLayerKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRectLayerKHR* forMarshaling);
 
 void unmarshal_VkRectLayerKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRectLayerKHR* forUnmarshaling);
 
 void marshal_VkPresentRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionKHR* forMarshaling);
 
 void unmarshal_VkPresentRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentRegionKHR* forUnmarshaling);
 
 void marshal_VkPresentRegionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* forMarshaling);
 
 void unmarshal_VkPresentRegionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentRegionsKHR* forUnmarshaling);
 
 #endif
@@ -2712,10 +3250,12 @@
 #ifdef VK_KHR_shared_presentable_image
 void marshal_VkSharedPresentSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* forMarshaling);
 
 void unmarshal_VkSharedPresentSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSharedPresentSurfaceCapabilitiesKHR* forUnmarshaling);
 
 #define OP_vkGetSwapchainStatusKHR 20229
@@ -2740,26 +3280,32 @@
 #ifdef VK_KHR_external_fence_win32
 void marshal_VkImportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkImportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportFenceWin32HandleInfoKHR* forUnmarshaling);
 
 void marshal_VkExportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkExportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportFenceWin32HandleInfoKHR* forUnmarshaling);
 
 void marshal_VkFenceGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* forMarshaling);
 
 void unmarshal_VkFenceGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFenceGetWin32HandleInfoKHR* forUnmarshaling);
 
 #define OP_vkImportFenceWin32HandleKHR 20231
@@ -2768,18 +3314,22 @@
 #ifdef VK_KHR_external_fence_fd
 void marshal_VkImportFenceFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* forMarshaling);
 
 void unmarshal_VkImportFenceFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportFenceFdInfoKHR* forUnmarshaling);
 
 void marshal_VkFenceGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* forMarshaling);
 
 void unmarshal_VkFenceGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFenceGetFdInfoKHR* forUnmarshaling);
 
 #define OP_vkImportFenceFdKHR 20233
@@ -2788,66 +3338,82 @@
 #ifdef VK_KHR_performance_query
 void marshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePerformanceQueryFeaturesKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePerformanceQueryPropertiesKHR* forUnmarshaling);
 
 void marshal_VkPerformanceCounterKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* forMarshaling);
 
 void unmarshal_VkPerformanceCounterKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceCounterKHR* forUnmarshaling);
 
 void marshal_VkPerformanceCounterDescriptionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* forMarshaling);
 
 void unmarshal_VkPerformanceCounterDescriptionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceCounterDescriptionKHR* forUnmarshaling);
 
 void marshal_VkQueryPoolPerformanceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkQueryPoolPerformanceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueryPoolPerformanceCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkPerformanceCounterResultKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* forMarshaling);
 
 void unmarshal_VkPerformanceCounterResultKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceCounterResultKHR* forUnmarshaling);
 
 void marshal_VkAcquireProfilingLockInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* forMarshaling);
 
 void unmarshal_VkAcquireProfilingLockInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAcquireProfilingLockInfoKHR* forUnmarshaling);
 
 void marshal_VkPerformanceQuerySubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* forMarshaling);
 
 void unmarshal_VkPerformanceQuerySubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceQuerySubmitInfoKHR* forUnmarshaling);
 
 #define OP_vkEnumeratePhysicalDeviceQueueFamilyPerformanceQueryCountersKHR 299033148
@@ -2880,26 +3446,32 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void marshal_VkPhysicalDeviceSurfaceInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSurfaceInfo2KHR* forUnmarshaling);
 
 void marshal_VkSurfaceCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* forMarshaling);
 
 void unmarshal_VkSurfaceCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilities2KHR* forUnmarshaling);
 
 void marshal_VkSurfaceFormat2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* forMarshaling);
 
 void unmarshal_VkSurfaceFormat2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFormat2KHR* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceSurfaceCapabilities2KHR 20235
@@ -2918,42 +3490,52 @@
 #ifdef VK_KHR_get_display_properties2
 void marshal_VkDisplayProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* forMarshaling);
 
 void unmarshal_VkDisplayProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayProperties2KHR* forUnmarshaling);
 
 void marshal_VkDisplayPlaneProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* forMarshaling);
 
 void unmarshal_VkDisplayPlaneProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneProperties2KHR* forUnmarshaling);
 
 void marshal_VkDisplayModeProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* forMarshaling);
 
 void unmarshal_VkDisplayModeProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayModeProperties2KHR* forUnmarshaling);
 
 void marshal_VkDisplayPlaneInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* forMarshaling);
 
 void unmarshal_VkDisplayPlaneInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneInfo2KHR* forUnmarshaling);
 
 void marshal_VkDisplayPlaneCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* forMarshaling);
 
 void unmarshal_VkDisplayPlaneCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPlaneCapabilities2KHR* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceDisplayProperties2KHR 20237
@@ -3049,18 +3631,22 @@
 #ifdef VK_KHR_portability_subset
 void marshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePortabilitySubsetFeaturesKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePortabilitySubsetPropertiesKHR* forUnmarshaling);
 
 #endif
@@ -3100,10 +3686,12 @@
 #ifdef VK_KHR_shader_clock
 void marshal_VkPhysicalDeviceShaderClockFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderClockFeaturesKHR* forUnmarshaling);
 
 #endif
@@ -3173,52 +3761,64 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void marshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* forUnmarshaling);
 
 #endif
 #ifdef VK_KHR_fragment_shading_rate
 void marshal_VkFragmentShadingRateAttachmentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* forMarshaling);
 
 void unmarshal_VkFragmentShadingRateAttachmentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFragmentShadingRateAttachmentInfoKHR* forUnmarshaling);
 
 void marshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineFragmentShadingRateStateCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateFeaturesKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRatePropertiesKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFragmentShadingRateKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateKHR* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceFragmentShadingRatesKHR 272978593
@@ -3229,10 +3829,12 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void marshal_VkSurfaceProtectedCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* forMarshaling);
 
 void unmarshal_VkSurfaceProtectedCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceProtectedCapabilitiesKHR* forUnmarshaling);
 
 #endif
@@ -3291,58 +3893,72 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void marshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* forUnmarshaling);
 
 void marshal_VkPipelineInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* forMarshaling);
 
 void unmarshal_VkPipelineInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineInfoKHR* forUnmarshaling);
 
 void marshal_VkPipelineExecutablePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* forMarshaling);
 
 void unmarshal_VkPipelineExecutablePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutablePropertiesKHR* forUnmarshaling);
 
 void marshal_VkPipelineExecutableInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* forMarshaling);
 
 void unmarshal_VkPipelineExecutableInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableInfoKHR* forUnmarshaling);
 
 void marshal_VkPipelineExecutableStatisticValueKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* forMarshaling);
 
 void unmarshal_VkPipelineExecutableStatisticValueKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableStatisticValueKHR* forUnmarshaling);
 
 void marshal_VkPipelineExecutableStatisticKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* forMarshaling);
 
 void unmarshal_VkPipelineExecutableStatisticKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableStatisticKHR* forUnmarshaling);
 
 void marshal_VkPipelineExecutableInternalRepresentationKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* forMarshaling);
 
 void unmarshal_VkPipelineExecutableInternalRepresentationKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineExecutableInternalRepresentationKHR* forUnmarshaling);
 
 #define OP_vkGetPipelineExecutablePropertiesKHR 269458798
@@ -3352,10 +3968,12 @@
 #ifdef VK_KHR_pipeline_library
 void marshal_VkPipelineLibraryCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkPipelineLibraryCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineLibraryCreateInfoKHR* forUnmarshaling);
 
 #endif
@@ -3364,90 +3982,112 @@
 #ifdef VK_KHR_copy_commands2
 void marshal_VkBufferCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* forMarshaling);
 
 void unmarshal_VkBufferCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferCopy2KHR* forUnmarshaling);
 
 void marshal_VkCopyBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* forMarshaling);
 
 void unmarshal_VkCopyBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyBufferInfo2KHR* forUnmarshaling);
 
 void marshal_VkImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy2KHR* forMarshaling);
 
 void unmarshal_VkImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageCopy2KHR* forUnmarshaling);
 
 void marshal_VkCopyImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* forMarshaling);
 
 void unmarshal_VkCopyImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyImageInfo2KHR* forUnmarshaling);
 
 void marshal_VkBufferImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* forMarshaling);
 
 void unmarshal_VkBufferImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferImageCopy2KHR* forUnmarshaling);
 
 void marshal_VkCopyBufferToImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* forMarshaling);
 
 void unmarshal_VkCopyBufferToImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyBufferToImageInfo2KHR* forUnmarshaling);
 
 void marshal_VkCopyImageToBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* forMarshaling);
 
 void unmarshal_VkCopyImageToBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyImageToBufferInfo2KHR* forUnmarshaling);
 
 void marshal_VkImageBlit2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit2KHR* forMarshaling);
 
 void unmarshal_VkImageBlit2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageBlit2KHR* forUnmarshaling);
 
 void marshal_VkBlitImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* forMarshaling);
 
 void unmarshal_VkBlitImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBlitImageInfo2KHR* forUnmarshaling);
 
 void marshal_VkImageResolve2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve2KHR* forMarshaling);
 
 void unmarshal_VkImageResolve2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageResolve2KHR* forUnmarshaling);
 
 void marshal_VkResolveImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* forMarshaling);
 
 void unmarshal_VkResolveImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkResolveImageInfo2KHR* forUnmarshaling);
 
 #define OP_vkCmdCopyBuffer2KHR 247893766
@@ -3460,10 +4100,12 @@
 #ifdef VK_ANDROID_native_buffer
 void marshal_VkNativeBufferANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* forMarshaling);
 
 void unmarshal_VkNativeBufferANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkNativeBufferANDROID* forUnmarshaling);
 
 #define OP_vkGetSwapchainGrallocUsageANDROID 20251
@@ -3473,10 +4115,12 @@
 #ifdef VK_EXT_debug_report
 void marshal_VkDebugReportCallbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugReportCallbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugReportCallbackCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCreateDebugReportCallbackEXT 20254
@@ -3492,10 +4136,12 @@
 #ifdef VK_AMD_rasterization_order
 void marshal_VkPipelineRasterizationStateRasterizationOrderAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* forMarshaling);
 
 void unmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationStateRasterizationOrderAMD* forUnmarshaling);
 
 #endif
@@ -3506,26 +4152,32 @@
 #ifdef VK_EXT_debug_marker
 void marshal_VkDebugMarkerObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugMarkerObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugMarkerObjectNameInfoEXT* forUnmarshaling);
 
 void marshal_VkDebugMarkerObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugMarkerObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugMarkerObjectTagInfoEXT* forUnmarshaling);
 
 void marshal_VkDebugMarkerMarkerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugMarkerMarkerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugMarkerMarkerInfoEXT* forUnmarshaling);
 
 #define OP_vkDebugMarkerSetObjectTagEXT 20257
@@ -3539,52 +4191,64 @@
 #ifdef VK_NV_dedicated_allocation
 void marshal_VkDedicatedAllocationImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* forMarshaling);
 
 void unmarshal_VkDedicatedAllocationImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDedicatedAllocationImageCreateInfoNV* forUnmarshaling);
 
 void marshal_VkDedicatedAllocationBufferCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* forMarshaling);
 
 void unmarshal_VkDedicatedAllocationBufferCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDedicatedAllocationBufferCreateInfoNV* forUnmarshaling);
 
 void marshal_VkDedicatedAllocationMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* forMarshaling);
 
 void unmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDedicatedAllocationMemoryAllocateInfoNV* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_transform_feedback
 void marshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTransformFeedbackFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTransformFeedbackPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPipelineRasterizationStateStreamCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationStateStreamCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCmdBindTransformFeedbackBuffersEXT 267779978
@@ -3597,18 +4261,22 @@
 #ifdef VK_NVX_image_view_handle
 void marshal_VkImageViewHandleInfoNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* forMarshaling);
 
 void unmarshal_VkImageViewHandleInfoNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewHandleInfoNVX* forUnmarshaling);
 
 void marshal_VkImageViewAddressPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* forMarshaling);
 
 void unmarshal_VkImageViewAddressPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewAddressPropertiesNVX* forUnmarshaling);
 
 #define OP_vkGetImageViewHandleNVX 204379647
@@ -3627,28 +4295,34 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void marshal_VkTextureLODGatherFormatPropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* forMarshaling);
 
 void unmarshal_VkTextureLODGatherFormatPropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTextureLODGatherFormatPropertiesAMD* forUnmarshaling);
 
 #endif
 #ifdef VK_AMD_shader_info
 void marshal_VkShaderResourceUsageAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* forMarshaling);
 
 void unmarshal_VkShaderResourceUsageAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderResourceUsageAMD* forUnmarshaling);
 
 void marshal_VkShaderStatisticsInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* forMarshaling);
 
 void unmarshal_VkShaderStatisticsInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderStatisticsInfoAMD* forUnmarshaling);
 
 #define OP_vkGetShaderInfoAMD 20264
@@ -3658,10 +4332,12 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void marshal_VkStreamDescriptorSurfaceCreateInfoGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* forMarshaling);
 
 void unmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkStreamDescriptorSurfaceCreateInfoGGP* forUnmarshaling);
 
 #define OP_vkCreateStreamDescriptorSurfaceGGP 241902685
@@ -3669,10 +4345,12 @@
 #ifdef VK_NV_corner_sampled_image
 void marshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCornerSampledImageFeaturesNV* forUnmarshaling);
 
 #endif
@@ -3681,10 +4359,12 @@
 #ifdef VK_NV_external_memory_capabilities
 void marshal_VkExternalImageFormatPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* forMarshaling);
 
 void unmarshal_VkExternalImageFormatPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalImageFormatPropertiesNV* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceExternalImageFormatPropertiesNV 20265
@@ -3692,36 +4372,44 @@
 #ifdef VK_NV_external_memory
 void marshal_VkExternalMemoryImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* forMarshaling);
 
 void unmarshal_VkExternalMemoryImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalMemoryImageCreateInfoNV* forUnmarshaling);
 
 void marshal_VkExportMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* forMarshaling);
 
 void unmarshal_VkExportMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryAllocateInfoNV* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_external_memory_win32
 void marshal_VkImportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* forMarshaling);
 
 void unmarshal_VkImportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryWin32HandleInfoNV* forUnmarshaling);
 
 void marshal_VkExportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* forMarshaling);
 
 void unmarshal_VkExportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExportMemoryWin32HandleInfoNV* forUnmarshaling);
 
 #define OP_vkGetMemoryWin32HandleNV 20266
@@ -3729,30 +4417,36 @@
 #ifdef VK_NV_win32_keyed_mutex
 void marshal_VkWin32KeyedMutexAcquireReleaseInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* forMarshaling);
 
 void unmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWin32KeyedMutexAcquireReleaseInfoNV* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_validation_flags
 void marshal_VkValidationFlagsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* forMarshaling);
 
 void unmarshal_VkValidationFlagsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkValidationFlagsEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_NN_vi_surface
 void marshal_VkViSurfaceCreateInfoNN(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* forMarshaling);
 
 void unmarshal_VkViSurfaceCreateInfoNN(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViSurfaceCreateInfoNN* forUnmarshaling);
 
 #define OP_vkCreateViSurfaceNN 20267
@@ -3764,54 +4458,66 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void marshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_astc_decode_mode
 void marshal_VkImageViewASTCDecodeModeEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* forMarshaling);
 
 void unmarshal_VkImageViewASTCDecodeModeEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageViewASTCDecodeModeEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceASTCDecodeFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_conditional_rendering
 void marshal_VkConditionalRenderingBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* forMarshaling);
 
 void unmarshal_VkConditionalRenderingBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkConditionalRenderingBeginInfoEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceConditionalRenderingFeaturesEXT* forUnmarshaling);
 
 void marshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* forMarshaling);
 
 void unmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferInheritanceConditionalRenderingInfoEXT* forUnmarshaling);
 
 #define OP_vkCmdBeginConditionalRenderingEXT 20268
@@ -3820,18 +4526,22 @@
 #ifdef VK_NV_clip_space_w_scaling
 void marshal_VkViewportWScalingNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportWScalingNV* forMarshaling);
 
 void unmarshal_VkViewportWScalingNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViewportWScalingNV* forUnmarshaling);
 
 void marshal_VkPipelineViewportWScalingStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineViewportWScalingStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportWScalingStateCreateInfoNV* forUnmarshaling);
 
 #define OP_vkCmdSetViewportWScalingNV 20279
@@ -3846,10 +4556,12 @@
 #ifdef VK_EXT_display_surface_counter
 void marshal_VkSurfaceCapabilities2EXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* forMarshaling);
 
 void unmarshal_VkSurfaceCapabilities2EXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilities2EXT* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceSurfaceCapabilities2EXT 20283
@@ -3857,34 +4569,42 @@
 #ifdef VK_EXT_display_control
 void marshal_VkDisplayPowerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* forMarshaling);
 
 void unmarshal_VkDisplayPowerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayPowerInfoEXT* forUnmarshaling);
 
 void marshal_VkDeviceEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* forMarshaling);
 
 void unmarshal_VkDeviceEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceEventInfoEXT* forUnmarshaling);
 
 void marshal_VkDisplayEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* forMarshaling);
 
 void unmarshal_VkDisplayEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayEventInfoEXT* forUnmarshaling);
 
 void marshal_VkSwapchainCounterCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkSwapchainCounterCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSwapchainCounterCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkDisplayPowerControlEXT 20284
@@ -3895,34 +4615,42 @@
 #ifdef VK_GOOGLE_display_timing
 void marshal_VkRefreshCycleDurationGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* forMarshaling);
 
 void unmarshal_VkRefreshCycleDurationGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRefreshCycleDurationGOOGLE* forUnmarshaling);
 
 void marshal_VkPastPresentationTimingGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* forMarshaling);
 
 void unmarshal_VkPastPresentationTimingGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPastPresentationTimingGOOGLE* forUnmarshaling);
 
 void marshal_VkPresentTimeGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* forMarshaling);
 
 void unmarshal_VkPresentTimeGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentTimeGOOGLE* forUnmarshaling);
 
 void marshal_VkPresentTimesInfoGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* forMarshaling);
 
 void unmarshal_VkPresentTimesInfoGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentTimesInfoGOOGLE* forUnmarshaling);
 
 #define OP_vkGetRefreshCycleDurationGOOGLE 20288
@@ -3937,46 +4665,56 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void marshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_viewport_swizzle
 void marshal_VkViewportSwizzleNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* forMarshaling);
 
 void unmarshal_VkViewportSwizzleNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkViewportSwizzleNV* forUnmarshaling);
 
 void marshal_VkPipelineViewportSwizzleStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportSwizzleStateCreateInfoNV* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_discard_rectangles
 void marshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDiscardRectanglePropertiesEXT* forUnmarshaling);
 
 void marshal_VkPipelineDiscardRectangleStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineDiscardRectangleStateCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCmdSetDiscardRectangleEXT 20290
@@ -3984,36 +4722,44 @@
 #ifdef VK_EXT_conservative_rasterization
 void marshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationConservativeStateCreateInfoEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_depth_clip_enable
 void marshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDepthClipEnableFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationDepthClipStateCreateInfoEXT* forUnmarshaling);
 
 #endif
@@ -4022,18 +4768,22 @@
 #ifdef VK_EXT_hdr_metadata
 void marshal_VkXYColorEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXYColorEXT* forMarshaling);
 
 void unmarshal_VkXYColorEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkXYColorEXT* forUnmarshaling);
 
 void marshal_VkHdrMetadataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* forMarshaling);
 
 void unmarshal_VkHdrMetadataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkHdrMetadataEXT* forUnmarshaling);
 
 #define OP_vkSetHdrMetadataEXT 20291
@@ -4041,10 +4791,12 @@
 #ifdef VK_MVK_ios_surface
 void marshal_VkIOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* forMarshaling);
 
 void unmarshal_VkIOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIOSSurfaceCreateInfoMVK* forUnmarshaling);
 
 #define OP_vkCreateIOSSurfaceMVK 20292
@@ -4052,10 +4804,12 @@
 #ifdef VK_MVK_macos_surface
 void marshal_VkMacOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* forMarshaling);
 
 void unmarshal_VkMacOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMacOSSurfaceCreateInfoMVK* forUnmarshaling);
 
 #define OP_vkCreateMacOSSurfaceMVK 20293
@@ -4075,42 +4829,52 @@
 #ifdef VK_EXT_debug_utils
 void marshal_VkDebugUtilsLabelEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* forMarshaling);
 
 void unmarshal_VkDebugUtilsLabelEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsLabelEXT* forUnmarshaling);
 
 void marshal_VkDebugUtilsObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugUtilsObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsObjectNameInfoEXT* forUnmarshaling);
 
 void marshal_VkDebugUtilsMessengerCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* forMarshaling);
 
 void unmarshal_VkDebugUtilsMessengerCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsMessengerCallbackDataEXT* forUnmarshaling);
 
 void marshal_VkDebugUtilsMessengerCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugUtilsMessengerCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsMessengerCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkDebugUtilsObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* forMarshaling);
 
 void unmarshal_VkDebugUtilsObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDebugUtilsObjectTagInfoEXT* forUnmarshaling);
 
 #define OP_vkSetDebugUtilsObjectNameEXT 20294
@@ -4128,50 +4892,62 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void marshal_VkAndroidHardwareBufferUsageANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* forMarshaling);
 
 void unmarshal_VkAndroidHardwareBufferUsageANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidHardwareBufferUsageANDROID* forUnmarshaling);
 
 void marshal_VkAndroidHardwareBufferPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* forMarshaling);
 
 void unmarshal_VkAndroidHardwareBufferPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidHardwareBufferPropertiesANDROID* forUnmarshaling);
 
 void marshal_VkAndroidHardwareBufferFormatPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* forMarshaling);
 
 void unmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAndroidHardwareBufferFormatPropertiesANDROID* forUnmarshaling);
 
 void marshal_VkImportAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* forMarshaling);
 
 void unmarshal_VkImportAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportAndroidHardwareBufferInfoANDROID* forUnmarshaling);
 
 void marshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* forMarshaling);
 
 void unmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryGetAndroidHardwareBufferInfoANDROID* forUnmarshaling);
 
 void marshal_VkExternalFormatANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* forMarshaling);
 
 void unmarshal_VkExternalFormatANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkExternalFormatANDROID* forUnmarshaling);
 
 #define OP_vkGetAndroidHardwareBufferPropertiesANDROID 20305
@@ -4196,34 +4972,42 @@
 #ifdef VK_EXT_inline_uniform_block
 void marshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceInlineUniformBlockFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceInlineUniformBlockPropertiesEXT* forUnmarshaling);
 
 void marshal_VkWriteDescriptorSetInlineUniformBlockEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* forMarshaling);
 
 void unmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSetInlineUniformBlockEXT* forUnmarshaling);
 
 void marshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDescriptorPoolInlineUniformBlockCreateInfoEXT* forUnmarshaling);
 
 #endif
@@ -4232,66 +5016,82 @@
 #ifdef VK_EXT_sample_locations
 void marshal_VkSampleLocationEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationEXT* forMarshaling);
 
 void unmarshal_VkSampleLocationEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSampleLocationEXT* forUnmarshaling);
 
 void marshal_VkSampleLocationsInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* forMarshaling);
 
 void unmarshal_VkSampleLocationsInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSampleLocationsInfoEXT* forUnmarshaling);
 
 void marshal_VkAttachmentSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* forMarshaling);
 
 void unmarshal_VkAttachmentSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAttachmentSampleLocationsEXT* forUnmarshaling);
 
 void marshal_VkSubpassSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* forMarshaling);
 
 void unmarshal_VkSubpassSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSubpassSampleLocationsEXT* forUnmarshaling);
 
 void marshal_VkRenderPassSampleLocationsBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* forMarshaling);
 
 void unmarshal_VkRenderPassSampleLocationsBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassSampleLocationsBeginInfoEXT* forUnmarshaling);
 
 void marshal_VkPipelineSampleLocationsStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineSampleLocationsStateCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSampleLocationsPropertiesEXT* forUnmarshaling);
 
 void marshal_VkMultisamplePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* forMarshaling);
 
 void unmarshal_VkMultisamplePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMultisamplePropertiesEXT* forUnmarshaling);
 
 #define OP_vkCmdSetSampleLocationsEXT 20307
@@ -4300,46 +5100,56 @@
 #ifdef VK_EXT_blend_operation_advanced
 void marshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineColorBlendAdvancedStateCreateInfoEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
 void marshal_VkPipelineCoverageToColorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineCoverageToColorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCoverageToColorStateCreateInfoNV* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
 void marshal_VkPipelineCoverageModulationStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineCoverageModulationStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCoverageModulationStateCreateInfoNV* forUnmarshaling);
 
 #endif
@@ -4348,18 +5158,22 @@
 #ifdef VK_NV_shader_sm_builtins
 void marshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* forUnmarshaling);
 
 #endif
@@ -4368,50 +5182,62 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void marshal_VkDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* forMarshaling);
 
 void unmarshal_VkDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrmFormatModifierPropertiesEXT* forUnmarshaling);
 
 void marshal_VkDrmFormatModifierPropertiesListEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* forMarshaling);
 
 void unmarshal_VkDrmFormatModifierPropertiesListEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrmFormatModifierPropertiesListEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageDrmFormatModifierInfoEXT* forUnmarshaling);
 
 void marshal_VkImageDrmFormatModifierListCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkImageDrmFormatModifierListCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageDrmFormatModifierListCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageDrmFormatModifierExplicitCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkImageDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* forMarshaling);
 
 void unmarshal_VkImageDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImageDrmFormatModifierPropertiesEXT* forUnmarshaling);
 
 #define OP_vkGetImageDrmFormatModifierPropertiesEXT 251301237
@@ -4419,18 +5245,22 @@
 #ifdef VK_EXT_validation_cache
 void marshal_VkValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkValidationCacheCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkShaderModuleValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkShaderModuleValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShaderModuleValidationCacheCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCreateValidationCacheEXT 20309
@@ -4465,58 +5295,72 @@
 #ifdef VK_NV_shading_rate_image
 void marshal_VkShadingRatePaletteNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* forMarshaling);
 
 void unmarshal_VkShadingRatePaletteNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkShadingRatePaletteNV* forUnmarshaling);
 
 void marshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportShadingRateImageStateCreateInfoNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceShadingRateImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShadingRateImageFeaturesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceShadingRateImagePropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShadingRateImagePropertiesNV* forUnmarshaling);
 
 void marshal_VkCoarseSampleLocationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* forMarshaling);
 
 void unmarshal_VkCoarseSampleLocationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCoarseSampleLocationNV* forUnmarshaling);
 
 void marshal_VkCoarseSampleOrderCustomNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* forMarshaling);
 
 void unmarshal_VkCoarseSampleOrderCustomNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCoarseSampleOrderCustomNV* forUnmarshaling);
 
 void marshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* forUnmarshaling);
 
 #define OP_vkCmdBindShadingRateImageNV 238618340
@@ -4526,106 +5370,132 @@
 #ifdef VK_NV_ray_tracing
 void marshal_VkRayTracingShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* forMarshaling);
 
 void unmarshal_VkRayTracingShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingShaderGroupCreateInfoNV* forUnmarshaling);
 
 void marshal_VkRayTracingPipelineCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* forMarshaling);
 
 void unmarshal_VkRayTracingPipelineCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingPipelineCreateInfoNV* forUnmarshaling);
 
 void marshal_VkGeometryTrianglesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* forMarshaling);
 
 void unmarshal_VkGeometryTrianglesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryTrianglesNV* forUnmarshaling);
 
 void marshal_VkGeometryAABBNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryAABBNV* forMarshaling);
 
 void unmarshal_VkGeometryAABBNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryAABBNV* forUnmarshaling);
 
 void marshal_VkGeometryDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryDataNV* forMarshaling);
 
 void unmarshal_VkGeometryDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryDataNV* forUnmarshaling);
 
 void marshal_VkGeometryNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryNV* forMarshaling);
 
 void unmarshal_VkGeometryNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeometryNV* forUnmarshaling);
 
 void marshal_VkAccelerationStructureInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* forMarshaling);
 
 void unmarshal_VkAccelerationStructureInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureInfoNV* forUnmarshaling);
 
 void marshal_VkAccelerationStructureCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* forMarshaling);
 
 void unmarshal_VkAccelerationStructureCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureCreateInfoNV* forUnmarshaling);
 
 void marshal_VkBindAccelerationStructureMemoryInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* forMarshaling);
 
 void unmarshal_VkBindAccelerationStructureMemoryInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindAccelerationStructureMemoryInfoNV* forUnmarshaling);
 
 void marshal_VkWriteDescriptorSetAccelerationStructureNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* forMarshaling);
 
 void unmarshal_VkWriteDescriptorSetAccelerationStructureNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSetAccelerationStructureNV* forUnmarshaling);
 
 void marshal_VkAccelerationStructureMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* forMarshaling);
 
 void unmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureMemoryRequirementsInfoNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceRayTracingPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRayTracingPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayTracingPropertiesNV* forUnmarshaling);
 
 void marshal_VkTransformMatrixKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* forMarshaling);
 
 void unmarshal_VkTransformMatrixKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTransformMatrixKHR* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkTransformMatrixKHR, marshal_VkTransformMatrixNV);
@@ -4634,10 +5504,12 @@
 
 void marshal_VkAabbPositionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* forMarshaling);
 
 void unmarshal_VkAabbPositionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAabbPositionsKHR* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkAabbPositionsKHR, marshal_VkAabbPositionsNV);
@@ -4646,10 +5518,12 @@
 
 void marshal_VkAccelerationStructureInstanceKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureInstanceKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureInstanceKHR* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkAccelerationStructureInstanceKHR, marshal_VkAccelerationStructureInstanceNV);
@@ -4673,36 +5547,44 @@
 #ifdef VK_NV_representative_fragment_test
 void marshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* forUnmarshaling);
 
 void marshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRepresentativeFragmentTestStateCreateInfoNV* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_filter_cubic
 void marshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageViewImageFormatInfoEXT* forUnmarshaling);
 
 void marshal_VkFilterCubicImageViewImageFormatPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* forMarshaling);
 
 void unmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFilterCubicImageViewImageFormatPropertiesEXT* forUnmarshaling);
 
 #endif
@@ -4711,36 +5593,44 @@
 #ifdef VK_EXT_global_priority
 void marshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceQueueGlobalPriorityCreateInfoEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_external_memory_host
 void marshal_VkImportMemoryHostPointerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* forMarshaling);
 
 void unmarshal_VkImportMemoryHostPointerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImportMemoryHostPointerInfoEXT* forUnmarshaling);
 
 void marshal_VkMemoryHostPointerPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* forMarshaling);
 
 void unmarshal_VkMemoryHostPointerPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryHostPointerPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* forUnmarshaling);
 
 #define OP_vkGetMemoryHostPointerPropertiesEXT 20313
@@ -4751,20 +5641,24 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void marshal_VkPipelineCompilerControlCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* forMarshaling);
 
 void unmarshal_VkPipelineCompilerControlCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCompilerControlCreateInfoAMD* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_calibrated_timestamps
 void marshal_VkCalibratedTimestampInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* forMarshaling);
 
 void unmarshal_VkCalibratedTimestampInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCalibratedTimestampInfoEXT* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceCalibrateableTimeDomainsEXT 295643221
@@ -4773,82 +5667,100 @@
 #ifdef VK_AMD_shader_core_properties
 void marshal_VkPhysicalDeviceShaderCorePropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderCorePropertiesAMD* forUnmarshaling);
 
 #endif
 #ifdef VK_AMD_memory_overallocation_behavior
 void marshal_VkDeviceMemoryOverallocationCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* forMarshaling);
 
 void unmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceMemoryOverallocationCreateInfoAMD* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
 void marshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* forUnmarshaling);
 
 void marshal_VkVertexInputBindingDivisorDescriptionEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* forMarshaling);
 
 void unmarshal_VkVertexInputBindingDivisorDescriptionEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkVertexInputBindingDivisorDescriptionEXT* forUnmarshaling);
 
 void marshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineVertexInputDivisorStateCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_GGP_frame_token
 void marshal_VkPresentFrameTokenGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* forMarshaling);
 
 void unmarshal_VkPresentFrameTokenGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPresentFrameTokenGGP* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_pipeline_creation_feedback
 void marshal_VkPipelineCreationFeedbackEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* forMarshaling);
 
 void unmarshal_VkPipelineCreationFeedbackEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCreationFeedbackEXT* forUnmarshaling);
 
 void marshal_VkPipelineCreationFeedbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineCreationFeedbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCreationFeedbackCreateInfoEXT* forUnmarshaling);
 
 #endif
@@ -4857,36 +5769,44 @@
 #ifdef VK_NV_compute_shader_derivatives
 void marshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_mesh_shader
 void marshal_VkPhysicalDeviceMeshShaderFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMeshShaderFeaturesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceMeshShaderPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMeshShaderPropertiesNV* forUnmarshaling);
 
 void marshal_VkDrawMeshTasksIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* forMarshaling);
 
 void unmarshal_VkDrawMeshTasksIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDrawMeshTasksIndirectCommandNV* forUnmarshaling);
 
 #define OP_vkCmdDrawMeshTasksNV 207334931
@@ -4896,38 +5816,46 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void marshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_shader_image_footprint
 void marshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderImageFootprintFeaturesNV* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_scissor_exclusive
 void marshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineViewportExclusiveScissorStateCreateInfoNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExclusiveScissorFeaturesNV* forUnmarshaling);
 
 #define OP_vkCmdSetExclusiveScissorNV 225408194
@@ -4935,18 +5863,22 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void marshal_VkQueueFamilyCheckpointPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* forMarshaling);
 
 void unmarshal_VkQueueFamilyCheckpointPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueueFamilyCheckpointPropertiesNV* forUnmarshaling);
 
 void marshal_VkCheckpointDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCheckpointDataNV* forMarshaling);
 
 void unmarshal_VkCheckpointDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCheckpointDataNV* forUnmarshaling);
 
 #define OP_vkCmdSetCheckpointNV 20315
@@ -4955,44 +5887,54 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void marshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* forUnmarshaling);
 
 #endif
 #ifdef VK_INTEL_performance_query
 void marshal_VkPerformanceValueDataINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* forMarshaling);
 
 void unmarshal_VkPerformanceValueDataINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceValueDataINTEL* forUnmarshaling);
 
 void marshal_VkPerformanceValueINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* forMarshaling);
 
 void unmarshal_VkPerformanceValueINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceValueINTEL* forUnmarshaling);
 
 void marshal_VkInitializePerformanceApiInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* forMarshaling);
 
 void unmarshal_VkInitializePerformanceApiInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkInitializePerformanceApiInfoINTEL* forUnmarshaling);
 
 void marshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* forMarshaling);
 
 void unmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkQueryPoolPerformanceQueryCreateInfoINTEL* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkQueryPoolPerformanceQueryCreateInfoINTEL, marshal_VkQueryPoolCreateInfoINTEL);
@@ -5001,34 +5943,42 @@
 
 void marshal_VkPerformanceMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* forMarshaling);
 
 void unmarshal_VkPerformanceMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceMarkerInfoINTEL* forUnmarshaling);
 
 void marshal_VkPerformanceStreamMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* forMarshaling);
 
 void unmarshal_VkPerformanceStreamMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceStreamMarkerInfoINTEL* forUnmarshaling);
 
 void marshal_VkPerformanceOverrideInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* forMarshaling);
 
 void unmarshal_VkPerformanceOverrideInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceOverrideInfoINTEL* forUnmarshaling);
 
 void marshal_VkPerformanceConfigurationAcquireInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* forMarshaling);
 
 void unmarshal_VkPerformanceConfigurationAcquireInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPerformanceConfigurationAcquireInfoINTEL* forUnmarshaling);
 
 #define OP_vkInitializePerformanceApiINTEL 203336121
@@ -5044,28 +5994,34 @@
 #ifdef VK_EXT_pci_bus_info
 void marshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePCIBusInfoPropertiesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_AMD_display_native_hdr
 void marshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* forMarshaling);
 
 void unmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDisplayNativeHdrSurfaceCapabilitiesAMD* forUnmarshaling);
 
 void marshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* forMarshaling);
 
 void unmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSwapchainDisplayNativeHdrCreateInfoAMD* forUnmarshaling);
 
 #define OP_vkSetLocalDimmingAMD 267533472
@@ -5073,10 +6029,12 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void marshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* forMarshaling);
 
 void unmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkImagePipeSurfaceCreateInfoFUCHSIA* forUnmarshaling);
 
 #define OP_vkCreateImagePipeSurfaceFUCHSIA 261626137
@@ -5084,41 +6042,47 @@
 #ifdef VK_EXT_metal_surface
 void marshal_VkMetalSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkMetalSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMetalSurfaceCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCreateMetalSurfaceEXT 254915953
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void marshal_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void marshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportColorBufferGOOGLE* forMarshaling);
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling);
 
-void unmarshal_VkImportColorBufferGOOGLE(
+void unmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanStreamGuest* vkStream,
-    VkImportColorBufferGOOGLE* forUnmarshaling);
+    VkStructureType rootType,
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forUnmarshaling);
 
-void marshal_VkImportBufferGOOGLE(
+void marshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportBufferGOOGLE* forMarshaling);
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling);
 
-void unmarshal_VkImportBufferGOOGLE(
+void unmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanStreamGuest* vkStream,
-    VkImportBufferGOOGLE* forUnmarshaling);
+    VkStructureType rootType,
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forUnmarshaling);
 
-void marshal_VkImportPhysicalAddressGOOGLE(
+void marshal_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportPhysicalAddressGOOGLE* forMarshaling);
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling);
 
-void unmarshal_VkImportPhysicalAddressGOOGLE(
+void unmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanStreamGuest* vkStream,
-    VkImportPhysicalAddressGOOGLE* forUnmarshaling);
+    VkStructureType rootType,
+    VkRenderPassFragmentDensityMapCreateInfoEXT* forUnmarshaling);
 
-#define OP_vkRegisterImageColorBufferGOOGLE 20318
-#define OP_vkRegisterBufferColorBufferGOOGLE 20319
 #endif
 #ifdef VK_EXT_scalar_block_layout
 DEFINE_ALIAS_FUNCTION(marshal_VkPhysicalDeviceScalarBlockLayoutFeatures, marshal_VkPhysicalDeviceScalarBlockLayoutFeaturesEXT);
@@ -5133,104 +6097,126 @@
 #ifdef VK_EXT_subgroup_size_control
 void marshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_AMD_shader_core_properties2
 void marshal_VkPhysicalDeviceShaderCoreProperties2AMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderCoreProperties2AMD* forUnmarshaling);
 
 #endif
 #ifdef VK_AMD_device_coherent_memory
 void marshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCoherentMemoryFeaturesAMD* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_shader_image_atomic_int64
 void marshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_memory_budget
 void marshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryBudgetPropertiesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_memory_priority
 void marshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceMemoryPriorityFeaturesEXT* forUnmarshaling);
 
 void marshal_VkMemoryPriorityAllocateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* forMarshaling);
 
 void unmarshal_VkMemoryPriorityAllocateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkMemoryPriorityAllocateInfoEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void marshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_buffer_device_address
 void marshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* forUnmarshaling);
 
 DEFINE_ALIAS_FUNCTION(marshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT, marshal_VkPhysicalDeviceBufferAddressFeaturesEXT);
@@ -5243,10 +6229,12 @@
 
 void marshal_VkBufferDeviceAddressCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkBufferDeviceAddressCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBufferDeviceAddressCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkGetBufferDeviceAddressEXT 224361693
@@ -5254,10 +6242,12 @@
 #ifdef VK_EXT_tooling_info
 void marshal_VkPhysicalDeviceToolPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceToolPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceToolPropertiesEXT* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceToolPropertiesEXT 282247593
@@ -5271,36 +6261,44 @@
 #ifdef VK_EXT_validation_features
 void marshal_VkValidationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* forMarshaling);
 
 void unmarshal_VkValidationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkValidationFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_cooperative_matrix
 void marshal_VkCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* forMarshaling);
 
 void unmarshal_VkCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCooperativeMatrixPropertiesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCooperativeMatrixFeaturesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCooperativeMatrixPropertiesNV* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceCooperativeMatrixPropertiesNV 287711429
@@ -5308,26 +6306,32 @@
 #ifdef VK_NV_coverage_reduction_mode
 void marshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCoverageReductionModeFeaturesNV* forUnmarshaling);
 
 void marshal_VkPipelineCoverageReductionStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineCoverageReductionStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineCoverageReductionStateCreateInfoNV* forUnmarshaling);
 
 void marshal_VkFramebufferMixedSamplesCombinationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* forMarshaling);
 
 void unmarshal_VkFramebufferMixedSamplesCombinationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkFramebufferMixedSamplesCombinationNV* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceSupportedFramebufferMixedSamplesCombinationsNV 292032159
@@ -5335,38 +6339,46 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void marshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
 void marshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_full_screen_exclusive
 void marshal_VkSurfaceFullScreenExclusiveInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* forMarshaling);
 
 void unmarshal_VkSurfaceFullScreenExclusiveInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFullScreenExclusiveInfoEXT* forUnmarshaling);
 
 void marshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* forMarshaling);
 
 void unmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceCapabilitiesFullScreenExclusiveEXT* forUnmarshaling);
 
 #define OP_vkGetPhysicalDeviceSurfacePresentModes2EXT 268126279
@@ -5374,10 +6386,12 @@
 #define OP_vkReleaseFullScreenExclusiveModeEXT 257629142
 void marshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* forMarshaling);
 
 void unmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSurfaceFullScreenExclusiveWin32InfoEXT* forUnmarshaling);
 
 #define OP_vkGetDeviceGroupSurfacePresentModes2EXT 206369543
@@ -5385,10 +6399,12 @@
 #ifdef VK_EXT_headless_surface
 void marshal_VkHeadlessSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkHeadlessSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkHeadlessSurfaceCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCreateHeadlessSurfaceEXT 298411290
@@ -5396,26 +6412,32 @@
 #ifdef VK_EXT_line_rasterization
 void marshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceLineRasterizationFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceLineRasterizationPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPipelineRasterizationLineStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineRasterizationLineStateCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCmdSetLineStippleEXT 263855692
@@ -5423,10 +6445,12 @@
 #ifdef VK_EXT_shader_atomic_float
 void marshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* forUnmarshaling);
 
 #endif
@@ -5440,20 +6464,24 @@
 #ifdef VK_EXT_index_type_uint8
 void marshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceIndexTypeUint8FeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_extended_dynamic_state
 void marshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forUnmarshaling);
 
 #define OP_vkCmdSetCullModeEXT 266285895
@@ -5472,116 +6500,144 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void marshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_device_generated_commands
 void marshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* forUnmarshaling);
 
 void marshal_VkGraphicsShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* forMarshaling);
 
 void unmarshal_VkGraphicsShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGraphicsShaderGroupCreateInfoNV* forUnmarshaling);
 
 void marshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* forMarshaling);
 
 void unmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGraphicsPipelineShaderGroupsCreateInfoNV* forUnmarshaling);
 
 void marshal_VkBindShaderGroupIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* forMarshaling);
 
 void unmarshal_VkBindShaderGroupIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindShaderGroupIndirectCommandNV* forUnmarshaling);
 
 void marshal_VkBindIndexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* forMarshaling);
 
 void unmarshal_VkBindIndexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindIndexBufferIndirectCommandNV* forUnmarshaling);
 
 void marshal_VkBindVertexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* forMarshaling);
 
 void unmarshal_VkBindVertexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkBindVertexBufferIndirectCommandNV* forUnmarshaling);
 
 void marshal_VkSetStateFlagsIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* forMarshaling);
 
 void unmarshal_VkSetStateFlagsIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSetStateFlagsIndirectCommandNV* forUnmarshaling);
 
 void marshal_VkIndirectCommandsStreamNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* forMarshaling);
 
 void unmarshal_VkIndirectCommandsStreamNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIndirectCommandsStreamNV* forUnmarshaling);
 
 void marshal_VkIndirectCommandsLayoutTokenNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* forMarshaling);
 
 void unmarshal_VkIndirectCommandsLayoutTokenNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIndirectCommandsLayoutTokenNV* forUnmarshaling);
 
 void marshal_VkIndirectCommandsLayoutCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* forMarshaling);
 
 void unmarshal_VkIndirectCommandsLayoutCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkIndirectCommandsLayoutCreateInfoNV* forUnmarshaling);
 
 void marshal_VkGeneratedCommandsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* forMarshaling);
 
 void unmarshal_VkGeneratedCommandsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeneratedCommandsInfoNV* forUnmarshaling);
 
 void marshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* forMarshaling);
 
 void unmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkGeneratedCommandsMemoryRequirementsInfoNV* forUnmarshaling);
 
 #define OP_vkGetGeneratedCommandsMemoryRequirementsNV 249047049
@@ -5594,106 +6650,130 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void marshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_QCOM_render_pass_transform
 void marshal_VkRenderPassTransformBeginInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* forMarshaling);
 
 void unmarshal_VkRenderPassTransformBeginInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRenderPassTransformBeginInfoQCOM* forUnmarshaling);
 
 void marshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* forMarshaling);
 
 void unmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCommandBufferInheritanceRenderPassTransformInfoQCOM* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_device_memory_report
 void marshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* forUnmarshaling);
 
 void marshal_VkDeviceMemoryReportCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* forMarshaling);
 
 void unmarshal_VkDeviceMemoryReportCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceMemoryReportCallbackDataEXT* forUnmarshaling);
 
 void marshal_VkDeviceDeviceMemoryReportCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceDeviceMemoryReportCreateInfoEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_robustness2
 void marshal_VkPhysicalDeviceRobustness2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRobustness2FeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceRobustness2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRobustness2PropertiesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_custom_border_color
 void marshal_VkSamplerCustomBorderColorCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkSamplerCustomBorderColorCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkSamplerCustomBorderColorCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCustomBorderColorPropertiesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceCustomBorderColorFeaturesEXT* forUnmarshaling);
 
 #endif
@@ -5702,26 +6782,32 @@
 #ifdef VK_EXT_private_data
 void marshal_VkPhysicalDevicePrivateDataFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePrivateDataFeaturesEXT* forUnmarshaling);
 
 void marshal_VkDevicePrivateDataCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDevicePrivateDataCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDevicePrivateDataCreateInfoEXT* forUnmarshaling);
 
 void marshal_VkPrivateDataSlotCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkPrivateDataSlotCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPrivateDataSlotCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCreatePrivateDataSlotEXT 236374049
@@ -5732,28 +6818,34 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void marshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_NV_device_diagnostics_config
 void marshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceDiagnosticsConfigFeaturesNV* forUnmarshaling);
 
 void marshal_VkDeviceDiagnosticsConfigCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* forMarshaling);
 
 void unmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceDiagnosticsConfigCreateInfoNV* forUnmarshaling);
 
 #endif
@@ -5762,26 +6854,32 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void marshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* forUnmarshaling);
 
 void marshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* forMarshaling);
 
 void unmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPipelineFragmentShadingRateEnumStateCreateInfoNV* forUnmarshaling);
 
 #define OP_vkCmdSetFragmentShadingRateEnumNV 264649847
@@ -5789,64 +6887,108 @@
 #ifdef VK_EXT_fragment_density_map2
 void marshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
 void marshal_VkCopyCommandTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* forMarshaling);
 
 void unmarshal_VkCopyCommandTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyCommandTransformInfoQCOM* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_image_robustness
 void marshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceImageRobustnessFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_4444_formats
 void marshal_VkPhysicalDevice4444FormatsFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* forMarshaling);
 
 void unmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDevice4444FormatsFeaturesEXT* forUnmarshaling);
 
 #endif
 #ifdef VK_EXT_directfb_surface
 void marshal_VkDirectFBSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* forMarshaling);
 
 void unmarshal_VkDirectFBSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDirectFBSurfaceCreateInfoEXT* forUnmarshaling);
 
 #define OP_vkCreateDirectFBSurfaceEXT 220792403
 #define OP_vkGetPhysicalDeviceDirectFBPresentationSupportEXT 285441990
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void marshal_VkImportColorBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* forMarshaling);
+
+void unmarshal_VkImportColorBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    VkImportColorBufferGOOGLE* forUnmarshaling);
+
+void marshal_VkImportBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* forMarshaling);
+
+void unmarshal_VkImportBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    VkImportBufferGOOGLE* forUnmarshaling);
+
+void marshal_VkImportPhysicalAddressGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* forMarshaling);
+
+void unmarshal_VkImportPhysicalAddressGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    VkImportPhysicalAddressGOOGLE* forUnmarshaling);
+
+#define OP_vkRegisterImageColorBufferGOOGLE 20318
+#define OP_vkRegisterBufferColorBufferGOOGLE 20319
 #define OP_vkMapMemoryIntoAddressSpaceGOOGLE 20317
 #define OP_vkUpdateDescriptorSetWithTemplateSizedGOOGLE 20320
 #define OP_vkBeginCommandBufferAsyncGOOGLE 20321
@@ -5869,154 +7011,192 @@
 #ifdef VK_KHR_acceleration_structure
 void marshal_VkDeviceOrHostAddressKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* forMarshaling);
 
 void unmarshal_VkDeviceOrHostAddressKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceOrHostAddressKHR* forUnmarshaling);
 
 void marshal_VkDeviceOrHostAddressConstKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* forMarshaling);
 
 void unmarshal_VkDeviceOrHostAddressConstKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkDeviceOrHostAddressConstKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureBuildRangeInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureBuildRangeInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureBuildRangeInfoKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureGeometryTrianglesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryTrianglesDataKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureGeometryAabbsDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureGeometryAabbsDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryAabbsDataKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureGeometryInstancesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureGeometryInstancesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryInstancesDataKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureGeometryDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureGeometryDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryDataKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureGeometryKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureGeometryKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureGeometryKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureBuildGeometryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureBuildGeometryInfoKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkWriteDescriptorSetAccelerationStructureKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* forMarshaling);
 
 void unmarshal_VkWriteDescriptorSetAccelerationStructureKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkWriteDescriptorSetAccelerationStructureKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceAccelerationStructureFeaturesKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceAccelerationStructurePropertiesKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureDeviceAddressInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureDeviceAddressInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureDeviceAddressInfoKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureVersionInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureVersionInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureVersionInfoKHR* forUnmarshaling);
 
 void marshal_VkCopyAccelerationStructureToMemoryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* forMarshaling);
 
 void unmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyAccelerationStructureToMemoryInfoKHR* forUnmarshaling);
 
 void marshal_VkCopyMemoryToAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* forMarshaling);
 
 void unmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyMemoryToAccelerationStructureInfoKHR* forUnmarshaling);
 
 void marshal_VkCopyAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* forMarshaling);
 
 void unmarshal_VkCopyAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkCopyAccelerationStructureInfoKHR* forUnmarshaling);
 
 void marshal_VkAccelerationStructureBuildSizesInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* forMarshaling);
 
 void unmarshal_VkAccelerationStructureBuildSizesInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkAccelerationStructureBuildSizesInfoKHR* forUnmarshaling);
 
 #define OP_vkCreateAccelerationStructureKHR 259403971
@@ -6039,58 +7219,72 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void marshal_VkRayTracingShaderGroupCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkRayTracingShaderGroupCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingShaderGroupCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkRayTracingPipelineInterfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingPipelineInterfaceCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkRayTracingPipelineCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* forMarshaling);
 
 void unmarshal_VkRayTracingPipelineCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkRayTracingPipelineCreateInfoKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayTracingPipelineFeaturesKHR* forUnmarshaling);
 
 void marshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayTracingPipelinePropertiesKHR* forUnmarshaling);
 
 void marshal_VkStridedDeviceAddressRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* forMarshaling);
 
 void unmarshal_VkStridedDeviceAddressRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkStridedDeviceAddressRegionKHR* forUnmarshaling);
 
 void marshal_VkTraceRaysIndirectCommandKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* forMarshaling);
 
 void unmarshal_VkTraceRaysIndirectCommandKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkTraceRaysIndirectCommandKHR* forUnmarshaling);
 
 #define OP_vkCmdTraceRaysKHR 213680716
@@ -6103,10 +7297,12 @@
 #ifdef VK_KHR_ray_query
 void marshal_VkPhysicalDeviceRayQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* forMarshaling);
 
 void unmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     VkPhysicalDeviceRayQueryFeaturesKHR* forUnmarshaling);
 
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_private_defs.h b/system/vulkan_enc/goldfish_vk_private_defs.h
index 5adfefc..d48953f 100644
--- a/system/vulkan_enc/goldfish_vk_private_defs.h
+++ b/system/vulkan_enc/goldfish_vk_private_defs.h
@@ -87,13 +87,13 @@
 
 typedef VkResult (VKAPI_PTR *PFN_vkMapMemoryIntoAddressSpaceGOOGLE)(VkDevice device, VkDeviceMemory memory, uint64_t* pAddress);
 
-#define VK_GOOGLE_color_buffer 1
-#define VK_GOOGLE_COLOR_BUFFER_EXTENSION_NUMBER 219
+#define VK_GOOGLE_gfxstream 1
+#define VK_GOOGLE_GFXSTREAM_EXTENSION_NUMBER 386
 
-#define VK_GOOGLE_COLOR_BUFFER_ENUM(type,id)    ((type)(1000000000 + (1000 * (VK_GOOGLE_COLOR_BUFFER_EXTENSION_NUMBER - 1)) + (id)))
-#define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE   VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 0)
-#define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE   VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 1)
-#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE   VK_GOOGLE_COLOR_BUFFER_ENUM(VkStructureType, 2)
+#define VK_GOOGLE_GFXSTREAM_ENUM(type,id)    ((type)(1000000000 + (1000 * (VK_GOOGLE_GFXSTREAM_EXTENSION_NUMBER - 1)) + (id)))
+#define VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE   VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 0)
+#define VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE   VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 1)
+#define VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE   VK_GOOGLE_GFXSTREAM_ENUM(VkStructureType, 2)
 
 typedef struct {
     VkStructureType sType; // must be VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE
diff --git a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
index 5d933b2..e4bf00d 100644
--- a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.cpp
@@ -35,21 +35,25 @@
 
 void reservedmarshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const void* structExtension,
     uint8_t** ptr);
 
 void reservedunmarshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     void* structExtension_out,
     uint8_t** ptr);
 
 #ifdef VK_VERSION_1_0
 void reservedmarshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent2D* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->width, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->height, sizeof(uint32_t));
@@ -58,10 +62,12 @@
 
 void reservedmarshal_VkExtent3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent3D* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->width, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->height, sizeof(uint32_t));
@@ -72,10 +78,12 @@
 
 void reservedmarshal_VkOffset2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset2D* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (int32_t*)&forMarshaling->x, sizeof(int32_t));
     *ptr += sizeof(int32_t);
     memcpy(*ptr, (int32_t*)&forMarshaling->y, sizeof(int32_t));
@@ -84,10 +92,12 @@
 
 void reservedmarshal_VkOffset3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset3D* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (int32_t*)&forMarshaling->x, sizeof(int32_t));
     *ptr += sizeof(int32_t);
     memcpy(*ptr, (int32_t*)&forMarshaling->y, sizeof(int32_t));
@@ -98,45 +108,65 @@
 
 void reservedmarshal_VkRect2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRect2D* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->offset), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->extent), ptr);
+    (void)rootType;
+    reservedmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->offset), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->extent), ptr);
 }
 
 void reservedmarshal_VkBaseInStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseInStructure* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
 }
 
 void reservedmarshal_VkBaseOutStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseOutStructure* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
 }
 
 void reservedmarshal_VkBufferMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccessFlags*)&forMarshaling->srcAccessMask, sizeof(VkAccessFlags));
     *ptr += sizeof(VkAccessFlags);
     memcpy(*ptr, (VkAccessFlags*)&forMarshaling->dstAccessMask, sizeof(VkAccessFlags));
@@ -157,10 +187,12 @@
 
 void reservedmarshal_VkDispatchIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->x, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->y, sizeof(uint32_t));
@@ -171,10 +203,12 @@
 
 void reservedmarshal_VkDrawIndexedIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->indexCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->instanceCount, sizeof(uint32_t));
@@ -189,10 +223,12 @@
 
 void reservedmarshal_VkDrawIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->vertexCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->instanceCount, sizeof(uint32_t));
@@ -205,10 +241,12 @@
 
 void reservedmarshal_VkImageSubresourceRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceRange* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     *ptr += sizeof(VkImageAspectFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->baseMipLevel, sizeof(uint32_t));
@@ -223,13 +261,19 @@
 
 void reservedmarshal_VkImageMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccessFlags*)&forMarshaling->srcAccessMask, sizeof(VkAccessFlags));
     *ptr += sizeof(VkAccessFlags);
     memcpy(*ptr, (VkAccessFlags*)&forMarshaling->dstAccessMask, sizeof(VkAccessFlags));
@@ -246,18 +290,24 @@
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
     *ptr += 1 * 8;
-    reservedmarshal_VkImageSubresourceRange(vkStream, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange), ptr);
+    reservedmarshal_VkImageSubresourceRange(vkStream, rootType, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange), ptr);
 }
 
 void reservedmarshal_VkMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryBarrier* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccessFlags*)&forMarshaling->srcAccessMask, sizeof(VkAccessFlags));
     *ptr += sizeof(VkAccessFlags);
     memcpy(*ptr, (VkAccessFlags*)&forMarshaling->dstAccessMask, sizeof(VkAccessFlags));
@@ -266,10 +316,12 @@
 
 void reservedmarshal_VkAllocationCallbacks(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAllocationCallbacks* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pUserData;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -304,13 +356,19 @@
 
 void reservedmarshal_VkApplicationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkApplicationInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
     {
         // WARNING PTR CHECK
@@ -381,10 +439,12 @@
 
 void reservedmarshal_VkFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkFormatFeatureFlags*)&forMarshaling->linearTilingFeatures, sizeof(VkFormatFeatureFlags));
     *ptr += sizeof(VkFormatFeatureFlags);
     memcpy(*ptr, (VkFormatFeatureFlags*)&forMarshaling->optimalTilingFeatures, sizeof(VkFormatFeatureFlags));
@@ -395,11 +455,13 @@
 
 void reservedmarshal_VkImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->maxExtent), ptr);
+    (void)rootType;
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->maxExtent), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxMipLevels, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxArrayLayers, sizeof(uint32_t));
@@ -412,13 +474,19 @@
 
 void reservedmarshal_VkInstanceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkInstanceCreateFlags*)&forMarshaling->flags, sizeof(VkInstanceCreateFlags));
     *ptr += sizeof(VkInstanceCreateFlags);
     // WARNING PTR CHECK
@@ -428,7 +496,7 @@
     *ptr += 8;
     if (forMarshaling->pApplicationInfo)
     {
-        reservedmarshal_VkApplicationInfo(vkStream, (const VkApplicationInfo*)(forMarshaling->pApplicationInfo), ptr);
+        reservedmarshal_VkApplicationInfo(vkStream, rootType, (const VkApplicationInfo*)(forMarshaling->pApplicationInfo), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->enabledLayerCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -482,10 +550,12 @@
 
 void reservedmarshal_VkMemoryHeap(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHeap* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkMemoryHeapFlags*)&forMarshaling->flags, sizeof(VkMemoryHeapFlags));
@@ -494,10 +564,12 @@
 
 void reservedmarshal_VkMemoryType(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryType* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkMemoryPropertyFlags*)&forMarshaling->propertyFlags, sizeof(VkMemoryPropertyFlags));
     *ptr += sizeof(VkMemoryPropertyFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->heapIndex, sizeof(uint32_t));
@@ -506,10 +578,12 @@
 
 void reservedmarshal_VkPhysicalDeviceFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkBool32*)&forMarshaling->robustBufferAccess, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fullDrawIndexUint32, sizeof(VkBool32));
@@ -624,10 +698,12 @@
 
 void reservedmarshal_VkPhysicalDeviceLimits(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxImageDimension1D, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxImageDimension2D, sizeof(uint32_t));
@@ -846,30 +922,34 @@
 
 void reservedmarshal_VkPhysicalDeviceMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryTypeCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
     {
-        reservedmarshal_VkMemoryType(vkStream, (VkMemoryType*)(forMarshaling->memoryTypes + i), ptr);
+        reservedmarshal_VkMemoryType(vkStream, rootType, (VkMemoryType*)(forMarshaling->memoryTypes + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryHeapCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
     {
-        reservedmarshal_VkMemoryHeap(vkStream, (VkMemoryHeap*)(forMarshaling->memoryHeaps + i), ptr);
+        reservedmarshal_VkMemoryHeap(vkStream, rootType, (VkMemoryHeap*)(forMarshaling->memoryHeaps + i), ptr);
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceSparseProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkBool32*)&forMarshaling->residencyStandard2DBlockShape, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->residencyStandard2DMultisampleBlockShape, sizeof(VkBool32));
@@ -884,10 +964,12 @@
 
 void reservedmarshal_VkPhysicalDeviceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->apiVersion, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->driverVersion, sizeof(uint32_t));
@@ -902,34 +984,42 @@
     *ptr += VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof(char);
     memcpy(*ptr, (uint8_t*)forMarshaling->pipelineCacheUUID, VK_UUID_SIZE * sizeof(uint8_t));
     *ptr += VK_UUID_SIZE * sizeof(uint8_t);
-    reservedmarshal_VkPhysicalDeviceLimits(vkStream, (VkPhysicalDeviceLimits*)(&forMarshaling->limits), ptr);
-    reservedmarshal_VkPhysicalDeviceSparseProperties(vkStream, (VkPhysicalDeviceSparseProperties*)(&forMarshaling->sparseProperties), ptr);
+    reservedmarshal_VkPhysicalDeviceLimits(vkStream, rootType, (VkPhysicalDeviceLimits*)(&forMarshaling->limits), ptr);
+    reservedmarshal_VkPhysicalDeviceSparseProperties(vkStream, rootType, (VkPhysicalDeviceSparseProperties*)(&forMarshaling->sparseProperties), ptr);
 }
 
 void reservedmarshal_VkQueueFamilyProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkQueueFlags*)&forMarshaling->queueFlags, sizeof(VkQueueFlags));
     *ptr += sizeof(VkQueueFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->queueCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->timestampValidBits, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->minImageTransferGranularity), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->minImageTransferGranularity), ptr);
 }
 
 void reservedmarshal_VkDeviceQueueCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceQueueCreateFlags*)&forMarshaling->flags, sizeof(VkDeviceQueueCreateFlags));
     *ptr += sizeof(VkDeviceQueueCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
@@ -942,20 +1032,26 @@
 
 void reservedmarshal_VkDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceCreateFlags*)&forMarshaling->flags, sizeof(VkDeviceCreateFlags));
     *ptr += sizeof(VkDeviceCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->queueCreateInfoCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->queueCreateInfoCount; ++i)
     {
-        reservedmarshal_VkDeviceQueueCreateInfo(vkStream, (const VkDeviceQueueCreateInfo*)(forMarshaling->pQueueCreateInfos + i), ptr);
+        reservedmarshal_VkDeviceQueueCreateInfo(vkStream, rootType, (const VkDeviceQueueCreateInfo*)(forMarshaling->pQueueCreateInfos + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->enabledLayerCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -1012,16 +1108,18 @@
     *ptr += 8;
     if (forMarshaling->pEnabledFeatures)
     {
-        reservedmarshal_VkPhysicalDeviceFeatures(vkStream, (const VkPhysicalDeviceFeatures*)(forMarshaling->pEnabledFeatures), ptr);
+        reservedmarshal_VkPhysicalDeviceFeatures(vkStream, rootType, (const VkPhysicalDeviceFeatures*)(forMarshaling->pEnabledFeatures), ptr);
     }
 }
 
 void reservedmarshal_VkExtensionProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtensionProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (char*)forMarshaling->extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     *ptr += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
     memcpy(*ptr, (uint32_t*)&forMarshaling->specVersion, sizeof(uint32_t));
@@ -1030,10 +1128,12 @@
 
 void reservedmarshal_VkLayerProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkLayerProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (char*)forMarshaling->layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     *ptr += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
     memcpy(*ptr, (uint32_t*)&forMarshaling->specVersion, sizeof(uint32_t));
@@ -1046,13 +1146,19 @@
 
 void reservedmarshal_VkSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubmitInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->waitSemaphoreCount)
@@ -1104,13 +1210,19 @@
 
 void reservedmarshal_VkMappedMemoryRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMappedMemoryRange* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDeviceMemory((*&forMarshaling->memory));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -1123,13 +1235,19 @@
 
 void reservedmarshal_VkMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->allocationSize, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryTypeIndex, sizeof(uint32_t));
@@ -1138,10 +1256,12 @@
 
 void reservedmarshal_VkMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->alignment, sizeof(VkDeviceSize));
@@ -1152,10 +1272,12 @@
 
 void reservedmarshal_VkSparseMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseMemoryBind* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->resourceOffset, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -1172,10 +1294,12 @@
 
 void reservedmarshal_VkSparseBufferMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -1184,16 +1308,18 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindCount; ++i)
     {
-        reservedmarshal_VkSparseMemoryBind(vkStream, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i), ptr);
+        reservedmarshal_VkSparseMemoryBind(vkStream, rootType, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i), ptr);
     }
 }
 
 void reservedmarshal_VkSparseImageOpaqueMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -1202,16 +1328,18 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindCount; ++i)
     {
-        reservedmarshal_VkSparseMemoryBind(vkStream, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i), ptr);
+        reservedmarshal_VkSparseMemoryBind(vkStream, rootType, (const VkSparseMemoryBind*)(forMarshaling->pBinds + i), ptr);
     }
 }
 
 void reservedmarshal_VkImageSubresource(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresource* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     *ptr += sizeof(VkImageAspectFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->mipLevel, sizeof(uint32_t));
@@ -1222,13 +1350,15 @@
 
 void reservedmarshal_VkSparseImageMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkImageSubresource(vkStream, (VkImageSubresource*)(&forMarshaling->subresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->offset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent), ptr);
+    (void)rootType;
+    reservedmarshal_VkImageSubresource(vkStream, rootType, (VkImageSubresource*)(&forMarshaling->subresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->offset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent), ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDeviceMemory((*&forMarshaling->memory));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -1241,10 +1371,12 @@
 
 void reservedmarshal_VkSparseImageMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -1253,19 +1385,25 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindCount; ++i)
     {
-        reservedmarshal_VkSparseImageMemoryBind(vkStream, (const VkSparseImageMemoryBind*)(forMarshaling->pBinds + i), ptr);
+        reservedmarshal_VkSparseImageMemoryBind(vkStream, rootType, (const VkSparseImageMemoryBind*)(forMarshaling->pBinds + i), ptr);
     }
 }
 
 void reservedmarshal_VkBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindSparseInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->waitSemaphoreCount)
@@ -1285,19 +1423,19 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->bufferBindCount; ++i)
     {
-        reservedmarshal_VkSparseBufferMemoryBindInfo(vkStream, (const VkSparseBufferMemoryBindInfo*)(forMarshaling->pBufferBinds + i), ptr);
+        reservedmarshal_VkSparseBufferMemoryBindInfo(vkStream, rootType, (const VkSparseBufferMemoryBindInfo*)(forMarshaling->pBufferBinds + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->imageOpaqueBindCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->imageOpaqueBindCount; ++i)
     {
-        reservedmarshal_VkSparseImageOpaqueMemoryBindInfo(vkStream, (const VkSparseImageOpaqueMemoryBindInfo*)(forMarshaling->pImageOpaqueBinds + i), ptr);
+        reservedmarshal_VkSparseImageOpaqueMemoryBindInfo(vkStream, rootType, (const VkSparseImageOpaqueMemoryBindInfo*)(forMarshaling->pImageOpaqueBinds + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->imageBindCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->imageBindCount; ++i)
     {
-        reservedmarshal_VkSparseImageMemoryBindInfo(vkStream, (const VkSparseImageMemoryBindInfo*)(forMarshaling->pImageBinds + i), ptr);
+        reservedmarshal_VkSparseImageMemoryBindInfo(vkStream, rootType, (const VkSparseImageMemoryBindInfo*)(forMarshaling->pImageBinds + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->signalSemaphoreCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -1318,24 +1456,28 @@
 
 void reservedmarshal_VkSparseImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     *ptr += sizeof(VkImageAspectFlags);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->imageGranularity), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageGranularity), ptr);
     memcpy(*ptr, (VkSparseImageFormatFlags*)&forMarshaling->flags, sizeof(VkSparseImageFormatFlags));
     *ptr += sizeof(VkSparseImageFormatFlags);
 }
 
 void reservedmarshal_VkSparseImageMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkSparseImageFormatProperties(vkStream, (VkSparseImageFormatProperties*)(&forMarshaling->formatProperties), ptr);
+    (void)rootType;
+    reservedmarshal_VkSparseImageFormatProperties(vkStream, rootType, (VkSparseImageFormatProperties*)(&forMarshaling->formatProperties), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->imageMipTailFirstLod, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->imageMipTailSize, sizeof(VkDeviceSize));
@@ -1348,52 +1490,76 @@
 
 void reservedmarshal_VkFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFenceCreateFlags*)&forMarshaling->flags, sizeof(VkFenceCreateFlags));
     *ptr += sizeof(VkFenceCreateFlags);
 }
 
 void reservedmarshal_VkSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSemaphoreCreateFlags*)&forMarshaling->flags, sizeof(VkSemaphoreCreateFlags));
     *ptr += sizeof(VkSemaphoreCreateFlags);
 }
 
 void reservedmarshal_VkEventCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkEventCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkEventCreateFlags*)&forMarshaling->flags, sizeof(VkEventCreateFlags));
     *ptr += sizeof(VkEventCreateFlags);
 }
 
 void reservedmarshal_VkQueryPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkQueryPoolCreateFlags*)&forMarshaling->flags, sizeof(VkQueryPoolCreateFlags));
     *ptr += sizeof(VkQueryPoolCreateFlags);
     memcpy(*ptr, (VkQueryType*)&forMarshaling->queryType, sizeof(VkQueryType));
@@ -1406,13 +1572,19 @@
 
 void reservedmarshal_VkBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBufferCreateFlags*)&forMarshaling->flags, sizeof(VkBufferCreateFlags));
     *ptr += sizeof(VkBufferCreateFlags);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -1437,13 +1609,19 @@
 
 void reservedmarshal_VkBufferViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBufferViewCreateFlags*)&forMarshaling->flags, sizeof(VkBufferViewCreateFlags));
     *ptr += sizeof(VkBufferViewCreateFlags);
     uint64_t cgen_var_0;
@@ -1460,20 +1638,26 @@
 
 void reservedmarshal_VkImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageCreateFlags*)&forMarshaling->flags, sizeof(VkImageCreateFlags));
     *ptr += sizeof(VkImageCreateFlags);
     memcpy(*ptr, (VkImageType*)&forMarshaling->imageType, sizeof(VkImageType));
     *ptr += sizeof(VkImageType);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->mipLevels, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->arrayLayers, sizeof(uint32_t));
@@ -1504,10 +1688,12 @@
 
 void reservedmarshal_VkSubresourceLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubresourceLayout* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->offset, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -1522,10 +1708,12 @@
 
 void reservedmarshal_VkComponentMapping(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComponentMapping* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkComponentSwizzle*)&forMarshaling->r, sizeof(VkComponentSwizzle));
     *ptr += sizeof(VkComponentSwizzle);
     memcpy(*ptr, (VkComponentSwizzle*)&forMarshaling->g, sizeof(VkComponentSwizzle));
@@ -1538,13 +1726,19 @@
 
 void reservedmarshal_VkImageViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageViewCreateFlags*)&forMarshaling->flags, sizeof(VkImageViewCreateFlags));
     *ptr += sizeof(VkImageViewCreateFlags);
     uint64_t cgen_var_0;
@@ -1555,19 +1749,25 @@
     *ptr += sizeof(VkImageViewType);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
-    reservedmarshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forMarshaling->components), ptr);
-    reservedmarshal_VkImageSubresourceRange(vkStream, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange), ptr);
+    reservedmarshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forMarshaling->components), ptr);
+    reservedmarshal_VkImageSubresourceRange(vkStream, rootType, (VkImageSubresourceRange*)(&forMarshaling->subresourceRange), ptr);
 }
 
 void reservedmarshal_VkShaderModuleCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkShaderModuleCreateFlags*)&forMarshaling->flags, sizeof(VkShaderModuleCreateFlags));
     *ptr += sizeof(VkShaderModuleCreateFlags);
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->codeSize;
@@ -1580,13 +1780,19 @@
 
 void reservedmarshal_VkPipelineCacheCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCacheCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCacheCreateFlags));
     *ptr += sizeof(VkPipelineCacheCreateFlags);
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->initialDataSize;
@@ -1599,10 +1805,12 @@
 
 void reservedmarshal_VkSpecializationMapEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->constantID, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->offset, sizeof(uint32_t));
@@ -1615,15 +1823,17 @@
 
 void reservedmarshal_VkSpecializationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->mapEntryCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->mapEntryCount; ++i)
     {
-        reservedmarshal_VkSpecializationMapEntry(vkStream, (const VkSpecializationMapEntry*)(forMarshaling->pMapEntries + i), ptr);
+        reservedmarshal_VkSpecializationMapEntry(vkStream, rootType, (const VkSpecializationMapEntry*)(forMarshaling->pMapEntries + i), ptr);
     }
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->dataSize;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -1635,13 +1845,19 @@
 
 void reservedmarshal_VkPipelineShaderStageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineShaderStageCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineShaderStageCreateFlags));
     *ptr += sizeof(VkPipelineShaderStageCreateFlags);
     memcpy(*ptr, (VkShaderStageFlagBits*)&forMarshaling->stage, sizeof(VkShaderStageFlagBits));
@@ -1665,22 +1881,28 @@
     *ptr += 8;
     if (forMarshaling->pSpecializationInfo)
     {
-        reservedmarshal_VkSpecializationInfo(vkStream, (const VkSpecializationInfo*)(forMarshaling->pSpecializationInfo), ptr);
+        reservedmarshal_VkSpecializationInfo(vkStream, rootType, (const VkSpecializationInfo*)(forMarshaling->pSpecializationInfo), ptr);
     }
 }
 
 void reservedmarshal_VkComputePipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     *ptr += sizeof(VkPipelineCreateFlags);
-    reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, (VkPipelineShaderStageCreateInfo*)(&forMarshaling->stage), ptr);
+    reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (VkPipelineShaderStageCreateInfo*)(&forMarshaling->stage), ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkPipelineLayout((*&forMarshaling->layout));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -1695,10 +1917,12 @@
 
 void reservedmarshal_VkVertexInputBindingDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stride, sizeof(uint32_t));
@@ -1709,10 +1933,12 @@
 
 void reservedmarshal_VkVertexInputAttributeDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->location, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
@@ -1725,38 +1951,50 @@
 
 void reservedmarshal_VkPipelineVertexInputStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineVertexInputStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineVertexInputStateCreateFlags));
     *ptr += sizeof(VkPipelineVertexInputStateCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->vertexBindingDescriptionCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->vertexBindingDescriptionCount; ++i)
     {
-        reservedmarshal_VkVertexInputBindingDescription(vkStream, (const VkVertexInputBindingDescription*)(forMarshaling->pVertexBindingDescriptions + i), ptr);
+        reservedmarshal_VkVertexInputBindingDescription(vkStream, rootType, (const VkVertexInputBindingDescription*)(forMarshaling->pVertexBindingDescriptions + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->vertexAttributeDescriptionCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->vertexAttributeDescriptionCount; ++i)
     {
-        reservedmarshal_VkVertexInputAttributeDescription(vkStream, (const VkVertexInputAttributeDescription*)(forMarshaling->pVertexAttributeDescriptions + i), ptr);
+        reservedmarshal_VkVertexInputAttributeDescription(vkStream, rootType, (const VkVertexInputAttributeDescription*)(forMarshaling->pVertexAttributeDescriptions + i), ptr);
     }
 }
 
 void reservedmarshal_VkPipelineInputAssemblyStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineInputAssemblyStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineInputAssemblyStateCreateFlags));
     *ptr += sizeof(VkPipelineInputAssemblyStateCreateFlags);
     memcpy(*ptr, (VkPrimitiveTopology*)&forMarshaling->topology, sizeof(VkPrimitiveTopology));
@@ -1767,13 +2005,19 @@
 
 void reservedmarshal_VkPipelineTessellationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineTessellationStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineTessellationStateCreateFlags));
     *ptr += sizeof(VkPipelineTessellationStateCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->patchControlPoints, sizeof(uint32_t));
@@ -1782,10 +2026,12 @@
 
 void reservedmarshal_VkViewport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewport* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)&forMarshaling->x, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->y, sizeof(float));
@@ -1802,13 +2048,19 @@
 
 void reservedmarshal_VkPipelineViewportStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineViewportStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineViewportStateCreateFlags));
     *ptr += sizeof(VkPipelineViewportStateCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
@@ -1822,7 +2074,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
         {
-            reservedmarshal_VkViewport(vkStream, (const VkViewport*)(forMarshaling->pViewports + i), ptr);
+            reservedmarshal_VkViewport(vkStream, rootType, (const VkViewport*)(forMarshaling->pViewports + i), ptr);
         }
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->scissorCount, sizeof(uint32_t));
@@ -1836,20 +2088,26 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->scissorCount; ++i)
         {
-            reservedmarshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pScissors + i), ptr);
+            reservedmarshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pScissors + i), ptr);
         }
     }
 }
 
 void reservedmarshal_VkPipelineRasterizationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineRasterizationStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineRasterizationStateCreateFlags));
     *ptr += sizeof(VkPipelineRasterizationStateCreateFlags);
     memcpy(*ptr, (VkBool32*)&forMarshaling->depthClampEnable, sizeof(VkBool32));
@@ -1876,13 +2134,19 @@
 
 void reservedmarshal_VkPipelineMultisampleStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineMultisampleStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineMultisampleStateCreateFlags));
     *ptr += sizeof(VkPipelineMultisampleStateCreateFlags);
     memcpy(*ptr, (VkSampleCountFlagBits*)&forMarshaling->rasterizationSamples, sizeof(VkSampleCountFlagBits));
@@ -1909,10 +2173,12 @@
 
 void reservedmarshal_VkStencilOpState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStencilOpState* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStencilOp*)&forMarshaling->failOp, sizeof(VkStencilOp));
     *ptr += sizeof(VkStencilOp);
     memcpy(*ptr, (VkStencilOp*)&forMarshaling->passOp, sizeof(VkStencilOp));
@@ -1931,13 +2197,19 @@
 
 void reservedmarshal_VkPipelineDepthStencilStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineDepthStencilStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineDepthStencilStateCreateFlags));
     *ptr += sizeof(VkPipelineDepthStencilStateCreateFlags);
     memcpy(*ptr, (VkBool32*)&forMarshaling->depthTestEnable, sizeof(VkBool32));
@@ -1950,8 +2222,8 @@
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->stencilTestEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
-    reservedmarshal_VkStencilOpState(vkStream, (VkStencilOpState*)(&forMarshaling->front), ptr);
-    reservedmarshal_VkStencilOpState(vkStream, (VkStencilOpState*)(&forMarshaling->back), ptr);
+    reservedmarshal_VkStencilOpState(vkStream, rootType, (VkStencilOpState*)(&forMarshaling->front), ptr);
+    reservedmarshal_VkStencilOpState(vkStream, rootType, (VkStencilOpState*)(&forMarshaling->back), ptr);
     memcpy(*ptr, (float*)&forMarshaling->minDepthBounds, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->maxDepthBounds, sizeof(float));
@@ -1960,10 +2232,12 @@
 
 void reservedmarshal_VkPipelineColorBlendAttachmentState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkBool32*)&forMarshaling->blendEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBlendFactor*)&forMarshaling->srcColorBlendFactor, sizeof(VkBlendFactor));
@@ -1984,13 +2258,19 @@
 
 void reservedmarshal_VkPipelineColorBlendStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineColorBlendStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineColorBlendStateCreateFlags));
     *ptr += sizeof(VkPipelineColorBlendStateCreateFlags);
     memcpy(*ptr, (VkBool32*)&forMarshaling->logicOpEnable, sizeof(VkBool32));
@@ -2001,7 +2281,7 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentCount; ++i)
     {
-        reservedmarshal_VkPipelineColorBlendAttachmentState(vkStream, (const VkPipelineColorBlendAttachmentState*)(forMarshaling->pAttachments + i), ptr);
+        reservedmarshal_VkPipelineColorBlendAttachmentState(vkStream, rootType, (const VkPipelineColorBlendAttachmentState*)(forMarshaling->pAttachments + i), ptr);
     }
     memcpy(*ptr, (float*)forMarshaling->blendConstants, 4 * sizeof(float));
     *ptr += 4 * sizeof(float);
@@ -2009,13 +2289,19 @@
 
 void reservedmarshal_VkPipelineDynamicStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineDynamicStateCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineDynamicStateCreateFlags));
     *ptr += sizeof(VkPipelineDynamicStateCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->dynamicStateCount, sizeof(uint32_t));
@@ -2026,10 +2312,12 @@
 
 void reservedmarshal_VkGraphicsPipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint32_t hasRasterization = 1;
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
     {
@@ -2050,14 +2338,18 @@
     }
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     *ptr += sizeof(VkPipelineCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
     {
-        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
+        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
     }
     // WARNING PTR CHECK
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
@@ -2069,7 +2361,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forMarshaling->pVertexInputState))
     {
-        reservedmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState), ptr);
+        reservedmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, rootType, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState), ptr);
     }
     // WARNING PTR CHECK
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT)
@@ -2081,7 +2373,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forMarshaling->pInputAssemblyState))
     {
-        reservedmarshal_VkPipelineInputAssemblyStateCreateInfo(vkStream, (const VkPipelineInputAssemblyStateCreateInfo*)(forMarshaling->pInputAssemblyState), ptr);
+        reservedmarshal_VkPipelineInputAssemblyStateCreateInfo(vkStream, rootType, (const VkPipelineInputAssemblyStateCreateInfo*)(forMarshaling->pInputAssemblyState), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pTessellationState;
@@ -2092,7 +2384,7 @@
     {
         if (hasTessellation)
         {
-            reservedmarshal_VkPipelineTessellationStateCreateInfo(vkStream, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState), ptr);
+            reservedmarshal_VkPipelineTessellationStateCreateInfo(vkStream, rootType, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -2104,7 +2396,7 @@
     {
         if (hasRasterization)
         {
-            reservedmarshal_VkPipelineViewportStateCreateInfo(vkStream, (const VkPipelineViewportStateCreateInfo*)(forMarshaling->pViewportState), ptr);
+            reservedmarshal_VkPipelineViewportStateCreateInfo(vkStream, rootType, (const VkPipelineViewportStateCreateInfo*)(forMarshaling->pViewportState), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -2117,7 +2409,7 @@
     }
     if ((!(vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_IGNORED_HANDLES_BIT) || forMarshaling->pRasterizationState))
     {
-        reservedmarshal_VkPipelineRasterizationStateCreateInfo(vkStream, (const VkPipelineRasterizationStateCreateInfo*)(forMarshaling->pRasterizationState), ptr);
+        reservedmarshal_VkPipelineRasterizationStateCreateInfo(vkStream, rootType, (const VkPipelineRasterizationStateCreateInfo*)(forMarshaling->pRasterizationState), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)forMarshaling->pMultisampleState;
@@ -2128,7 +2420,7 @@
     {
         if (hasRasterization)
         {
-            reservedmarshal_VkPipelineMultisampleStateCreateInfo(vkStream, (const VkPipelineMultisampleStateCreateInfo*)(forMarshaling->pMultisampleState), ptr);
+            reservedmarshal_VkPipelineMultisampleStateCreateInfo(vkStream, rootType, (const VkPipelineMultisampleStateCreateInfo*)(forMarshaling->pMultisampleState), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -2140,7 +2432,7 @@
     {
         if (hasRasterization)
         {
-            reservedmarshal_VkPipelineDepthStencilStateCreateInfo(vkStream, (const VkPipelineDepthStencilStateCreateInfo*)(forMarshaling->pDepthStencilState), ptr);
+            reservedmarshal_VkPipelineDepthStencilStateCreateInfo(vkStream, rootType, (const VkPipelineDepthStencilStateCreateInfo*)(forMarshaling->pDepthStencilState), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -2152,7 +2444,7 @@
     {
         if (hasRasterization)
         {
-            reservedmarshal_VkPipelineColorBlendStateCreateInfo(vkStream, (const VkPipelineColorBlendStateCreateInfo*)(forMarshaling->pColorBlendState), ptr);
+            reservedmarshal_VkPipelineColorBlendStateCreateInfo(vkStream, rootType, (const VkPipelineColorBlendStateCreateInfo*)(forMarshaling->pColorBlendState), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -2162,7 +2454,7 @@
     *ptr += 8;
     if (forMarshaling->pDynamicState)
     {
-        reservedmarshal_VkPipelineDynamicStateCreateInfo(vkStream, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState), ptr);
+        reservedmarshal_VkPipelineDynamicStateCreateInfo(vkStream, rootType, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState), ptr);
     }
     uint64_t cgen_var_6;
     *&cgen_var_6 = get_host_u64_VkPipelineLayout((*&forMarshaling->layout));
@@ -2184,10 +2476,12 @@
 
 void reservedmarshal_VkPushConstantRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPushConstantRange* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkShaderStageFlags*)&forMarshaling->stageFlags, sizeof(VkShaderStageFlags));
     *ptr += sizeof(VkShaderStageFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->offset, sizeof(uint32_t));
@@ -2198,13 +2492,19 @@
 
 void reservedmarshal_VkPipelineLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineLayoutCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineLayoutCreateFlags));
     *ptr += sizeof(VkPipelineLayoutCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->setLayoutCount, sizeof(uint32_t));
@@ -2226,19 +2526,25 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->pushConstantRangeCount; ++i)
     {
-        reservedmarshal_VkPushConstantRange(vkStream, (const VkPushConstantRange*)(forMarshaling->pPushConstantRanges + i), ptr);
+        reservedmarshal_VkPushConstantRange(vkStream, rootType, (const VkPushConstantRange*)(forMarshaling->pPushConstantRanges + i), ptr);
     }
 }
 
 void reservedmarshal_VkSamplerCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSamplerCreateFlags*)&forMarshaling->flags, sizeof(VkSamplerCreateFlags));
     *ptr += sizeof(VkSamplerCreateFlags);
     memcpy(*ptr, (VkFilter*)&forMarshaling->magFilter, sizeof(VkFilter));
@@ -2275,13 +2581,19 @@
 
 void reservedmarshal_VkCopyDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDescriptorSet((*&forMarshaling->srcSet));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2304,10 +2616,12 @@
 
 void reservedmarshal_VkDescriptorBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2320,10 +2634,12 @@
 
 void reservedmarshal_VkDescriptorImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSampler((*&forMarshaling->sampler));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2338,10 +2654,12 @@
 
 void reservedmarshal_VkDescriptorPoolSize(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDescriptorType*)&forMarshaling->type, sizeof(VkDescriptorType));
     *ptr += sizeof(VkDescriptorType);
     memcpy(*ptr, (uint32_t*)&forMarshaling->descriptorCount, sizeof(uint32_t));
@@ -2350,13 +2668,19 @@
 
 void reservedmarshal_VkDescriptorPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDescriptorPoolCreateFlags*)&forMarshaling->flags, sizeof(VkDescriptorPoolCreateFlags));
     *ptr += sizeof(VkDescriptorPoolCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxSets, sizeof(uint32_t));
@@ -2365,19 +2689,25 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->poolSizeCount; ++i)
     {
-        reservedmarshal_VkDescriptorPoolSize(vkStream, (const VkDescriptorPoolSize*)(forMarshaling->pPoolSizes + i), ptr);
+        reservedmarshal_VkDescriptorPoolSize(vkStream, rootType, (const VkDescriptorPoolSize*)(forMarshaling->pPoolSizes + i), ptr);
     }
 }
 
 void reservedmarshal_VkDescriptorSetAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDescriptorPool((*&forMarshaling->descriptorPool));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2401,10 +2731,12 @@
 
 void reservedmarshal_VkDescriptorSetLayoutBinding(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkDescriptorType*)&forMarshaling->descriptorType, sizeof(VkDescriptorType));
@@ -2438,32 +2770,44 @@
 
 void reservedmarshal_VkDescriptorSetLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDescriptorSetLayoutCreateFlags*)&forMarshaling->flags, sizeof(VkDescriptorSetLayoutCreateFlags));
     *ptr += sizeof(VkDescriptorSetLayoutCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->bindingCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->bindingCount; ++i)
     {
-        reservedmarshal_VkDescriptorSetLayoutBinding(vkStream, (const VkDescriptorSetLayoutBinding*)(forMarshaling->pBindings + i), ptr);
+        reservedmarshal_VkDescriptorSetLayoutBinding(vkStream, rootType, (const VkDescriptorSetLayoutBinding*)(forMarshaling->pBindings + i), ptr);
     }
 }
 
 void reservedmarshal_VkWriteDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDescriptorSet((*&forMarshaling->dstSet));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2487,7 +2831,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->descriptorCount; ++i)
             {
-                reservedmarshal_VkDescriptorImageInfo(vkStream, (const VkDescriptorImageInfo*)(forMarshaling->pImageInfo + i), ptr);
+                reservedmarshal_VkDescriptorImageInfo(vkStream, rootType, (const VkDescriptorImageInfo*)(forMarshaling->pImageInfo + i), ptr);
             }
         }
     }
@@ -2502,7 +2846,7 @@
         {
             for (uint32_t i = 0; i < (uint32_t)forMarshaling->descriptorCount; ++i)
             {
-                reservedmarshal_VkDescriptorBufferInfo(vkStream, (const VkDescriptorBufferInfo*)(forMarshaling->pBufferInfo + i), ptr);
+                reservedmarshal_VkDescriptorBufferInfo(vkStream, rootType, (const VkDescriptorBufferInfo*)(forMarshaling->pBufferInfo + i), ptr);
             }
         }
     }
@@ -2534,10 +2878,12 @@
 
 void reservedmarshal_VkAttachmentDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkAttachmentDescriptionFlags*)&forMarshaling->flags, sizeof(VkAttachmentDescriptionFlags));
     *ptr += sizeof(VkAttachmentDescriptionFlags);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
@@ -2560,10 +2906,12 @@
 
 void reservedmarshal_VkAttachmentReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachment, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkImageLayout*)&forMarshaling->layout, sizeof(VkImageLayout));
@@ -2572,13 +2920,19 @@
 
 void reservedmarshal_VkFramebufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFramebufferCreateFlags*)&forMarshaling->flags, sizeof(VkFramebufferCreateFlags));
     *ptr += sizeof(VkFramebufferCreateFlags);
     uint64_t cgen_var_0;
@@ -2610,10 +2964,12 @@
 
 void reservedmarshal_VkSubpassDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkSubpassDescriptionFlags*)&forMarshaling->flags, sizeof(VkSubpassDescriptionFlags));
     *ptr += sizeof(VkSubpassDescriptionFlags);
     memcpy(*ptr, (VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
@@ -2622,13 +2978,13 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->inputAttachmentCount; ++i)
     {
-        reservedmarshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pInputAttachments + i), ptr);
+        reservedmarshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pInputAttachments + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->colorAttachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
     {
-        reservedmarshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pColorAttachments + i), ptr);
+        reservedmarshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pColorAttachments + i), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pResolveAttachments;
@@ -2639,7 +2995,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
         {
-            reservedmarshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pResolveAttachments + i), ptr);
+            reservedmarshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pResolveAttachments + i), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -2649,7 +3005,7 @@
     *ptr += 8;
     if (forMarshaling->pDepthStencilAttachment)
     {
-        reservedmarshal_VkAttachmentReference(vkStream, (const VkAttachmentReference*)(forMarshaling->pDepthStencilAttachment), ptr);
+        reservedmarshal_VkAttachmentReference(vkStream, rootType, (const VkAttachmentReference*)(forMarshaling->pDepthStencilAttachment), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->preserveAttachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -2659,10 +3015,12 @@
 
 void reservedmarshal_VkSubpassDependency(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->srcSubpass, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->dstSubpass, sizeof(uint32_t));
@@ -2681,44 +3039,56 @@
 
 void reservedmarshal_VkRenderPassCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkRenderPassCreateFlags*)&forMarshaling->flags, sizeof(VkRenderPassCreateFlags));
     *ptr += sizeof(VkRenderPassCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentCount; ++i)
     {
-        reservedmarshal_VkAttachmentDescription(vkStream, (const VkAttachmentDescription*)(forMarshaling->pAttachments + i), ptr);
+        reservedmarshal_VkAttachmentDescription(vkStream, rootType, (const VkAttachmentDescription*)(forMarshaling->pAttachments + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->subpassCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->subpassCount; ++i)
     {
-        reservedmarshal_VkSubpassDescription(vkStream, (const VkSubpassDescription*)(forMarshaling->pSubpasses + i), ptr);
+        reservedmarshal_VkSubpassDescription(vkStream, rootType, (const VkSubpassDescription*)(forMarshaling->pSubpasses + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->dependencyCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->dependencyCount; ++i)
     {
-        reservedmarshal_VkSubpassDependency(vkStream, (const VkSubpassDependency*)(forMarshaling->pDependencies + i), ptr);
+        reservedmarshal_VkSubpassDependency(vkStream, rootType, (const VkSubpassDependency*)(forMarshaling->pDependencies + i), ptr);
     }
 }
 
 void reservedmarshal_VkCommandPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkCommandPoolCreateFlags*)&forMarshaling->flags, sizeof(VkCommandPoolCreateFlags));
     *ptr += sizeof(VkCommandPoolCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
@@ -2727,13 +3097,19 @@
 
 void reservedmarshal_VkCommandBufferAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkCommandPool((*&forMarshaling->commandPool));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2746,13 +3122,19 @@
 
 void reservedmarshal_VkCommandBufferInheritanceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkRenderPass((*&forMarshaling->renderPass));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2773,13 +3155,19 @@
 
 void reservedmarshal_VkCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkCommandBufferUsageFlags*)&forMarshaling->flags, sizeof(VkCommandBufferUsageFlags));
     *ptr += sizeof(VkCommandBufferUsageFlags);
     // WARNING PTR CHECK
@@ -2789,16 +3177,18 @@
     *ptr += 8;
     if (forMarshaling->pInheritanceInfo)
     {
-        reservedmarshal_VkCommandBufferInheritanceInfo(vkStream, (const VkCommandBufferInheritanceInfo*)(forMarshaling->pInheritanceInfo), ptr);
+        reservedmarshal_VkCommandBufferInheritanceInfo(vkStream, rootType, (const VkCommandBufferInheritanceInfo*)(forMarshaling->pInheritanceInfo), ptr);
     }
 }
 
 void reservedmarshal_VkBufferCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->srcOffset, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->dstOffset, sizeof(VkDeviceSize));
@@ -2809,10 +3199,12 @@
 
 void reservedmarshal_VkImageSubresourceLayers(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     *ptr += sizeof(VkImageAspectFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->mipLevel, sizeof(uint32_t));
@@ -2825,37 +3217,43 @@
 
 void reservedmarshal_VkBufferImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->bufferOffset, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (uint32_t*)&forMarshaling->bufferRowLength, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->bufferImageHeight, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->imageOffset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->imageExtent), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->imageOffset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageExtent), ptr);
 }
 
 void reservedmarshal_VkClearColorValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearColorValue* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)forMarshaling->float32, 4 * sizeof(float));
     *ptr += 4 * sizeof(float);
 }
 
 void reservedmarshal_VkClearDepthStencilValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)&forMarshaling->depth, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stencil, sizeof(uint32_t));
@@ -2864,33 +3262,39 @@
 
 void reservedmarshal_VkClearValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearValue* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkClearColorValue(vkStream, (VkClearColorValue*)(&forMarshaling->color), ptr);
+    (void)rootType;
+    reservedmarshal_VkClearColorValue(vkStream, rootType, (VkClearColorValue*)(&forMarshaling->color), ptr);
 }
 
 void reservedmarshal_VkClearAttachment(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearAttachment* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkImageAspectFlags*)&forMarshaling->aspectMask, sizeof(VkImageAspectFlags));
     *ptr += sizeof(VkImageAspectFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->colorAttachment, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkClearValue(vkStream, (VkClearValue*)(&forMarshaling->clearValue), ptr);
+    reservedmarshal_VkClearValue(vkStream, rootType, (VkClearValue*)(&forMarshaling->clearValue), ptr);
 }
 
 void reservedmarshal_VkClearRect(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearRect* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->rect), ptr);
+    (void)rootType;
+    reservedmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->rect), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->baseArrayLayer, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->layerCount, sizeof(uint32_t));
@@ -2899,57 +3303,69 @@
 
 void reservedmarshal_VkImageBlit(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
+    (void)rootType;
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->srcOffsets + i), ptr);
+        reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->srcOffsets + i), ptr);
     }
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->dstOffsets + i), ptr);
+        reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->dstOffsets + i), ptr);
     }
 }
 
 void reservedmarshal_VkImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent), ptr);
+    (void)rootType;
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent), ptr);
 }
 
 void reservedmarshal_VkImageResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent), ptr);
+    (void)rootType;
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent), ptr);
 }
 
 void reservedmarshal_VkRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkRenderPass((*&forMarshaling->renderPass));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -2958,7 +3374,7 @@
     *&cgen_var_1 = get_host_u64_VkFramebuffer((*&forMarshaling->framebuffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_1, 1 * 8);
     *ptr += 1 * 8;
-    reservedmarshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->renderArea), ptr);
+    reservedmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->renderArea), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->clearValueCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -2970,7 +3386,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->clearValueCount; ++i)
         {
-            reservedmarshal_VkClearValue(vkStream, (const VkClearValue*)(forMarshaling->pClearValues + i), ptr);
+            reservedmarshal_VkClearValue(vkStream, rootType, (const VkClearValue*)(forMarshaling->pClearValues + i), ptr);
         }
     }
 }
@@ -2979,13 +3395,19 @@
 #ifdef VK_VERSION_1_1
 void reservedmarshal_VkPhysicalDeviceSubgroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->subgroupSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkShaderStageFlags*)&forMarshaling->supportedStages, sizeof(VkShaderStageFlags));
@@ -2998,13 +3420,19 @@
 
 void reservedmarshal_VkBindBufferMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3019,13 +3447,19 @@
 
 void reservedmarshal_VkBindImageMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3040,13 +3474,19 @@
 
 void reservedmarshal_VkPhysicalDevice16BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->storageBuffer16BitAccess, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->uniformAndStorageBuffer16BitAccess, sizeof(VkBool32));
@@ -3059,13 +3499,19 @@
 
 void reservedmarshal_VkMemoryDedicatedRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->prefersDedicatedAllocation, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->requiresDedicatedAllocation, sizeof(VkBool32));
@@ -3074,13 +3520,19 @@
 
 void reservedmarshal_VkMemoryDedicatedAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3093,13 +3545,19 @@
 
 void reservedmarshal_VkMemoryAllocateFlagsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkMemoryAllocateFlags*)&forMarshaling->flags, sizeof(VkMemoryAllocateFlags));
     *ptr += sizeof(VkMemoryAllocateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->deviceMask, sizeof(uint32_t));
@@ -3108,45 +3566,63 @@
 
 void reservedmarshal_VkDeviceGroupRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->deviceMask, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->deviceRenderAreaCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->deviceRenderAreaCount; ++i)
     {
-        reservedmarshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pDeviceRenderAreas + i), ptr);
+        reservedmarshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pDeviceRenderAreas + i), ptr);
     }
 }
 
 void reservedmarshal_VkDeviceGroupCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->deviceMask, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkDeviceGroupSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint32_t*)forMarshaling->pWaitSemaphoreDeviceIndices, forMarshaling->waitSemaphoreCount * sizeof(const uint32_t));
@@ -3163,13 +3639,19 @@
 
 void reservedmarshal_VkDeviceGroupBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->resourceDeviceIndex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryDeviceIndex, sizeof(uint32_t));
@@ -3178,13 +3660,19 @@
 
 void reservedmarshal_VkBindBufferMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->deviceIndexCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint32_t*)forMarshaling->pDeviceIndices, forMarshaling->deviceIndexCount * sizeof(const uint32_t));
@@ -3193,13 +3681,19 @@
 
 void reservedmarshal_VkBindImageMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->deviceIndexCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint32_t*)forMarshaling->pDeviceIndices, forMarshaling->deviceIndexCount * sizeof(const uint32_t));
@@ -3208,19 +3702,25 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->splitInstanceBindRegionCount; ++i)
     {
-        reservedmarshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pSplitInstanceBindRegions + i), ptr);
+        reservedmarshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pSplitInstanceBindRegions + i), ptr);
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceGroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->physicalDeviceCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkPhysicalDevice*)forMarshaling->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE * sizeof(VkPhysicalDevice));
@@ -3231,13 +3731,19 @@
 
 void reservedmarshal_VkDeviceGroupDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->physicalDeviceCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->physicalDeviceCount)
@@ -3257,13 +3763,19 @@
 
 void reservedmarshal_VkBufferMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3272,13 +3784,19 @@
 
 void reservedmarshal_VkImageMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3287,13 +3805,19 @@
 
 void reservedmarshal_VkImageSparseMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3302,85 +3826,127 @@
 
 void reservedmarshal_VkMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkMemoryRequirements(vkStream, (VkMemoryRequirements*)(&forMarshaling->memoryRequirements), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkMemoryRequirements(vkStream, rootType, (VkMemoryRequirements*)(&forMarshaling->memoryRequirements), ptr);
 }
 
 void reservedmarshal_VkSparseImageMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkSparseImageMemoryRequirements(vkStream, (VkSparseImageMemoryRequirements*)(&forMarshaling->memoryRequirements), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkSparseImageMemoryRequirements(vkStream, rootType, (VkSparseImageMemoryRequirements*)(&forMarshaling->memoryRequirements), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceFeatures2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkPhysicalDeviceFeatures(vkStream, (VkPhysicalDeviceFeatures*)(&forMarshaling->features), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkPhysicalDeviceFeatures(vkStream, rootType, (VkPhysicalDeviceFeatures*)(&forMarshaling->features), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkPhysicalDeviceProperties(vkStream, (VkPhysicalDeviceProperties*)(&forMarshaling->properties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkPhysicalDeviceProperties(vkStream, rootType, (VkPhysicalDeviceProperties*)(&forMarshaling->properties), ptr);
 }
 
 void reservedmarshal_VkFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkFormatProperties(vkStream, (VkFormatProperties*)(&forMarshaling->formatProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkFormatProperties(vkStream, rootType, (VkFormatProperties*)(&forMarshaling->formatProperties), ptr);
 }
 
 void reservedmarshal_VkImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkImageFormatProperties(vkStream, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkImageFormatProperties(vkStream, rootType, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
     memcpy(*ptr, (VkImageType*)&forMarshaling->type, sizeof(VkImageType));
@@ -3395,49 +3961,73 @@
 
 void reservedmarshal_VkQueueFamilyProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkQueueFamilyProperties(vkStream, (VkQueueFamilyProperties*)(&forMarshaling->queueFamilyProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkQueueFamilyProperties(vkStream, rootType, (VkQueueFamilyProperties*)(&forMarshaling->queueFamilyProperties), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceMemoryProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkPhysicalDeviceMemoryProperties(vkStream, (VkPhysicalDeviceMemoryProperties*)(&forMarshaling->memoryProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkPhysicalDeviceMemoryProperties(vkStream, rootType, (VkPhysicalDeviceMemoryProperties*)(&forMarshaling->memoryProperties), ptr);
 }
 
 void reservedmarshal_VkSparseImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkSparseImageFormatProperties(vkStream, (VkSparseImageFormatProperties*)(&forMarshaling->properties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkSparseImageFormatProperties(vkStream, rootType, (VkSparseImageFormatProperties*)(&forMarshaling->properties), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
     memcpy(*ptr, (VkImageType*)&forMarshaling->type, sizeof(VkImageType));
@@ -3452,23 +4042,31 @@
 
 void reservedmarshal_VkPhysicalDevicePointClippingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPointClippingBehavior*)&forMarshaling->pointClippingBehavior, sizeof(VkPointClippingBehavior));
     *ptr += sizeof(VkPointClippingBehavior);
 }
 
 void reservedmarshal_VkInputAttachmentAspectReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->subpass, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->inputAttachmentIndex, sizeof(uint32_t));
@@ -3479,56 +4077,80 @@
 
 void reservedmarshal_VkRenderPassInputAttachmentAspectCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->aspectReferenceCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->aspectReferenceCount; ++i)
     {
-        reservedmarshal_VkInputAttachmentAspectReference(vkStream, (const VkInputAttachmentAspectReference*)(forMarshaling->pAspectReferences + i), ptr);
+        reservedmarshal_VkInputAttachmentAspectReference(vkStream, rootType, (const VkInputAttachmentAspectReference*)(forMarshaling->pAspectReferences + i), ptr);
     }
 }
 
 void reservedmarshal_VkImageViewUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageUsageFlags*)&forMarshaling->usage, sizeof(VkImageUsageFlags));
     *ptr += sizeof(VkImageUsageFlags);
 }
 
 void reservedmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkTessellationDomainOrigin*)&forMarshaling->domainOrigin, sizeof(VkTessellationDomainOrigin));
     *ptr += sizeof(VkTessellationDomainOrigin);
 }
 
 void reservedmarshal_VkRenderPassMultiviewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->subpassCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint32_t*)forMarshaling->pViewMasks, forMarshaling->subpassCount * sizeof(const uint32_t));
@@ -3545,13 +4167,19 @@
 
 void reservedmarshal_VkPhysicalDeviceMultiviewFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->multiview, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->multiviewGeometryShader, sizeof(VkBool32));
@@ -3562,13 +4190,19 @@
 
 void reservedmarshal_VkPhysicalDeviceMultiviewProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxMultiviewViewCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxMultiviewInstanceIndex, sizeof(uint32_t));
@@ -3577,13 +4211,19 @@
 
 void reservedmarshal_VkPhysicalDeviceVariablePointersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->variablePointersStorageBuffer, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->variablePointers, sizeof(VkBool32));
@@ -3592,39 +4232,57 @@
 
 void reservedmarshal_VkPhysicalDeviceProtectedMemoryFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->protectedMemory, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceProtectedMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->protectedNoFault, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkDeviceQueueInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceQueueCreateFlags*)&forMarshaling->flags, sizeof(VkDeviceQueueCreateFlags));
     *ptr += sizeof(VkDeviceQueueCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
@@ -3635,33 +4293,45 @@
 
 void reservedmarshal_VkProtectedSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->protectedSubmit, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkSamplerYcbcrConversionCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
     memcpy(*ptr, (VkSamplerYcbcrModelConversion*)&forMarshaling->ycbcrModel, sizeof(VkSamplerYcbcrModelConversion));
     *ptr += sizeof(VkSamplerYcbcrModelConversion);
     memcpy(*ptr, (VkSamplerYcbcrRange*)&forMarshaling->ycbcrRange, sizeof(VkSamplerYcbcrRange));
     *ptr += sizeof(VkSamplerYcbcrRange);
-    reservedmarshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forMarshaling->components), ptr);
+    reservedmarshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forMarshaling->components), ptr);
     memcpy(*ptr, (VkChromaLocation*)&forMarshaling->xChromaOffset, sizeof(VkChromaLocation));
     *ptr += sizeof(VkChromaLocation);
     memcpy(*ptr, (VkChromaLocation*)&forMarshaling->yChromaOffset, sizeof(VkChromaLocation));
@@ -3674,13 +4344,19 @@
 
 void reservedmarshal_VkSamplerYcbcrConversionInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSamplerYcbcrConversion((*&forMarshaling->conversion));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -3689,62 +4365,88 @@
 
 void reservedmarshal_VkBindImagePlaneMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageAspectFlagBits*)&forMarshaling->planeAspect, sizeof(VkImageAspectFlagBits));
     *ptr += sizeof(VkImageAspectFlagBits);
 }
 
 void reservedmarshal_VkImagePlaneMemoryRequirementsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageAspectFlagBits*)&forMarshaling->planeAspect, sizeof(VkImageAspectFlagBits));
     *ptr += sizeof(VkImageAspectFlagBits);
 }
 
 void reservedmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->samplerYcbcrConversion, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkSamplerYcbcrConversionImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->combinedImageSamplerDescriptorCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkDescriptorUpdateTemplateEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->dstBinding, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->dstArrayElement, sizeof(uint32_t));
@@ -3765,20 +4467,26 @@
 
 void reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDescriptorUpdateTemplateCreateFlags*)&forMarshaling->flags, sizeof(VkDescriptorUpdateTemplateCreateFlags));
     *ptr += sizeof(VkDescriptorUpdateTemplateCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->descriptorUpdateEntryCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->descriptorUpdateEntryCount; ++i)
     {
-        reservedmarshal_VkDescriptorUpdateTemplateEntry(vkStream, (const VkDescriptorUpdateTemplateEntry*)(forMarshaling->pDescriptorUpdateEntries + i), ptr);
+        reservedmarshal_VkDescriptorUpdateTemplateEntry(vkStream, rootType, (const VkDescriptorUpdateTemplateEntry*)(forMarshaling->pDescriptorUpdateEntries + i), ptr);
     }
     memcpy(*ptr, (VkDescriptorUpdateTemplateType*)&forMarshaling->templateType, sizeof(VkDescriptorUpdateTemplateType));
     *ptr += sizeof(VkDescriptorUpdateTemplateType);
@@ -3798,10 +4506,12 @@
 
 void reservedmarshal_VkExternalMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkExternalMemoryFeatureFlags*)&forMarshaling->externalMemoryFeatures, sizeof(VkExternalMemoryFeatureFlags));
     *ptr += sizeof(VkExternalMemoryFeatureFlags);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlags*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
@@ -3812,38 +4522,56 @@
 
 void reservedmarshal_VkPhysicalDeviceExternalImageFormatInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagBits);
 }
 
 void reservedmarshal_VkExternalImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkExternalMemoryProperties(vkStream, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExternalMemoryProperties(vkStream, rootType, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceExternalBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBufferCreateFlags*)&forMarshaling->flags, sizeof(VkBufferCreateFlags));
     *ptr += sizeof(VkBufferCreateFlags);
     memcpy(*ptr, (VkBufferUsageFlags*)&forMarshaling->usage, sizeof(VkBufferUsageFlags));
@@ -3854,25 +4582,37 @@
 
 void reservedmarshal_VkExternalBufferProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalBufferProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkExternalMemoryProperties(vkStream, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExternalMemoryProperties(vkStream, rootType, (VkExternalMemoryProperties*)(&forMarshaling->externalMemoryProperties), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceIDProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint8_t*)forMarshaling->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     *ptr += VK_UUID_SIZE * sizeof(uint8_t);
     memcpy(*ptr, (uint8_t*)forMarshaling->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
@@ -3887,65 +4627,95 @@
 
 void reservedmarshal_VkExternalMemoryImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlags);
 }
 
 void reservedmarshal_VkExternalMemoryBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlags);
 }
 
 void reservedmarshal_VkExportMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlags));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlags);
 }
 
 void reservedmarshal_VkPhysicalDeviceExternalFenceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalFenceHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalFenceHandleTypeFlagBits));
     *ptr += sizeof(VkExternalFenceHandleTypeFlagBits);
 }
 
 void reservedmarshal_VkExternalFenceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFenceProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalFenceHandleTypeFlags*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalFenceHandleTypeFlags));
     *ptr += sizeof(VkExternalFenceHandleTypeFlags);
     memcpy(*ptr, (VkExternalFenceHandleTypeFlags*)&forMarshaling->compatibleHandleTypes, sizeof(VkExternalFenceHandleTypeFlags));
@@ -3956,52 +4726,76 @@
 
 void reservedmarshal_VkExportFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalFenceHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalFenceHandleTypeFlags));
     *ptr += sizeof(VkExternalFenceHandleTypeFlags);
 }
 
 void reservedmarshal_VkExportSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalSemaphoreHandleTypeFlags*)&forMarshaling->handleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
     *ptr += sizeof(VkExternalSemaphoreHandleTypeFlags);
 }
 
 void reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalSemaphoreHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalSemaphoreHandleTypeFlagBits));
     *ptr += sizeof(VkExternalSemaphoreHandleTypeFlagBits);
 }
 
 void reservedmarshal_VkExternalSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalSemaphoreHandleTypeFlags*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
     *ptr += sizeof(VkExternalSemaphoreHandleTypeFlags);
     memcpy(*ptr, (VkExternalSemaphoreHandleTypeFlags*)&forMarshaling->compatibleHandleTypes, sizeof(VkExternalSemaphoreHandleTypeFlags));
@@ -4012,13 +4806,19 @@
 
 void reservedmarshal_VkPhysicalDeviceMaintenance3Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxPerSetDescriptors, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->maxMemoryAllocationSize, sizeof(VkDeviceSize));
@@ -4027,26 +4827,38 @@
 
 void reservedmarshal_VkDescriptorSetLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->supported, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderDrawParameters, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -4055,13 +4867,19 @@
 #ifdef VK_VERSION_1_2
 void reservedmarshal_VkPhysicalDeviceVulkan11Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->storageBuffer16BitAccess, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->uniformAndStorageBuffer16BitAccess, sizeof(VkBool32));
@@ -4090,13 +4908,19 @@
 
 void reservedmarshal_VkPhysicalDeviceVulkan11Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint8_t*)forMarshaling->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
     *ptr += VK_UUID_SIZE * sizeof(uint8_t);
     memcpy(*ptr, (uint8_t*)forMarshaling->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
@@ -4131,13 +4955,19 @@
 
 void reservedmarshal_VkPhysicalDeviceVulkan12Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->samplerMirrorClampToEdge, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->drawIndirectCount, sizeof(VkBool32));
@@ -4236,10 +5066,12 @@
 
 void reservedmarshal_VkConformanceVersion(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConformanceVersion* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint8_t*)&forMarshaling->major, sizeof(uint8_t));
     *ptr += sizeof(uint8_t);
     memcpy(*ptr, (uint8_t*)&forMarshaling->minor, sizeof(uint8_t));
@@ -4252,20 +5084,26 @@
 
 void reservedmarshal_VkPhysicalDeviceVulkan12Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDriverId*)&forMarshaling->driverID, sizeof(VkDriverId));
     *ptr += sizeof(VkDriverId);
     memcpy(*ptr, (char*)forMarshaling->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     *ptr += VK_MAX_DRIVER_NAME_SIZE * sizeof(char);
     memcpy(*ptr, (char*)forMarshaling->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
     *ptr += VK_MAX_DRIVER_INFO_SIZE * sizeof(char);
-    reservedmarshal_VkConformanceVersion(vkStream, (VkConformanceVersion*)(&forMarshaling->conformanceVersion), ptr);
+    reservedmarshal_VkConformanceVersion(vkStream, rootType, (VkConformanceVersion*)(&forMarshaling->conformanceVersion), ptr);
     memcpy(*ptr, (VkShaderFloatControlsIndependence*)&forMarshaling->denormBehaviorIndependence, sizeof(VkShaderFloatControlsIndependence));
     *ptr += sizeof(VkShaderFloatControlsIndependence);
     memcpy(*ptr, (VkShaderFloatControlsIndependence*)&forMarshaling->roundingModeIndependence, sizeof(VkShaderFloatControlsIndependence));
@@ -4366,13 +5204,19 @@
 
 void reservedmarshal_VkImageFormatListCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->viewFormatCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const VkFormat*)forMarshaling->pViewFormats, forMarshaling->viewFormatCount * sizeof(const VkFormat));
@@ -4381,13 +5225,19 @@
 
 void reservedmarshal_VkAttachmentDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAttachmentDescriptionFlags*)&forMarshaling->flags, sizeof(VkAttachmentDescriptionFlags));
     *ptr += sizeof(VkAttachmentDescriptionFlags);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
@@ -4410,13 +5260,19 @@
 
 void reservedmarshal_VkAttachmentReference2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachment, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkImageLayout*)&forMarshaling->layout, sizeof(VkImageLayout));
@@ -4427,13 +5283,19 @@
 
 void reservedmarshal_VkSubpassDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSubpassDescriptionFlags*)&forMarshaling->flags, sizeof(VkSubpassDescriptionFlags));
     *ptr += sizeof(VkSubpassDescriptionFlags);
     memcpy(*ptr, (VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
@@ -4444,13 +5306,13 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->inputAttachmentCount; ++i)
     {
-        reservedmarshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pInputAttachments + i), ptr);
+        reservedmarshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pInputAttachments + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->colorAttachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
     {
-        reservedmarshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pColorAttachments + i), ptr);
+        reservedmarshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pColorAttachments + i), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pResolveAttachments;
@@ -4461,7 +5323,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->colorAttachmentCount; ++i)
         {
-            reservedmarshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pResolveAttachments + i), ptr);
+            reservedmarshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pResolveAttachments + i), ptr);
         }
     }
     // WARNING PTR CHECK
@@ -4471,7 +5333,7 @@
     *ptr += 8;
     if (forMarshaling->pDepthStencilAttachment)
     {
-        reservedmarshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilAttachment), ptr);
+        reservedmarshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilAttachment), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->preserveAttachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -4481,13 +5343,19 @@
 
 void reservedmarshal_VkSubpassDependency2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->srcSubpass, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->dstSubpass, sizeof(uint32_t));
@@ -4508,32 +5376,38 @@
 
 void reservedmarshal_VkRenderPassCreateInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkRenderPassCreateFlags*)&forMarshaling->flags, sizeof(VkRenderPassCreateFlags));
     *ptr += sizeof(VkRenderPassCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentCount; ++i)
     {
-        reservedmarshal_VkAttachmentDescription2(vkStream, (const VkAttachmentDescription2*)(forMarshaling->pAttachments + i), ptr);
+        reservedmarshal_VkAttachmentDescription2(vkStream, rootType, (const VkAttachmentDescription2*)(forMarshaling->pAttachments + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->subpassCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->subpassCount; ++i)
     {
-        reservedmarshal_VkSubpassDescription2(vkStream, (const VkSubpassDescription2*)(forMarshaling->pSubpasses + i), ptr);
+        reservedmarshal_VkSubpassDescription2(vkStream, rootType, (const VkSubpassDescription2*)(forMarshaling->pSubpasses + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->dependencyCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->dependencyCount; ++i)
     {
-        reservedmarshal_VkSubpassDependency2(vkStream, (const VkSubpassDependency2*)(forMarshaling->pDependencies + i), ptr);
+        reservedmarshal_VkSubpassDependency2(vkStream, rootType, (const VkSubpassDependency2*)(forMarshaling->pDependencies + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->correlatedViewMaskCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -4543,37 +5417,55 @@
 
 void reservedmarshal_VkSubpassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSubpassContents*)&forMarshaling->contents, sizeof(VkSubpassContents));
     *ptr += sizeof(VkSubpassContents);
 }
 
 void reservedmarshal_VkSubpassEndInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassEndInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
 }
 
 void reservedmarshal_VkPhysicalDevice8BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->storageBuffer8BitAccess, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->uniformAndStorageBuffer8BitAccess, sizeof(VkBool32));
@@ -4584,31 +5476,43 @@
 
 void reservedmarshal_VkPhysicalDeviceDriverProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDriverId*)&forMarshaling->driverID, sizeof(VkDriverId));
     *ptr += sizeof(VkDriverId);
     memcpy(*ptr, (char*)forMarshaling->driverName, VK_MAX_DRIVER_NAME_SIZE * sizeof(char));
     *ptr += VK_MAX_DRIVER_NAME_SIZE * sizeof(char);
     memcpy(*ptr, (char*)forMarshaling->driverInfo, VK_MAX_DRIVER_INFO_SIZE * sizeof(char));
     *ptr += VK_MAX_DRIVER_INFO_SIZE * sizeof(char);
-    reservedmarshal_VkConformanceVersion(vkStream, (VkConformanceVersion*)(&forMarshaling->conformanceVersion), ptr);
+    reservedmarshal_VkConformanceVersion(vkStream, rootType, (VkConformanceVersion*)(&forMarshaling->conformanceVersion), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceShaderAtomicInt64Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderBufferInt64Atomics, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderSharedInt64Atomics, sizeof(VkBool32));
@@ -4617,13 +5521,19 @@
 
 void reservedmarshal_VkPhysicalDeviceShaderFloat16Int8Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderFloat16, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderInt8, sizeof(VkBool32));
@@ -4632,13 +5542,19 @@
 
 void reservedmarshal_VkPhysicalDeviceFloatControlsProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkShaderFloatControlsIndependence*)&forMarshaling->denormBehaviorIndependence, sizeof(VkShaderFloatControlsIndependence));
     *ptr += sizeof(VkShaderFloatControlsIndependence);
     memcpy(*ptr, (VkShaderFloatControlsIndependence*)&forMarshaling->roundingModeIndependence, sizeof(VkShaderFloatControlsIndependence));
@@ -4677,13 +5593,19 @@
 
 void reservedmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->bindingCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -4700,13 +5622,19 @@
 
 void reservedmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderInputAttachmentArrayDynamicIndexing, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderUniformTexelBufferArrayDynamicIndexing, sizeof(VkBool32));
@@ -4751,13 +5679,19 @@
 
 void reservedmarshal_VkPhysicalDeviceDescriptorIndexingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxUpdateAfterBindDescriptorsInAllPools, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderUniformBufferArrayNonUniformIndexingNative, sizeof(VkBool32));
@@ -4808,13 +5742,19 @@
 
 void reservedmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->descriptorSetCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint32_t*)forMarshaling->pDescriptorCounts, forMarshaling->descriptorSetCount * sizeof(const uint32_t));
@@ -4823,26 +5763,38 @@
 
 void reservedmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxVariableDescriptorCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkSubpassDescriptionDepthStencilResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkResolveModeFlagBits*)&forMarshaling->depthResolveMode, sizeof(VkResolveModeFlagBits));
     *ptr += sizeof(VkResolveModeFlagBits);
     memcpy(*ptr, (VkResolveModeFlagBits*)&forMarshaling->stencilResolveMode, sizeof(VkResolveModeFlagBits));
@@ -4854,19 +5806,25 @@
     *ptr += 8;
     if (forMarshaling->pDepthStencilResolveAttachment)
     {
-        reservedmarshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilResolveAttachment), ptr);
+        reservedmarshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pDepthStencilResolveAttachment), ptr);
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceDepthStencilResolveProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkResolveModeFlags*)&forMarshaling->supportedDepthResolveModes, sizeof(VkResolveModeFlags));
     *ptr += sizeof(VkResolveModeFlags);
     memcpy(*ptr, (VkResolveModeFlags*)&forMarshaling->supportedStencilResolveModes, sizeof(VkResolveModeFlags));
@@ -4879,52 +5837,76 @@
 
 void reservedmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->scalarBlockLayout, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkImageStencilUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageUsageFlags*)&forMarshaling->stencilUsage, sizeof(VkImageUsageFlags));
     *ptr += sizeof(VkImageUsageFlags);
 }
 
 void reservedmarshal_VkSamplerReductionModeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSamplerReductionMode*)&forMarshaling->reductionMode, sizeof(VkSamplerReductionMode));
     *ptr += sizeof(VkSamplerReductionMode);
 }
 
 void reservedmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->filterMinmaxSingleComponentFormats, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->filterMinmaxImageComponentMapping, sizeof(VkBool32));
@@ -4933,13 +5915,19 @@
 
 void reservedmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->vulkanMemoryModel, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->vulkanMemoryModelDeviceScope, sizeof(VkBool32));
@@ -4950,26 +5938,38 @@
 
 void reservedmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->imagelessFramebuffer, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkFramebufferAttachmentImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageCreateFlags*)&forMarshaling->flags, sizeof(VkImageCreateFlags));
     *ptr += sizeof(VkImageCreateFlags);
     memcpy(*ptr, (VkImageUsageFlags*)&forMarshaling->usage, sizeof(VkImageUsageFlags));
@@ -4988,30 +5988,42 @@
 
 void reservedmarshal_VkFramebufferAttachmentsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachmentImageInfoCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentImageInfoCount; ++i)
     {
-        reservedmarshal_VkFramebufferAttachmentImageInfo(vkStream, (const VkFramebufferAttachmentImageInfo*)(forMarshaling->pAttachmentImageInfos + i), ptr);
+        reservedmarshal_VkFramebufferAttachmentImageInfo(vkStream, rootType, (const VkFramebufferAttachmentImageInfo*)(forMarshaling->pAttachmentImageInfos + i), ptr);
     }
 }
 
 void reservedmarshal_VkRenderPassAttachmentBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachmentCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->attachmentCount)
@@ -5031,65 +6043,95 @@
 
 void reservedmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->uniformBufferStandardLayout, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderSubgroupExtendedTypes, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->separateDepthStencilLayouts, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkAttachmentReferenceStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageLayout*)&forMarshaling->stencilLayout, sizeof(VkImageLayout));
     *ptr += sizeof(VkImageLayout);
 }
 
 void reservedmarshal_VkAttachmentDescriptionStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageLayout*)&forMarshaling->stencilInitialLayout, sizeof(VkImageLayout));
     *ptr += sizeof(VkImageLayout);
     memcpy(*ptr, (VkImageLayout*)&forMarshaling->stencilFinalLayout, sizeof(VkImageLayout));
@@ -5098,52 +6140,76 @@
 
 void reservedmarshal_VkPhysicalDeviceHostQueryResetFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->hostQueryReset, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->timelineSemaphore, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->maxTimelineSemaphoreValueDifference, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
 
 void reservedmarshal_VkSemaphoreTypeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSemaphoreType*)&forMarshaling->semaphoreType, sizeof(VkSemaphoreType));
     *ptr += sizeof(VkSemaphoreType);
     memcpy(*ptr, (uint64_t*)&forMarshaling->initialValue, sizeof(uint64_t));
@@ -5152,13 +6218,19 @@
 
 void reservedmarshal_VkTimelineSemaphoreSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->waitSemaphoreValueCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -5187,13 +6259,19 @@
 
 void reservedmarshal_VkSemaphoreWaitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSemaphoreWaitFlags*)&forMarshaling->flags, sizeof(VkSemaphoreWaitFlags));
     *ptr += sizeof(VkSemaphoreWaitFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->semaphoreCount, sizeof(uint32_t));
@@ -5217,13 +6295,19 @@
 
 void reservedmarshal_VkSemaphoreSignalInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSemaphore((*&forMarshaling->semaphore));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5234,13 +6318,19 @@
 
 void reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->bufferDeviceAddress, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->bufferDeviceAddressCaptureReplay, sizeof(VkBool32));
@@ -5251,13 +6341,19 @@
 
 void reservedmarshal_VkBufferDeviceAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5266,39 +6362,57 @@
 
 void reservedmarshal_VkBufferOpaqueCaptureAddressCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->opaqueCaptureAddress, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
 
 void reservedmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->opaqueCaptureAddress, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
 
 void reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDeviceMemory((*&forMarshaling->memory));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5309,17 +6423,19 @@
 #ifdef VK_KHR_surface
 void reservedmarshal_VkSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->minImageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxImageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->currentExtent), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minImageExtent), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxImageExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->currentExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minImageExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxImageExtent), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxImageArrayLayers, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkSurfaceTransformFlagsKHR*)&forMarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
@@ -5334,10 +6450,12 @@
 
 void reservedmarshal_VkSurfaceFormatKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
     memcpy(*ptr, (VkColorSpaceKHR*)&forMarshaling->colorSpace, sizeof(VkColorSpaceKHR));
@@ -5348,13 +6466,19 @@
 #ifdef VK_KHR_swapchain
 void reservedmarshal_VkSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSwapchainCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkSwapchainCreateFlagsKHR));
     *ptr += sizeof(VkSwapchainCreateFlagsKHR);
     uint64_t cgen_var_0;
@@ -5367,7 +6491,7 @@
     *ptr += sizeof(VkFormat);
     memcpy(*ptr, (VkColorSpaceKHR*)&forMarshaling->imageColorSpace, sizeof(VkColorSpaceKHR));
     *ptr += sizeof(VkColorSpaceKHR);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->imageExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->imageExtent), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->imageArrayLayers, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkImageUsageFlags*)&forMarshaling->imageUsage, sizeof(VkImageUsageFlags));
@@ -5402,13 +6526,19 @@
 
 void reservedmarshal_VkPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->waitSemaphoreCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->waitSemaphoreCount)
@@ -5455,13 +6585,19 @@
 
 void reservedmarshal_VkImageSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSwapchainKHR((*&forMarshaling->swapchain));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5470,13 +6606,19 @@
 
 void reservedmarshal_VkBindImageMemorySwapchainInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSwapchainKHR((*&forMarshaling->swapchain));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5487,13 +6629,19 @@
 
 void reservedmarshal_VkAcquireNextImageInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSwapchainKHR((*&forMarshaling->swapchain));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5514,13 +6662,19 @@
 
 void reservedmarshal_VkDeviceGroupPresentCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)forMarshaling->presentMask, VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t));
     *ptr += VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t);
     memcpy(*ptr, (VkDeviceGroupPresentModeFlagsKHR*)&forMarshaling->modes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
@@ -5529,13 +6683,19 @@
 
 void reservedmarshal_VkDeviceGroupPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->swapchainCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint32_t*)forMarshaling->pDeviceMasks, forMarshaling->swapchainCount * sizeof(const uint32_t));
@@ -5546,13 +6706,19 @@
 
 void reservedmarshal_VkDeviceGroupSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceGroupPresentModeFlagsKHR*)&forMarshaling->modes, sizeof(VkDeviceGroupPresentModeFlagsKHR));
     *ptr += sizeof(VkDeviceGroupPresentModeFlagsKHR);
 }
@@ -5561,66 +6727,80 @@
 #ifdef VK_KHR_display
 void reservedmarshal_VkDisplayModeParametersKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->visibleRegion), ptr);
+    (void)rootType;
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->visibleRegion), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->refreshRate, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkDisplayModeCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDisplayModeCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkDisplayModeCreateFlagsKHR));
     *ptr += sizeof(VkDisplayModeCreateFlagsKHR);
-    reservedmarshal_VkDisplayModeParametersKHR(vkStream, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters), ptr);
+    reservedmarshal_VkDisplayModeParametersKHR(vkStream, rootType, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters), ptr);
 }
 
 void reservedmarshal_VkDisplayModePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDisplayModeKHR((*&forMarshaling->displayMode));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
     *ptr += 1 * 8;
-    reservedmarshal_VkDisplayModeParametersKHR(vkStream, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters), ptr);
+    reservedmarshal_VkDisplayModeParametersKHR(vkStream, rootType, (VkDisplayModeParametersKHR*)(&forMarshaling->parameters), ptr);
 }
 
 void reservedmarshal_VkDisplayPlaneCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDisplayPlaneAlphaFlagsKHR*)&forMarshaling->supportedAlpha, sizeof(VkDisplayPlaneAlphaFlagsKHR));
     *ptr += sizeof(VkDisplayPlaneAlphaFlagsKHR);
-    reservedmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->minSrcPosition), ptr);
-    reservedmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->maxSrcPosition), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minSrcExtent), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxSrcExtent), ptr);
-    reservedmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->minDstPosition), ptr);
-    reservedmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->maxDstPosition), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minDstExtent), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxDstExtent), ptr);
+    reservedmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->minSrcPosition), ptr);
+    reservedmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->maxSrcPosition), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minSrcExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxSrcExtent), ptr);
+    reservedmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->minDstPosition), ptr);
+    reservedmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->maxDstPosition), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minDstExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxDstExtent), ptr);
 }
 
 void reservedmarshal_VkDisplayPlanePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDisplayKHR((*&forMarshaling->currentDisplay));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5631,10 +6811,12 @@
 
 void reservedmarshal_VkDisplayPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDisplayKHR((*&forMarshaling->display));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5647,8 +6829,8 @@
         memcpy(*ptr, (char*)forMarshaling->displayName, l);
         *ptr += l;
     }
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->physicalDimensions), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->physicalResolution), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->physicalDimensions), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->physicalResolution), ptr);
     memcpy(*ptr, (VkSurfaceTransformFlagsKHR*)&forMarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
     *ptr += sizeof(VkSurfaceTransformFlagsKHR);
     memcpy(*ptr, (VkBool32*)&forMarshaling->planeReorderPossible, sizeof(VkBool32));
@@ -5659,13 +6841,19 @@
 
 void reservedmarshal_VkDisplaySurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDisplaySurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkDisplaySurfaceCreateFlagsKHR));
     *ptr += sizeof(VkDisplaySurfaceCreateFlagsKHR);
     uint64_t cgen_var_0;
@@ -5682,22 +6870,28 @@
     *ptr += sizeof(float);
     memcpy(*ptr, (VkDisplayPlaneAlphaFlagBitsKHR*)&forMarshaling->alphaMode, sizeof(VkDisplayPlaneAlphaFlagBitsKHR));
     *ptr += sizeof(VkDisplayPlaneAlphaFlagBitsKHR);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->imageExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->imageExtent), ptr);
 }
 
 #endif
 #ifdef VK_KHR_display_swapchain
 void reservedmarshal_VkDisplayPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->srcRect), ptr);
-    reservedmarshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->dstRect), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->srcRect), ptr);
+    reservedmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->dstRect), ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->persistent, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -5706,13 +6900,19 @@
 #ifdef VK_KHR_xlib_surface
 void reservedmarshal_VkXlibSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkXlibSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkXlibSurfaceCreateFlagsKHR));
     *ptr += sizeof(VkXlibSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
@@ -5733,13 +6933,19 @@
 #ifdef VK_KHR_xcb_surface
 void reservedmarshal_VkXcbSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkXcbSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkXcbSurfaceCreateFlagsKHR));
     *ptr += sizeof(VkXcbSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
@@ -5760,13 +6966,19 @@
 #ifdef VK_KHR_wayland_surface
 void reservedmarshal_VkWaylandSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkWaylandSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkWaylandSurfaceCreateFlagsKHR));
     *ptr += sizeof(VkWaylandSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
@@ -5795,13 +7007,19 @@
 #ifdef VK_KHR_android_surface
 void reservedmarshal_VkAndroidSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAndroidSurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkAndroidSurfaceCreateFlagsKHR));
     *ptr += sizeof(VkAndroidSurfaceCreateFlagsKHR);
     // WARNING PTR CHECK
@@ -5820,13 +7038,19 @@
 #ifdef VK_KHR_win32_surface
 void reservedmarshal_VkWin32SurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkWin32SurfaceCreateFlagsKHR*)&forMarshaling->flags, sizeof(VkWin32SurfaceCreateFlagsKHR));
     *ptr += sizeof(VkWin32SurfaceCreateFlagsKHR);
     memcpy(*ptr, (HINSTANCE*)&forMarshaling->hinstance, sizeof(HINSTANCE));
@@ -5857,13 +7081,19 @@
 #ifdef VK_KHR_external_memory_win32
 void reservedmarshal_VkImportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagBits);
     memcpy(*ptr, (HANDLE*)&forMarshaling->handle, sizeof(HANDLE));
@@ -5874,13 +7104,19 @@
 
 void reservedmarshal_VkExportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -5899,26 +7135,38 @@
 
 void reservedmarshal_VkMemoryWin32HandlePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkMemoryGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDeviceMemory((*&forMarshaling->memory));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5931,13 +7179,19 @@
 #ifdef VK_KHR_external_memory_fd
 void reservedmarshal_VkImportMemoryFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagBits);
     memcpy(*ptr, (int*)&forMarshaling->fd, sizeof(int));
@@ -5946,26 +7200,38 @@
 
 void reservedmarshal_VkMemoryFdPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkMemoryGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDeviceMemory((*&forMarshaling->memory));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -5978,13 +7244,19 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->acquireCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->acquireCount)
@@ -6031,13 +7303,19 @@
 #ifdef VK_KHR_external_semaphore_win32
 void reservedmarshal_VkImportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSemaphore((*&forMarshaling->semaphore));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6054,13 +7332,19 @@
 
 void reservedmarshal_VkExportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -6079,13 +7363,19 @@
 
 void reservedmarshal_VkD3D12FenceSubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->waitSemaphoreValuesCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -6114,13 +7404,19 @@
 
 void reservedmarshal_VkSemaphoreGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSemaphore((*&forMarshaling->semaphore));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6133,13 +7429,19 @@
 #ifdef VK_KHR_external_semaphore_fd
 void reservedmarshal_VkImportSemaphoreFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSemaphore((*&forMarshaling->semaphore));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6154,13 +7456,19 @@
 
 void reservedmarshal_VkSemaphoreGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSemaphore((*&forMarshaling->semaphore));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6173,13 +7481,19 @@
 #ifdef VK_KHR_push_descriptor
 void reservedmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxPushDescriptors, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
@@ -6192,22 +7506,26 @@
 #ifdef VK_KHR_incremental_present
 void reservedmarshal_VkRectLayerKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRectLayerKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkOffset2D(vkStream, (VkOffset2D*)(&forMarshaling->offset), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->extent), ptr);
+    (void)rootType;
+    reservedmarshal_VkOffset2D(vkStream, rootType, (VkOffset2D*)(&forMarshaling->offset), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->extent), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->layer, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPresentRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->rectangleCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -6219,20 +7537,26 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->rectangleCount; ++i)
         {
-            reservedmarshal_VkRectLayerKHR(vkStream, (const VkRectLayerKHR*)(forMarshaling->pRectangles + i), ptr);
+            reservedmarshal_VkRectLayerKHR(vkStream, rootType, (const VkRectLayerKHR*)(forMarshaling->pRectangles + i), ptr);
         }
     }
 }
 
 void reservedmarshal_VkPresentRegionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->swapchainCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -6244,7 +7568,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->swapchainCount; ++i)
         {
-            reservedmarshal_VkPresentRegionKHR(vkStream, (const VkPresentRegionKHR*)(forMarshaling->pRegions + i), ptr);
+            reservedmarshal_VkPresentRegionKHR(vkStream, rootType, (const VkPresentRegionKHR*)(forMarshaling->pRegions + i), ptr);
         }
     }
 }
@@ -6259,13 +7583,19 @@
 #ifdef VK_KHR_shared_presentable_image
 void reservedmarshal_VkSharedPresentSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageUsageFlags*)&forMarshaling->sharedPresentSupportedUsageFlags, sizeof(VkImageUsageFlags));
     *ptr += sizeof(VkImageUsageFlags);
 }
@@ -6278,13 +7608,19 @@
 #ifdef VK_KHR_external_fence_win32
 void reservedmarshal_VkImportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkFence((*&forMarshaling->fence));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6301,13 +7637,19 @@
 
 void reservedmarshal_VkExportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -6326,13 +7668,19 @@
 
 void reservedmarshal_VkFenceGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkFence((*&forMarshaling->fence));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6345,13 +7693,19 @@
 #ifdef VK_KHR_external_fence_fd
 void reservedmarshal_VkImportFenceFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkFence((*&forMarshaling->fence));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6366,13 +7720,19 @@
 
 void reservedmarshal_VkFenceGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkFence((*&forMarshaling->fence));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6385,13 +7745,19 @@
 #ifdef VK_KHR_performance_query
 void reservedmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->performanceCounterQueryPools, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->performanceCounterMultipleQueryPools, sizeof(VkBool32));
@@ -6400,26 +7766,38 @@
 
 void reservedmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->allowCommandBufferQueryCopies, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPerformanceCounterKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPerformanceCounterUnitKHR*)&forMarshaling->unit, sizeof(VkPerformanceCounterUnitKHR));
     *ptr += sizeof(VkPerformanceCounterUnitKHR);
     memcpy(*ptr, (VkPerformanceCounterScopeKHR*)&forMarshaling->scope, sizeof(VkPerformanceCounterScopeKHR));
@@ -6432,13 +7810,19 @@
 
 void reservedmarshal_VkPerformanceCounterDescriptionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPerformanceCounterDescriptionFlagsKHR*)&forMarshaling->flags, sizeof(VkPerformanceCounterDescriptionFlagsKHR));
     *ptr += sizeof(VkPerformanceCounterDescriptionFlagsKHR);
     memcpy(*ptr, (char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -6451,13 +7835,19 @@
 
 void reservedmarshal_VkQueryPoolPerformanceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->queueFamilyIndex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->counterIndexCount, sizeof(uint32_t));
@@ -6468,23 +7858,31 @@
 
 void reservedmarshal_VkPerformanceCounterResultKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (int32_t*)&forMarshaling->int32, sizeof(int32_t));
     *ptr += sizeof(int32_t);
 }
 
 void reservedmarshal_VkAcquireProfilingLockInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAcquireProfilingLockFlagsKHR*)&forMarshaling->flags, sizeof(VkAcquireProfilingLockFlagsKHR));
     *ptr += sizeof(VkAcquireProfilingLockFlagsKHR);
     memcpy(*ptr, (uint64_t*)&forMarshaling->timeout, sizeof(uint64_t));
@@ -6493,13 +7891,19 @@
 
 void reservedmarshal_VkPerformanceQuerySubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->counterPassIndex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
@@ -6510,13 +7914,19 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkSurfaceKHR((*&forMarshaling->surface));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6525,26 +7935,38 @@
 
 void reservedmarshal_VkSurfaceCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkSurfaceCapabilitiesKHR(vkStream, (VkSurfaceCapabilitiesKHR*)(&forMarshaling->surfaceCapabilities), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkSurfaceCapabilitiesKHR(vkStream, rootType, (VkSurfaceCapabilitiesKHR*)(&forMarshaling->surfaceCapabilities), ptr);
 }
 
 void reservedmarshal_VkSurfaceFormat2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkSurfaceFormatKHR(vkStream, (VkSurfaceFormatKHR*)(&forMarshaling->surfaceFormat), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkSurfaceFormatKHR(vkStream, rootType, (VkSurfaceFormatKHR*)(&forMarshaling->surfaceFormat), ptr);
 }
 
 #endif
@@ -6553,49 +7975,73 @@
 #ifdef VK_KHR_get_display_properties2
 void reservedmarshal_VkDisplayProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkDisplayPropertiesKHR(vkStream, (VkDisplayPropertiesKHR*)(&forMarshaling->displayProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkDisplayPropertiesKHR(vkStream, rootType, (VkDisplayPropertiesKHR*)(&forMarshaling->displayProperties), ptr);
 }
 
 void reservedmarshal_VkDisplayPlaneProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkDisplayPlanePropertiesKHR(vkStream, (VkDisplayPlanePropertiesKHR*)(&forMarshaling->displayPlaneProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkDisplayPlanePropertiesKHR(vkStream, rootType, (VkDisplayPlanePropertiesKHR*)(&forMarshaling->displayPlaneProperties), ptr);
 }
 
 void reservedmarshal_VkDisplayModeProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkDisplayModePropertiesKHR(vkStream, (VkDisplayModePropertiesKHR*)(&forMarshaling->displayModeProperties), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkDisplayModePropertiesKHR(vkStream, rootType, (VkDisplayModePropertiesKHR*)(&forMarshaling->displayModeProperties), ptr);
 }
 
 void reservedmarshal_VkDisplayPlaneInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDisplayModeKHR((*&forMarshaling->mode));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6606,14 +8052,20 @@
 
 void reservedmarshal_VkDisplayPlaneCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkDisplayPlaneCapabilitiesKHR(vkStream, (VkDisplayPlaneCapabilitiesKHR*)(&forMarshaling->capabilities), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkDisplayPlaneCapabilitiesKHR(vkStream, rootType, (VkDisplayPlaneCapabilitiesKHR*)(&forMarshaling->capabilities), ptr);
 }
 
 #endif
@@ -6634,13 +8086,19 @@
 #ifdef VK_KHR_portability_subset
 void reservedmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->constantAlphaColorBlendFactors, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->events, sizeof(VkBool32));
@@ -6675,13 +8133,19 @@
 
 void reservedmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->minVertexInputBindingStrideAlignment, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
@@ -6700,13 +8164,19 @@
 #ifdef VK_KHR_shader_clock
 void reservedmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderSubgroupClock, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderDeviceClock, sizeof(VkBool32));
@@ -6729,13 +8199,19 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void reservedmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderTerminateInvocation, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -6744,40 +8220,58 @@
 #ifdef VK_KHR_fragment_shading_rate
 void reservedmarshal_VkFragmentShadingRateAttachmentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkAttachmentReference2(vkStream, (const VkAttachmentReference2*)(forMarshaling->pFragmentShadingRateAttachment), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->shadingRateAttachmentTexelSize), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkAttachmentReference2(vkStream, rootType, (const VkAttachmentReference2*)(forMarshaling->pFragmentShadingRateAttachment), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->shadingRateAttachmentTexelSize), ptr);
 }
 
 void reservedmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->fragmentSize), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->fragmentSize), ptr);
     memcpy(*ptr, (VkFragmentShadingRateCombinerOpKHR*)forMarshaling->combinerOps, 2 * sizeof(VkFragmentShadingRateCombinerOpKHR));
     *ptr += 2 * sizeof(VkFragmentShadingRateCombinerOpKHR);
 }
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->pipelineFragmentShadingRate, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->primitiveFragmentShadingRate, sizeof(VkBool32));
@@ -6788,15 +8282,21 @@
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minFragmentShadingRateAttachmentTexelSize), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxFragmentShadingRateAttachmentTexelSize), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minFragmentShadingRateAttachmentTexelSize), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxFragmentShadingRateAttachmentTexelSize), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxFragmentShadingRateAttachmentTexelSizeAspectRatio, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkBool32*)&forMarshaling->primitiveFragmentShadingRateWithMultipleViewports, sizeof(VkBool32));
@@ -6805,7 +8305,7 @@
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentShadingRateNonTrivialCombinerOps, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxFragmentSize), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxFragmentSize), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxFragmentSizeAspectRatio, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxFragmentShadingRateCoverageSamples, sizeof(uint32_t));
@@ -6830,16 +8330,22 @@
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSampleCountFlags*)&forMarshaling->sampleCounts, sizeof(VkSampleCountFlags));
     *ptr += sizeof(VkSampleCountFlags);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->fragmentSize), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->fragmentSize), ptr);
 }
 
 #endif
@@ -6848,13 +8354,19 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void reservedmarshal_VkSurfaceProtectedCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->supportsProtected, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -6871,26 +8383,38 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void reservedmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->pipelineExecutableInfo, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPipelineInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkPipeline((*&forMarshaling->pipeline));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6899,13 +8423,19 @@
 
 void reservedmarshal_VkPipelineExecutablePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkShaderStageFlags*)&forMarshaling->stages, sizeof(VkShaderStageFlags));
     *ptr += sizeof(VkShaderStageFlags);
     memcpy(*ptr, (char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -6918,13 +8448,19 @@
 
 void reservedmarshal_VkPipelineExecutableInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkPipeline((*&forMarshaling->pipeline));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -6935,41 +8471,55 @@
 
 void reservedmarshal_VkPipelineExecutableStatisticValueKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkBool32*)&forMarshaling->b32, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPipelineExecutableStatisticKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     *ptr += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     memcpy(*ptr, (char*)forMarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     *ptr += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     memcpy(*ptr, (VkPipelineExecutableStatisticFormatKHR*)&forMarshaling->format, sizeof(VkPipelineExecutableStatisticFormatKHR));
     *ptr += sizeof(VkPipelineExecutableStatisticFormatKHR);
-    reservedmarshal_VkPipelineExecutableStatisticValueKHR(vkStream, (VkPipelineExecutableStatisticValueKHR*)(&forMarshaling->value), ptr);
+    reservedmarshal_VkPipelineExecutableStatisticValueKHR(vkStream, rootType, (VkPipelineExecutableStatisticValueKHR*)(&forMarshaling->value), ptr);
 }
 
 void reservedmarshal_VkPipelineExecutableInternalRepresentationKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (char*)forMarshaling->name, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
     *ptr += VK_MAX_DESCRIPTION_SIZE * sizeof(char);
     memcpy(*ptr, (char*)forMarshaling->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
@@ -6996,13 +8546,19 @@
 #ifdef VK_KHR_pipeline_library
 void reservedmarshal_VkPipelineLibraryCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->libraryCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->libraryCount)
@@ -7026,13 +8582,19 @@
 #ifdef VK_KHR_copy_commands2
 void reservedmarshal_VkBufferCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->srcOffset, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->dstOffset, sizeof(VkDeviceSize));
@@ -7043,13 +8605,19 @@
 
 void reservedmarshal_VkCopyBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->srcBuffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7062,35 +8630,47 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
     {
-        reservedmarshal_VkBufferCopy2KHR(vkStream, (const VkBufferCopy2KHR*)(forMarshaling->pRegions + i), ptr);
+        reservedmarshal_VkBufferCopy2KHR(vkStream, rootType, (const VkBufferCopy2KHR*)(forMarshaling->pRegions + i), ptr);
     }
 }
 
 void reservedmarshal_VkImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent), ptr);
 }
 
 void reservedmarshal_VkCopyImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->srcImage));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7107,39 +8687,51 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
     {
-        reservedmarshal_VkImageCopy2KHR(vkStream, (const VkImageCopy2KHR*)(forMarshaling->pRegions + i), ptr);
+        reservedmarshal_VkImageCopy2KHR(vkStream, rootType, (const VkImageCopy2KHR*)(forMarshaling->pRegions + i), ptr);
     }
 }
 
 void reservedmarshal_VkBufferImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->bufferOffset, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (uint32_t*)&forMarshaling->bufferRowLength, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->bufferImageHeight, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->imageOffset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->imageExtent), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->imageOffset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageExtent), ptr);
 }
 
 void reservedmarshal_VkCopyBufferToImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->srcBuffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7154,19 +8746,25 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
     {
-        reservedmarshal_VkBufferImageCopy2KHR(vkStream, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i), ptr);
+        reservedmarshal_VkBufferImageCopy2KHR(vkStream, rootType, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i), ptr);
     }
 }
 
 void reservedmarshal_VkCopyImageToBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->srcImage));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7181,40 +8779,52 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
     {
-        reservedmarshal_VkBufferImageCopy2KHR(vkStream, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i), ptr);
+        reservedmarshal_VkBufferImageCopy2KHR(vkStream, rootType, (const VkBufferImageCopy2KHR*)(forMarshaling->pRegions + i), ptr);
     }
 }
 
 void reservedmarshal_VkImageBlit2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
-    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
     {
-        reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->srcOffsets + i), ptr);
+        rootType = forMarshaling->sType;
     }
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(forMarshaling->dstOffsets + i), ptr);
+        reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->srcOffsets + i), ptr);
+    }
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    {
+        reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(forMarshaling->dstOffsets + i), ptr);
     }
 }
 
 void reservedmarshal_VkBlitImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->srcImage));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7231,7 +8841,7 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
     {
-        reservedmarshal_VkImageBlit2KHR(vkStream, (const VkImageBlit2KHR*)(forMarshaling->pRegions + i), ptr);
+        reservedmarshal_VkImageBlit2KHR(vkStream, rootType, (const VkImageBlit2KHR*)(forMarshaling->pRegions + i), ptr);
     }
     memcpy(*ptr, (VkFilter*)&forMarshaling->filter, sizeof(VkFilter));
     *ptr += sizeof(VkFilter);
@@ -7239,29 +8849,41 @@
 
 void reservedmarshal_VkImageResolve2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
-    reservedmarshal_VkImageSubresourceLayers(vkStream, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
-    reservedmarshal_VkOffset3D(vkStream, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
-    reservedmarshal_VkExtent3D(vkStream, (VkExtent3D*)(&forMarshaling->extent), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->srcSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->srcOffset), ptr);
+    reservedmarshal_VkImageSubresourceLayers(vkStream, rootType, (VkImageSubresourceLayers*)(&forMarshaling->dstSubresource), ptr);
+    reservedmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->dstOffset), ptr);
+    reservedmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->extent), ptr);
 }
 
 void reservedmarshal_VkResolveImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->srcImage));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7278,7 +8900,7 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i)
     {
-        reservedmarshal_VkImageResolve2KHR(vkStream, (const VkImageResolve2KHR*)(forMarshaling->pRegions + i), ptr);
+        reservedmarshal_VkImageResolve2KHR(vkStream, rootType, (const VkImageResolve2KHR*)(forMarshaling->pRegions + i), ptr);
     }
 }
 
@@ -7286,13 +8908,19 @@
 #ifdef VK_ANDROID_native_buffer
 void reservedmarshal_VkNativeBufferANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->handle;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -7319,13 +8947,19 @@
 #ifdef VK_EXT_debug_report
 void reservedmarshal_VkDebugReportCallbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDebugReportFlagsEXT*)&forMarshaling->flags, sizeof(VkDebugReportFlagsEXT));
     *ptr += sizeof(VkDebugReportFlagsEXT);
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->pfnCallback;
@@ -7354,13 +8988,19 @@
 #ifdef VK_AMD_rasterization_order
 void reservedmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkRasterizationOrderAMD*)&forMarshaling->rasterizationOrder, sizeof(VkRasterizationOrderAMD));
     *ptr += sizeof(VkRasterizationOrderAMD);
 }
@@ -7373,13 +9013,19 @@
 #ifdef VK_EXT_debug_marker
 void reservedmarshal_VkDebugMarkerObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDebugReportObjectTypeEXT*)&forMarshaling->objectType, sizeof(VkDebugReportObjectTypeEXT));
     *ptr += sizeof(VkDebugReportObjectTypeEXT);
     memcpy(*ptr, (uint64_t*)&forMarshaling->object, sizeof(uint64_t));
@@ -7396,13 +9042,19 @@
 
 void reservedmarshal_VkDebugMarkerObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDebugReportObjectTypeEXT*)&forMarshaling->objectType, sizeof(VkDebugReportObjectTypeEXT));
     *ptr += sizeof(VkDebugReportObjectTypeEXT);
     memcpy(*ptr, (uint64_t*)&forMarshaling->object, sizeof(uint64_t));
@@ -7419,13 +9071,19 @@
 
 void reservedmarshal_VkDebugMarkerMarkerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     {
         uint32_t l = forMarshaling->pMarkerName ? strlen(forMarshaling->pMarkerName): 0;
         memcpy(*ptr, (uint32_t*)&l, sizeof(uint32_t));
@@ -7444,39 +9102,57 @@
 #ifdef VK_NV_dedicated_allocation
 void reservedmarshal_VkDedicatedAllocationImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->dedicatedAllocation, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkDedicatedAllocationBufferCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->dedicatedAllocation, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImage((*&forMarshaling->image));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7491,13 +9167,19 @@
 #ifdef VK_EXT_transform_feedback
 void reservedmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->transformFeedback, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->geometryStreams, sizeof(VkBool32));
@@ -7506,13 +9188,19 @@
 
 void reservedmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxTransformFeedbackStreams, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxTransformFeedbackBuffers, sizeof(uint32_t));
@@ -7537,13 +9225,19 @@
 
 void reservedmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineRasterizationStateStreamCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineRasterizationStateStreamCreateFlagsEXT));
     *ptr += sizeof(VkPipelineRasterizationStateStreamCreateFlagsEXT);
     memcpy(*ptr, (uint32_t*)&forMarshaling->rasterizationStream, sizeof(uint32_t));
@@ -7554,13 +9248,19 @@
 #ifdef VK_NVX_image_view_handle
 void reservedmarshal_VkImageViewHandleInfoNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkImageView((*&forMarshaling->imageView));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7575,13 +9275,19 @@
 
 void reservedmarshal_VkImageViewAddressPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
@@ -7600,13 +9306,19 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void reservedmarshal_VkTextureLODGatherFormatPropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->supportsTextureGatherLODBiasAMD, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -7615,10 +9327,12 @@
 #ifdef VK_AMD_shader_info
 void reservedmarshal_VkShaderResourceUsageAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->numUsedVgprs, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->numUsedSgprs, sizeof(uint32_t));
@@ -7637,13 +9351,15 @@
 
 void reservedmarshal_VkShaderStatisticsInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkShaderStageFlags*)&forMarshaling->shaderStageMask, sizeof(VkShaderStageFlags));
     *ptr += sizeof(VkShaderStageFlags);
-    reservedmarshal_VkShaderResourceUsageAMD(vkStream, (VkShaderResourceUsageAMD*)(&forMarshaling->resourceUsage), ptr);
+    reservedmarshal_VkShaderResourceUsageAMD(vkStream, rootType, (VkShaderResourceUsageAMD*)(&forMarshaling->resourceUsage), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->numPhysicalVgprs, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->numPhysicalSgprs, sizeof(uint32_t));
@@ -7662,13 +9378,19 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void reservedmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkStreamDescriptorSurfaceCreateFlagsGGP*)&forMarshaling->flags, sizeof(VkStreamDescriptorSurfaceCreateFlagsGGP));
     *ptr += sizeof(VkStreamDescriptorSurfaceCreateFlagsGGP);
     memcpy(*ptr, (GgpStreamDescriptor*)&forMarshaling->streamDescriptor, sizeof(GgpStreamDescriptor));
@@ -7679,13 +9401,19 @@
 #ifdef VK_NV_corner_sampled_image
 void reservedmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->cornerSampledImage, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -7696,11 +9424,13 @@
 #ifdef VK_NV_external_memory_capabilities
 void reservedmarshal_VkExternalImageFormatPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkImageFormatProperties(vkStream, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties), ptr);
+    (void)rootType;
+    reservedmarshal_VkImageFormatProperties(vkStream, rootType, (VkImageFormatProperties*)(&forMarshaling->imageFormatProperties), ptr);
     memcpy(*ptr, (VkExternalMemoryFeatureFlagsNV*)&forMarshaling->externalMemoryFeatures, sizeof(VkExternalMemoryFeatureFlagsNV));
     *ptr += sizeof(VkExternalMemoryFeatureFlagsNV);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->exportFromImportedHandleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
@@ -7713,26 +9443,38 @@
 #ifdef VK_NV_external_memory
 void reservedmarshal_VkExternalMemoryImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
 }
 
 void reservedmarshal_VkExportMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->handleTypes, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
 }
@@ -7741,13 +9483,19 @@
 #ifdef VK_NV_external_memory_win32
 void reservedmarshal_VkImportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagsNV*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagsNV);
     memcpy(*ptr, (HANDLE*)&forMarshaling->handle, sizeof(HANDLE));
@@ -7756,13 +9504,19 @@
 
 void reservedmarshal_VkExportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pAttributes;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -7781,13 +9535,19 @@
 #ifdef VK_NV_win32_keyed_mutex
 void reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->acquireCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     if (forMarshaling->acquireCount)
@@ -7830,13 +9590,19 @@
 #ifdef VK_EXT_validation_flags
 void reservedmarshal_VkValidationFlagsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->disabledValidationCheckCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const VkValidationCheckEXT*)forMarshaling->pDisabledValidationChecks, forMarshaling->disabledValidationCheckCount * sizeof(const VkValidationCheckEXT));
@@ -7847,13 +9613,19 @@
 #ifdef VK_NN_vi_surface
 void reservedmarshal_VkViSurfaceCreateInfoNN(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkViSurfaceCreateFlagsNN*)&forMarshaling->flags, sizeof(VkViSurfaceCreateFlagsNN));
     *ptr += sizeof(VkViSurfaceCreateFlagsNN);
     // WARNING PTR CHECK
@@ -7876,13 +9648,19 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void reservedmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->textureCompressionASTC_HDR, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -7891,26 +9669,38 @@
 #ifdef VK_EXT_astc_decode_mode
 void reservedmarshal_VkImageViewASTCDecodeModeEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->decodeMode, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
 }
 
 void reservedmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->decodeModeSharedExponent, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -7919,13 +9709,19 @@
 #ifdef VK_EXT_conditional_rendering
 void reservedmarshal_VkConditionalRenderingBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -7938,13 +9734,19 @@
 
 void reservedmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->conditionalRendering, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->inheritedConditionalRendering, sizeof(VkBool32));
@@ -7953,13 +9755,19 @@
 
 void reservedmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->conditionalRenderingEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -7968,10 +9776,12 @@
 #ifdef VK_NV_clip_space_w_scaling
 void reservedmarshal_VkViewportWScalingNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportWScalingNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)&forMarshaling->xcoeff, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->ycoeff, sizeof(float));
@@ -7980,13 +9790,19 @@
 
 void reservedmarshal_VkPipelineViewportWScalingStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->viewportWScalingEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
@@ -8000,7 +9816,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
         {
-            reservedmarshal_VkViewportWScalingNV(vkStream, (const VkViewportWScalingNV*)(forMarshaling->pViewportWScalings + i), ptr);
+            reservedmarshal_VkViewportWScalingNV(vkStream, rootType, (const VkViewportWScalingNV*)(forMarshaling->pViewportWScalings + i), ptr);
         }
     }
 }
@@ -8013,20 +9829,26 @@
 #ifdef VK_EXT_display_surface_counter
 void reservedmarshal_VkSurfaceCapabilities2EXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->minImageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxImageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->currentExtent), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->minImageExtent), ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxImageExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->currentExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minImageExtent), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxImageExtent), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxImageArrayLayers, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkSurfaceTransformFlagsKHR*)&forMarshaling->supportedTransforms, sizeof(VkSurfaceTransformFlagsKHR));
@@ -8045,52 +9867,76 @@
 #ifdef VK_EXT_display_control
 void reservedmarshal_VkDisplayPowerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDisplayPowerStateEXT*)&forMarshaling->powerState, sizeof(VkDisplayPowerStateEXT));
     *ptr += sizeof(VkDisplayPowerStateEXT);
 }
 
 void reservedmarshal_VkDeviceEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceEventTypeEXT*)&forMarshaling->deviceEvent, sizeof(VkDeviceEventTypeEXT));
     *ptr += sizeof(VkDeviceEventTypeEXT);
 }
 
 void reservedmarshal_VkDisplayEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDisplayEventTypeEXT*)&forMarshaling->displayEvent, sizeof(VkDisplayEventTypeEXT));
     *ptr += sizeof(VkDisplayEventTypeEXT);
 }
 
 void reservedmarshal_VkSwapchainCounterCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSurfaceCounterFlagsEXT*)&forMarshaling->surfaceCounters, sizeof(VkSurfaceCounterFlagsEXT));
     *ptr += sizeof(VkSurfaceCounterFlagsEXT);
 }
@@ -8099,20 +9945,24 @@
 #ifdef VK_GOOGLE_display_timing
 void reservedmarshal_VkRefreshCycleDurationGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint64_t*)&forMarshaling->refreshDuration, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
 
 void reservedmarshal_VkPastPresentationTimingGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->presentID, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint64_t*)&forMarshaling->desiredPresentTime, sizeof(uint64_t));
@@ -8127,10 +9977,12 @@
 
 void reservedmarshal_VkPresentTimeGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->presentID, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint64_t*)&forMarshaling->desiredPresentTime, sizeof(uint64_t));
@@ -8139,13 +9991,19 @@
 
 void reservedmarshal_VkPresentTimesInfoGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->swapchainCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -8157,7 +10015,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->swapchainCount; ++i)
         {
-            reservedmarshal_VkPresentTimeGOOGLE(vkStream, (const VkPresentTimeGOOGLE*)(forMarshaling->pTimes + i), ptr);
+            reservedmarshal_VkPresentTimeGOOGLE(vkStream, rootType, (const VkPresentTimeGOOGLE*)(forMarshaling->pTimes + i), ptr);
         }
     }
 }
@@ -8172,13 +10030,19 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void reservedmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->perViewPositionAllComponents, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -8187,10 +10051,12 @@
 #ifdef VK_NV_viewport_swizzle
 void reservedmarshal_VkViewportSwizzleNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkViewportCoordinateSwizzleNV*)&forMarshaling->x, sizeof(VkViewportCoordinateSwizzleNV));
     *ptr += sizeof(VkViewportCoordinateSwizzleNV);
     memcpy(*ptr, (VkViewportCoordinateSwizzleNV*)&forMarshaling->y, sizeof(VkViewportCoordinateSwizzleNV));
@@ -8203,13 +10069,19 @@
 
 void reservedmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineViewportSwizzleStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineViewportSwizzleStateCreateFlagsNV));
     *ptr += sizeof(VkPipelineViewportSwizzleStateCreateFlagsNV);
     memcpy(*ptr, (uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
@@ -8223,7 +10095,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
         {
-            reservedmarshal_VkViewportSwizzleNV(vkStream, (const VkViewportSwizzleNV*)(forMarshaling->pViewportSwizzles + i), ptr);
+            reservedmarshal_VkViewportSwizzleNV(vkStream, rootType, (const VkViewportSwizzleNV*)(forMarshaling->pViewportSwizzles + i), ptr);
         }
     }
 }
@@ -8232,26 +10104,38 @@
 #ifdef VK_EXT_discard_rectangles
 void reservedmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxDiscardRectangles, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineDiscardRectangleStateCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineDiscardRectangleStateCreateFlagsEXT));
     *ptr += sizeof(VkPipelineDiscardRectangleStateCreateFlagsEXT);
     memcpy(*ptr, (VkDiscardRectangleModeEXT*)&forMarshaling->discardRectangleMode, sizeof(VkDiscardRectangleModeEXT));
@@ -8267,7 +10151,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->discardRectangleCount; ++i)
         {
-            reservedmarshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pDiscardRectangles + i), ptr);
+            reservedmarshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pDiscardRectangles + i), ptr);
         }
     }
 }
@@ -8276,13 +10160,19 @@
 #ifdef VK_EXT_conservative_rasterization
 void reservedmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (float*)&forMarshaling->primitiveOverestimationSize, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->maxExtraPrimitiveOverestimationSize, sizeof(float));
@@ -8305,13 +10195,19 @@
 
 void reservedmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineRasterizationConservativeStateCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineRasterizationConservativeStateCreateFlagsEXT));
     *ptr += sizeof(VkPipelineRasterizationConservativeStateCreateFlagsEXT);
     memcpy(*ptr, (VkConservativeRasterizationModeEXT*)&forMarshaling->conservativeRasterizationMode, sizeof(VkConservativeRasterizationModeEXT));
@@ -8324,26 +10220,38 @@
 #ifdef VK_EXT_depth_clip_enable
 void reservedmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->depthClipEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineRasterizationDepthClipStateCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineRasterizationDepthClipStateCreateFlagsEXT));
     *ptr += sizeof(VkPipelineRasterizationDepthClipStateCreateFlagsEXT);
     memcpy(*ptr, (VkBool32*)&forMarshaling->depthClipEnable, sizeof(VkBool32));
@@ -8356,10 +10264,12 @@
 #ifdef VK_EXT_hdr_metadata
 void reservedmarshal_VkXYColorEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXYColorEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)&forMarshaling->x, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->y, sizeof(float));
@@ -8368,17 +10278,23 @@
 
 void reservedmarshal_VkHdrMetadataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->displayPrimaryRed), ptr);
-    reservedmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->displayPrimaryGreen), ptr);
-    reservedmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->displayPrimaryBlue), ptr);
-    reservedmarshal_VkXYColorEXT(vkStream, (VkXYColorEXT*)(&forMarshaling->whitePoint), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->displayPrimaryRed), ptr);
+    reservedmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->displayPrimaryGreen), ptr);
+    reservedmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->displayPrimaryBlue), ptr);
+    reservedmarshal_VkXYColorEXT(vkStream, rootType, (VkXYColorEXT*)(&forMarshaling->whitePoint), ptr);
     memcpy(*ptr, (float*)&forMarshaling->maxLuminance, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->minLuminance, sizeof(float));
@@ -8393,13 +10309,19 @@
 #ifdef VK_MVK_ios_surface
 void reservedmarshal_VkIOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkIOSSurfaceCreateFlagsMVK*)&forMarshaling->flags, sizeof(VkIOSSurfaceCreateFlagsMVK));
     *ptr += sizeof(VkIOSSurfaceCreateFlagsMVK);
     // WARNING PTR CHECK
@@ -8418,13 +10340,19 @@
 #ifdef VK_MVK_macos_surface
 void reservedmarshal_VkMacOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkMacOSSurfaceCreateFlagsMVK*)&forMarshaling->flags, sizeof(VkMacOSSurfaceCreateFlagsMVK));
     *ptr += sizeof(VkMacOSSurfaceCreateFlagsMVK);
     // WARNING PTR CHECK
@@ -8449,13 +10377,19 @@
 #ifdef VK_EXT_debug_utils
 void reservedmarshal_VkDebugUtilsLabelEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     {
         uint32_t l = forMarshaling->pLabelName ? strlen(forMarshaling->pLabelName): 0;
         memcpy(*ptr, (uint32_t*)&l, sizeof(uint32_t));
@@ -8470,13 +10404,19 @@
 
 void reservedmarshal_VkDebugUtilsObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkObjectType*)&forMarshaling->objectType, sizeof(VkObjectType));
     *ptr += sizeof(VkObjectType);
     memcpy(*ptr, (uint64_t*)&forMarshaling->objectHandle, sizeof(uint64_t));
@@ -8515,13 +10455,19 @@
 
 void reservedmarshal_VkDebugUtilsMessengerCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDebugUtilsMessengerCallbackDataFlagsEXT*)&forMarshaling->flags, sizeof(VkDebugUtilsMessengerCallbackDataFlagsEXT));
     *ptr += sizeof(VkDebugUtilsMessengerCallbackDataFlagsEXT);
     if (vkStream->getFeatureBits() & VULKAN_STREAM_FEATURE_NULL_OPTIONAL_STRINGS_BIT)
@@ -8575,7 +10521,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->queueLabelCount; ++i)
         {
-            reservedmarshal_VkDebugUtilsLabelEXT(vkStream, (VkDebugUtilsLabelEXT*)(forMarshaling->pQueueLabels + i), ptr);
+            reservedmarshal_VkDebugUtilsLabelEXT(vkStream, rootType, (VkDebugUtilsLabelEXT*)(forMarshaling->pQueueLabels + i), ptr);
         }
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->cmdBufLabelCount, sizeof(uint32_t));
@@ -8589,7 +10535,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->cmdBufLabelCount; ++i)
         {
-            reservedmarshal_VkDebugUtilsLabelEXT(vkStream, (VkDebugUtilsLabelEXT*)(forMarshaling->pCmdBufLabels + i), ptr);
+            reservedmarshal_VkDebugUtilsLabelEXT(vkStream, rootType, (VkDebugUtilsLabelEXT*)(forMarshaling->pCmdBufLabels + i), ptr);
         }
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->objectCount, sizeof(uint32_t));
@@ -8603,20 +10549,26 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->objectCount; ++i)
         {
-            reservedmarshal_VkDebugUtilsObjectNameInfoEXT(vkStream, (VkDebugUtilsObjectNameInfoEXT*)(forMarshaling->pObjects + i), ptr);
+            reservedmarshal_VkDebugUtilsObjectNameInfoEXT(vkStream, rootType, (VkDebugUtilsObjectNameInfoEXT*)(forMarshaling->pObjects + i), ptr);
         }
     }
 }
 
 void reservedmarshal_VkDebugUtilsMessengerCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDebugUtilsMessengerCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkDebugUtilsMessengerCreateFlagsEXT));
     *ptr += sizeof(VkDebugUtilsMessengerCreateFlagsEXT);
     memcpy(*ptr, (VkDebugUtilsMessageSeverityFlagsEXT*)&forMarshaling->messageSeverity, sizeof(VkDebugUtilsMessageSeverityFlagsEXT));
@@ -8641,13 +10593,19 @@
 
 void reservedmarshal_VkDebugUtilsObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkObjectType*)&forMarshaling->objectType, sizeof(VkObjectType));
     *ptr += sizeof(VkObjectType);
     memcpy(*ptr, (uint64_t*)&forMarshaling->objectHandle, sizeof(uint64_t));
@@ -8666,26 +10624,38 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void reservedmarshal_VkAndroidHardwareBufferUsageANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->androidHardwareBufferUsage, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
 
 void reservedmarshal_VkAndroidHardwareBufferPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->allocationSize, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
@@ -8694,20 +10664,26 @@
 
 void reservedmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
     memcpy(*ptr, (uint64_t*)&forMarshaling->externalFormat, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
     memcpy(*ptr, (VkFormatFeatureFlags*)&forMarshaling->formatFeatures, sizeof(VkFormatFeatureFlags));
     *ptr += sizeof(VkFormatFeatureFlags);
-    reservedmarshal_VkComponentMapping(vkStream, (VkComponentMapping*)(&forMarshaling->samplerYcbcrConversionComponents), ptr);
+    reservedmarshal_VkComponentMapping(vkStream, rootType, (VkComponentMapping*)(&forMarshaling->samplerYcbcrConversionComponents), ptr);
     memcpy(*ptr, (VkSamplerYcbcrModelConversion*)&forMarshaling->suggestedYcbcrModel, sizeof(VkSamplerYcbcrModelConversion));
     *ptr += sizeof(VkSamplerYcbcrModelConversion);
     memcpy(*ptr, (VkSamplerYcbcrRange*)&forMarshaling->suggestedYcbcrRange, sizeof(VkSamplerYcbcrRange));
@@ -8720,26 +10696,38 @@
 
 void reservedmarshal_VkImportAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (AHardwareBuffer*)forMarshaling->buffer, sizeof(AHardwareBuffer));
     *ptr += sizeof(AHardwareBuffer);
 }
 
 void reservedmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkDeviceMemory((*&forMarshaling->memory));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -8748,13 +10736,19 @@
 
 void reservedmarshal_VkExternalFormatANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->externalFormat, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
@@ -8771,13 +10765,19 @@
 #ifdef VK_EXT_inline_uniform_block
 void reservedmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->inlineUniformBlock, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->descriptorBindingInlineUniformBlockUpdateAfterBind, sizeof(VkBool32));
@@ -8786,13 +10786,19 @@
 
 void reservedmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxInlineUniformBlockSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxPerStageDescriptorInlineUniformBlocks, sizeof(uint32_t));
@@ -8807,13 +10813,19 @@
 
 void reservedmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->dataSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const void*)forMarshaling->pData, forMarshaling->dataSize * sizeof(const uint8_t));
@@ -8822,13 +10834,19 @@
 
 void reservedmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxInlineUniformBlockBindings, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
@@ -8839,10 +10857,12 @@
 #ifdef VK_EXT_sample_locations
 void reservedmarshal_VkSampleLocationEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)&forMarshaling->x, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->y, sizeof(float));
@@ -8851,95 +10871,123 @@
 
 void reservedmarshal_VkSampleLocationsInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSampleCountFlagBits*)&forMarshaling->sampleLocationsPerPixel, sizeof(VkSampleCountFlagBits));
     *ptr += sizeof(VkSampleCountFlagBits);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->sampleLocationGridSize), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->sampleLocationGridSize), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->sampleLocationsCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->sampleLocationsCount; ++i)
     {
-        reservedmarshal_VkSampleLocationEXT(vkStream, (const VkSampleLocationEXT*)(forMarshaling->pSampleLocations + i), ptr);
+        reservedmarshal_VkSampleLocationEXT(vkStream, rootType, (const VkSampleLocationEXT*)(forMarshaling->pSampleLocations + i), ptr);
     }
 }
 
 void reservedmarshal_VkAttachmentSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachmentIndex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo), ptr);
+    reservedmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo), ptr);
 }
 
 void reservedmarshal_VkSubpassSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->subpassIndex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
-    reservedmarshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo), ptr);
+    reservedmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo), ptr);
 }
 
 void reservedmarshal_VkRenderPassSampleLocationsBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->attachmentInitialSampleLocationsCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->attachmentInitialSampleLocationsCount; ++i)
     {
-        reservedmarshal_VkAttachmentSampleLocationsEXT(vkStream, (const VkAttachmentSampleLocationsEXT*)(forMarshaling->pAttachmentInitialSampleLocations + i), ptr);
+        reservedmarshal_VkAttachmentSampleLocationsEXT(vkStream, rootType, (const VkAttachmentSampleLocationsEXT*)(forMarshaling->pAttachmentInitialSampleLocations + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->postSubpassSampleLocationsCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->postSubpassSampleLocationsCount; ++i)
     {
-        reservedmarshal_VkSubpassSampleLocationsEXT(vkStream, (const VkSubpassSampleLocationsEXT*)(forMarshaling->pPostSubpassSampleLocations + i), ptr);
+        reservedmarshal_VkSubpassSampleLocationsEXT(vkStream, rootType, (const VkSubpassSampleLocationsEXT*)(forMarshaling->pPostSubpassSampleLocations + i), ptr);
     }
 }
 
 void reservedmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->sampleLocationsEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
-    reservedmarshal_VkSampleLocationsInfoEXT(vkStream, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo), ptr);
+    reservedmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, (VkSampleLocationsInfoEXT*)(&forMarshaling->sampleLocationsInfo), ptr);
 }
 
 void reservedmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSampleCountFlags*)&forMarshaling->sampleLocationSampleCounts, sizeof(VkSampleCountFlags));
     *ptr += sizeof(VkSampleCountFlags);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize), ptr);
     memcpy(*ptr, (float*)forMarshaling->sampleLocationCoordinateRange, 2 * sizeof(float));
     *ptr += 2 * sizeof(float);
     memcpy(*ptr, (uint32_t*)&forMarshaling->sampleLocationSubPixelBits, sizeof(uint32_t));
@@ -8950,40 +10998,58 @@
 
 void reservedmarshal_VkMultisamplePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxSampleLocationGridSize), ptr);
 }
 
 #endif
 #ifdef VK_EXT_blend_operation_advanced
 void reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->advancedBlendCoherentOperations, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->advancedBlendMaxColorAttachments, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkBool32*)&forMarshaling->advancedBlendIndependentBlend, sizeof(VkBool32));
@@ -9000,13 +11066,19 @@
 
 void reservedmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->srcPremultiplied, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->dstPremultiplied, sizeof(VkBool32));
@@ -9019,13 +11091,19 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void reservedmarshal_VkPipelineCoverageToColorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCoverageToColorStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineCoverageToColorStateCreateFlagsNV));
     *ptr += sizeof(VkPipelineCoverageToColorStateCreateFlagsNV);
     memcpy(*ptr, (VkBool32*)&forMarshaling->coverageToColorEnable, sizeof(VkBool32));
@@ -9038,13 +11116,19 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void reservedmarshal_VkPipelineCoverageModulationStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCoverageModulationStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineCoverageModulationStateCreateFlagsNV));
     *ptr += sizeof(VkPipelineCoverageModulationStateCreateFlagsNV);
     memcpy(*ptr, (VkCoverageModulationModeNV*)&forMarshaling->coverageModulationMode, sizeof(VkCoverageModulationModeNV));
@@ -9071,13 +11155,19 @@
 #ifdef VK_NV_shader_sm_builtins
 void reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shaderSMCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shaderWarpsPerSM, sizeof(uint32_t));
@@ -9086,13 +11176,19 @@
 
 void reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderSMBuiltins, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -9103,10 +11199,12 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void reservedmarshal_VkDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->drmFormatModifierPlaneCount, sizeof(uint32_t));
@@ -9117,13 +11215,19 @@
 
 void reservedmarshal_VkDrmFormatModifierPropertiesListEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->drmFormatModifierCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -9135,20 +11239,26 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->drmFormatModifierCount; ++i)
         {
-            reservedmarshal_VkDrmFormatModifierPropertiesEXT(vkStream, (VkDrmFormatModifierPropertiesEXT*)(forMarshaling->pDrmFormatModifierProperties + i), ptr);
+            reservedmarshal_VkDrmFormatModifierPropertiesEXT(vkStream, rootType, (VkDrmFormatModifierPropertiesEXT*)(forMarshaling->pDrmFormatModifierProperties + i), ptr);
         }
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
     memcpy(*ptr, (VkSharingMode*)&forMarshaling->sharingMode, sizeof(VkSharingMode));
@@ -9169,13 +11279,19 @@
 
 void reservedmarshal_VkImageDrmFormatModifierListCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->drmFormatModifierCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const uint64_t*)forMarshaling->pDrmFormatModifiers, forMarshaling->drmFormatModifierCount * sizeof(const uint64_t));
@@ -9184,32 +11300,44 @@
 
 void reservedmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->drmFormatModifierPlaneCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->drmFormatModifierPlaneCount; ++i)
     {
-        reservedmarshal_VkSubresourceLayout(vkStream, (const VkSubresourceLayout*)(forMarshaling->pPlaneLayouts + i), ptr);
+        reservedmarshal_VkSubresourceLayout(vkStream, rootType, (const VkSubresourceLayout*)(forMarshaling->pPlaneLayouts + i), ptr);
     }
 }
 
 void reservedmarshal_VkImageDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->drmFormatModifier, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
@@ -9218,13 +11346,19 @@
 #ifdef VK_EXT_validation_cache
 void reservedmarshal_VkValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkValidationCacheCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkValidationCacheCreateFlagsEXT));
     *ptr += sizeof(VkValidationCacheCreateFlagsEXT);
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->initialDataSize;
@@ -9237,13 +11371,19 @@
 
 void reservedmarshal_VkShaderModuleValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkValidationCacheEXT((*&forMarshaling->validationCache));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -9258,10 +11398,12 @@
 #ifdef VK_NV_shading_rate_image
 void reservedmarshal_VkShadingRatePaletteNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->shadingRatePaletteEntryCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const VkShadingRatePaletteEntryNV*)forMarshaling->pShadingRatePaletteEntries, forMarshaling->shadingRatePaletteEntryCount * sizeof(const VkShadingRatePaletteEntryNV));
@@ -9270,13 +11412,19 @@
 
 void reservedmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shadingRateImageEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (uint32_t*)&forMarshaling->viewportCount, sizeof(uint32_t));
@@ -9290,20 +11438,26 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->viewportCount; ++i)
         {
-            reservedmarshal_VkShadingRatePaletteNV(vkStream, (const VkShadingRatePaletteNV*)(forMarshaling->pShadingRatePalettes + i), ptr);
+            reservedmarshal_VkShadingRatePaletteNV(vkStream, rootType, (const VkShadingRatePaletteNV*)(forMarshaling->pShadingRatePalettes + i), ptr);
         }
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shadingRateImage, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shadingRateCoarseSampleOrder, sizeof(VkBool32));
@@ -9312,14 +11466,20 @@
 
 void reservedmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkExtent2D(vkStream, (VkExtent2D*)(&forMarshaling->shadingRateTexelSize), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->shadingRateTexelSize), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shadingRatePaletteSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shadingRateMaxCoarseSamples, sizeof(uint32_t));
@@ -9328,10 +11488,12 @@
 
 void reservedmarshal_VkCoarseSampleLocationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->pixelX, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->pixelY, sizeof(uint32_t));
@@ -9342,10 +11504,12 @@
 
 void reservedmarshal_VkCoarseSampleOrderCustomNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkShadingRatePaletteEntryNV*)&forMarshaling->shadingRate, sizeof(VkShadingRatePaletteEntryNV));
     *ptr += sizeof(VkShadingRatePaletteEntryNV);
     memcpy(*ptr, (uint32_t*)&forMarshaling->sampleCount, sizeof(uint32_t));
@@ -9354,26 +11518,32 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->sampleLocationCount; ++i)
     {
-        reservedmarshal_VkCoarseSampleLocationNV(vkStream, (const VkCoarseSampleLocationNV*)(forMarshaling->pSampleLocations + i), ptr);
+        reservedmarshal_VkCoarseSampleLocationNV(vkStream, rootType, (const VkCoarseSampleLocationNV*)(forMarshaling->pSampleLocations + i), ptr);
     }
 }
 
 void reservedmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkCoarseSampleOrderTypeNV*)&forMarshaling->sampleOrderType, sizeof(VkCoarseSampleOrderTypeNV));
     *ptr += sizeof(VkCoarseSampleOrderTypeNV);
     memcpy(*ptr, (uint32_t*)&forMarshaling->customSampleOrderCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->customSampleOrderCount; ++i)
     {
-        reservedmarshal_VkCoarseSampleOrderCustomNV(vkStream, (const VkCoarseSampleOrderCustomNV*)(forMarshaling->pCustomSampleOrders + i), ptr);
+        reservedmarshal_VkCoarseSampleOrderCustomNV(vkStream, rootType, (const VkCoarseSampleOrderCustomNV*)(forMarshaling->pCustomSampleOrders + i), ptr);
     }
 }
 
@@ -9381,13 +11551,19 @@
 #ifdef VK_NV_ray_tracing
 void reservedmarshal_VkRayTracingShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkRayTracingShaderGroupTypeKHR*)&forMarshaling->type, sizeof(VkRayTracingShaderGroupTypeKHR));
     *ptr += sizeof(VkRayTracingShaderGroupTypeKHR);
     memcpy(*ptr, (uint32_t*)&forMarshaling->generalShader, sizeof(uint32_t));
@@ -9402,26 +11578,32 @@
 
 void reservedmarshal_VkRayTracingPipelineCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     *ptr += sizeof(VkPipelineCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
     {
-        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
+        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->groupCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->groupCount; ++i)
     {
-        reservedmarshal_VkRayTracingShaderGroupCreateInfoNV(vkStream, (const VkRayTracingShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i), ptr);
+        reservedmarshal_VkRayTracingShaderGroupCreateInfoNV(vkStream, rootType, (const VkRayTracingShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxRecursionDepth, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -9439,13 +11621,19 @@
 
 void reservedmarshal_VkGeometryTrianglesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->vertexData));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -9478,13 +11666,19 @@
 
 void reservedmarshal_VkGeometryAABBNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryAABBNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->aabbData));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -9499,39 +11693,53 @@
 
 void reservedmarshal_VkGeometryDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryDataNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkGeometryTrianglesNV(vkStream, (VkGeometryTrianglesNV*)(&forMarshaling->triangles), ptr);
-    reservedmarshal_VkGeometryAABBNV(vkStream, (VkGeometryAABBNV*)(&forMarshaling->aabbs), ptr);
+    (void)rootType;
+    reservedmarshal_VkGeometryTrianglesNV(vkStream, rootType, (VkGeometryTrianglesNV*)(&forMarshaling->triangles), ptr);
+    reservedmarshal_VkGeometryAABBNV(vkStream, rootType, (VkGeometryAABBNV*)(&forMarshaling->aabbs), ptr);
 }
 
 void reservedmarshal_VkGeometryNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkGeometryTypeKHR*)&forMarshaling->geometryType, sizeof(VkGeometryTypeKHR));
     *ptr += sizeof(VkGeometryTypeKHR);
-    reservedmarshal_VkGeometryDataNV(vkStream, (VkGeometryDataNV*)(&forMarshaling->geometry), ptr);
+    reservedmarshal_VkGeometryDataNV(vkStream, rootType, (VkGeometryDataNV*)(&forMarshaling->geometry), ptr);
     memcpy(*ptr, (VkGeometryFlagsKHR*)&forMarshaling->flags, sizeof(VkGeometryFlagsKHR));
     *ptr += sizeof(VkGeometryFlagsKHR);
 }
 
 void reservedmarshal_VkAccelerationStructureInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccelerationStructureTypeNV*)&forMarshaling->type, sizeof(VkAccelerationStructureTypeNV));
     *ptr += sizeof(VkAccelerationStructureTypeNV);
     memcpy(*ptr, (VkBuildAccelerationStructureFlagsNV*)&forMarshaling->flags, sizeof(VkBuildAccelerationStructureFlagsNV));
@@ -9542,33 +11750,45 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->geometryCount; ++i)
     {
-        reservedmarshal_VkGeometryNV(vkStream, (const VkGeometryNV*)(forMarshaling->pGeometries + i), ptr);
+        reservedmarshal_VkGeometryNV(vkStream, rootType, (const VkGeometryNV*)(forMarshaling->pGeometries + i), ptr);
     }
 }
 
 void reservedmarshal_VkAccelerationStructureCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->compactedSize, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
-    reservedmarshal_VkAccelerationStructureInfoNV(vkStream, (VkAccelerationStructureInfoNV*)(&forMarshaling->info), ptr);
+    reservedmarshal_VkAccelerationStructureInfoNV(vkStream, rootType, (VkAccelerationStructureInfoNV*)(&forMarshaling->info), ptr);
 }
 
 void reservedmarshal_VkBindAccelerationStructureMemoryInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkAccelerationStructureNV((*&forMarshaling->accelerationStructure));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -9587,13 +11807,19 @@
 
 void reservedmarshal_VkWriteDescriptorSetAccelerationStructureNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->accelerationStructureCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -9621,13 +11847,19 @@
 
 void reservedmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccelerationStructureMemoryRequirementsTypeNV*)&forMarshaling->type, sizeof(VkAccelerationStructureMemoryRequirementsTypeNV));
     *ptr += sizeof(VkAccelerationStructureMemoryRequirementsTypeNV);
     uint64_t cgen_var_0;
@@ -9638,13 +11870,19 @@
 
 void reservedmarshal_VkPhysicalDeviceRayTracingPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shaderGroupHandleSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxRecursionDepth, sizeof(uint32_t));
@@ -9665,20 +11903,24 @@
 
 void reservedmarshal_VkTransformMatrixKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)forMarshaling->matrix, ((3)*(4)) * sizeof(float));
     *ptr += ((3)*(4)) * sizeof(float);
 }
 
 void reservedmarshal_VkAabbPositionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (float*)&forMarshaling->minX, sizeof(float));
     *ptr += sizeof(float);
     memcpy(*ptr, (float*)&forMarshaling->minY, sizeof(float));
@@ -9695,6 +11937,7 @@
 
 void reservedmarshal_VkAccelerationStructureInstanceKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* forMarshaling,
     uint8_t** ptr)
 {
@@ -9707,7 +11950,7 @@
     
     (void)vkStream;
     const VkAccelerationStructureInstanceKHRWithoutBitFields* forMarshaling_new = (const VkAccelerationStructureInstanceKHRWithoutBitFields*)(forMarshaling);
-    reservedmarshal_VkTransformMatrixKHR(vkStream, (VkTransformMatrixKHR*)(&forMarshaling_new->transform), ptr);
+    reservedmarshal_VkTransformMatrixKHR(vkStream, rootType, (VkTransformMatrixKHR*)(&forMarshaling_new->transform), ptr);
     for (uint32_t i = 0; i < 2; i++) {
         memcpy(*ptr, (uint32_t*)&(forMarshaling_new->dwords[i]), sizeof(uint32_t));
         *ptr += sizeof(uint32_t);
@@ -9721,26 +11964,38 @@
 #ifdef VK_NV_representative_fragment_test
 void reservedmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->representativeFragmentTest, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->representativeFragmentTestEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -9749,26 +12004,38 @@
 #ifdef VK_EXT_filter_cubic
 void reservedmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImageViewType*)&forMarshaling->imageViewType, sizeof(VkImageViewType));
     *ptr += sizeof(VkImageViewType);
 }
 
 void reservedmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->filterCubic, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->filterCubicMinmax, sizeof(VkBool32));
@@ -9781,13 +12048,19 @@
 #ifdef VK_EXT_global_priority
 void reservedmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkQueueGlobalPriorityEXT*)&forMarshaling->globalPriority, sizeof(VkQueueGlobalPriorityEXT));
     *ptr += sizeof(VkQueueGlobalPriorityEXT);
 }
@@ -9796,13 +12069,19 @@
 #ifdef VK_EXT_external_memory_host
 void reservedmarshal_VkImportMemoryHostPointerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkExternalMemoryHandleTypeFlagBits*)&forMarshaling->handleType, sizeof(VkExternalMemoryHandleTypeFlagBits));
     *ptr += sizeof(VkExternalMemoryHandleTypeFlagBits);
     // WARNING PTR CHECK
@@ -9819,26 +12098,38 @@
 
 void reservedmarshal_VkMemoryHostPointerPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->memoryTypeBits, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->minImportedHostPointerAlignment, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
 }
@@ -9849,13 +12140,19 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void reservedmarshal_VkPipelineCompilerControlCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCompilerControlFlagsAMD*)&forMarshaling->compilerControlFlags, sizeof(VkPipelineCompilerControlFlagsAMD));
     *ptr += sizeof(VkPipelineCompilerControlFlagsAMD);
 }
@@ -9864,13 +12161,19 @@
 #ifdef VK_EXT_calibrated_timestamps
 void reservedmarshal_VkCalibratedTimestampInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkTimeDomainEXT*)&forMarshaling->timeDomain, sizeof(VkTimeDomainEXT));
     *ptr += sizeof(VkTimeDomainEXT);
 }
@@ -9879,13 +12182,19 @@
 #ifdef VK_AMD_shader_core_properties
 void reservedmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shaderEngineCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shaderArraysPerEngineCount, sizeof(uint32_t));
@@ -9920,13 +12229,19 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void reservedmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkMemoryOverallocationBehaviorAMD*)&forMarshaling->overallocationBehavior, sizeof(VkMemoryOverallocationBehaviorAMD));
     *ptr += sizeof(VkMemoryOverallocationBehaviorAMD);
 }
@@ -9935,23 +12250,31 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxVertexAttribDivisor, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkVertexInputBindingDivisorDescriptionEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->binding, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->divisor, sizeof(uint32_t));
@@ -9960,30 +12283,42 @@
 
 void reservedmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->vertexBindingDivisorCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->vertexBindingDivisorCount; ++i)
     {
-        reservedmarshal_VkVertexInputBindingDivisorDescriptionEXT(vkStream, (const VkVertexInputBindingDivisorDescriptionEXT*)(forMarshaling->pVertexBindingDivisors + i), ptr);
+        reservedmarshal_VkVertexInputBindingDivisorDescriptionEXT(vkStream, rootType, (const VkVertexInputBindingDivisorDescriptionEXT*)(forMarshaling->pVertexBindingDivisors + i), ptr);
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->vertexAttributeInstanceRateDivisor, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->vertexAttributeInstanceRateZeroDivisor, sizeof(VkBool32));
@@ -9994,13 +12329,19 @@
 #ifdef VK_GGP_frame_token
 void reservedmarshal_VkPresentFrameTokenGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (GgpFrameToken*)&forMarshaling->frameToken, sizeof(GgpFrameToken));
     *ptr += sizeof(GgpFrameToken);
 }
@@ -10009,10 +12350,12 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void reservedmarshal_VkPipelineCreationFeedbackEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkPipelineCreationFeedbackFlagsEXT*)&forMarshaling->flags, sizeof(VkPipelineCreationFeedbackFlagsEXT));
     *ptr += sizeof(VkPipelineCreationFeedbackFlagsEXT);
     memcpy(*ptr, (uint64_t*)&forMarshaling->duration, sizeof(uint64_t));
@@ -10021,19 +12364,25 @@
 
 void reservedmarshal_VkPipelineCreationFeedbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkPipelineCreationFeedbackEXT(vkStream, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineCreationFeedback), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkPipelineCreationFeedbackEXT(vkStream, rootType, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineCreationFeedback), ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->pipelineStageCreationFeedbackCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->pipelineStageCreationFeedbackCount; ++i)
     {
-        reservedmarshal_VkPipelineCreationFeedbackEXT(vkStream, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineStageCreationFeedbacks + i), ptr);
+        reservedmarshal_VkPipelineCreationFeedbackEXT(vkStream, rootType, (VkPipelineCreationFeedbackEXT*)(forMarshaling->pPipelineStageCreationFeedbacks + i), ptr);
     }
 }
 
@@ -10043,13 +12392,19 @@
 #ifdef VK_NV_compute_shader_derivatives
 void reservedmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->computeDerivativeGroupQuads, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->computeDerivativeGroupLinear, sizeof(VkBool32));
@@ -10060,13 +12415,19 @@
 #ifdef VK_NV_mesh_shader
 void reservedmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->taskShader, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->meshShader, sizeof(VkBool32));
@@ -10075,13 +12436,19 @@
 
 void reservedmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxDrawMeshTasksCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxTaskWorkGroupInvocations, sizeof(uint32_t));
@@ -10112,10 +12479,12 @@
 
 void reservedmarshal_VkDrawMeshTasksIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->taskCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->firstTask, sizeof(uint32_t));
@@ -10126,13 +12495,19 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void reservedmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentShaderBarycentric, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10141,13 +12516,19 @@
 #ifdef VK_NV_shader_image_footprint
 void reservedmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->imageFootprint, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10156,13 +12537,19 @@
 #ifdef VK_NV_scissor_exclusive
 void reservedmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->exclusiveScissorCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -10174,20 +12561,26 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->exclusiveScissorCount; ++i)
         {
-            reservedmarshal_VkRect2D(vkStream, (const VkRect2D*)(forMarshaling->pExclusiveScissors + i), ptr);
+            reservedmarshal_VkRect2D(vkStream, rootType, (const VkRect2D*)(forMarshaling->pExclusiveScissors + i), ptr);
         }
     }
 }
 
 void reservedmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->exclusiveScissor, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10196,26 +12589,38 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void reservedmarshal_VkQueueFamilyCheckpointPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineStageFlags*)&forMarshaling->checkpointExecutionStageMask, sizeof(VkPipelineStageFlags));
     *ptr += sizeof(VkPipelineStageFlags);
 }
 
 void reservedmarshal_VkCheckpointDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCheckpointDataNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineStageFlagBits*)&forMarshaling->stage, sizeof(VkPipelineStageFlagBits));
     *ptr += sizeof(VkPipelineStageFlagBits);
     // WARNING PTR CHECK
@@ -10234,13 +12639,19 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void reservedmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderIntegerFunctions2, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10249,34 +12660,44 @@
 #ifdef VK_INTEL_performance_query
 void reservedmarshal_VkPerformanceValueDataINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->value32, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPerformanceValueINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkPerformanceValueTypeINTEL*)&forMarshaling->type, sizeof(VkPerformanceValueTypeINTEL));
     *ptr += sizeof(VkPerformanceValueTypeINTEL);
-    reservedmarshal_VkPerformanceValueDataINTEL(vkStream, (VkPerformanceValueDataINTEL*)(&forMarshaling->data), ptr);
+    reservedmarshal_VkPerformanceValueDataINTEL(vkStream, rootType, (VkPerformanceValueDataINTEL*)(&forMarshaling->data), ptr);
 }
 
 void reservedmarshal_VkInitializePerformanceApiInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pUserData;
     memcpy((*ptr), &cgen_var_0, 8);
@@ -10291,52 +12712,76 @@
 
 void reservedmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkQueryPoolSamplingModeINTEL*)&forMarshaling->performanceCountersSampling, sizeof(VkQueryPoolSamplingModeINTEL));
     *ptr += sizeof(VkQueryPoolSamplingModeINTEL);
 }
 
 void reservedmarshal_VkPerformanceMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->marker, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
 }
 
 void reservedmarshal_VkPerformanceStreamMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->marker, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPerformanceOverrideInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPerformanceOverrideTypeINTEL*)&forMarshaling->type, sizeof(VkPerformanceOverrideTypeINTEL));
     *ptr += sizeof(VkPerformanceOverrideTypeINTEL);
     memcpy(*ptr, (VkBool32*)&forMarshaling->enable, sizeof(VkBool32));
@@ -10347,13 +12792,19 @@
 
 void reservedmarshal_VkPerformanceConfigurationAcquireInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPerformanceConfigurationTypeINTEL*)&forMarshaling->type, sizeof(VkPerformanceConfigurationTypeINTEL));
     *ptr += sizeof(VkPerformanceConfigurationTypeINTEL);
 }
@@ -10362,13 +12813,19 @@
 #ifdef VK_EXT_pci_bus_info
 void reservedmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->pciDomain, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->pciBus, sizeof(uint32_t));
@@ -10383,26 +12840,38 @@
 #ifdef VK_AMD_display_native_hdr
 void reservedmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->localDimmingSupport, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->localDimmingEnable, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10411,13 +12880,19 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void reservedmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkImagePipeSurfaceCreateFlagsFUCHSIA*)&forMarshaling->flags, sizeof(VkImagePipeSurfaceCreateFlagsFUCHSIA));
     *ptr += sizeof(VkImagePipeSurfaceCreateFlagsFUCHSIA);
     memcpy(*ptr, (zx_handle_t*)&forMarshaling->imagePipeHandle, sizeof(zx_handle_t));
@@ -10428,13 +12903,19 @@
 #ifdef VK_EXT_metal_surface
 void reservedmarshal_VkMetalSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkMetalSurfaceCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkMetalSurfaceCreateFlagsEXT));
     *ptr += sizeof(VkMetalSurfaceCreateFlagsEXT);
     // WARNING PTR CHECK
@@ -10450,52 +12931,67 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void reservedmarshal_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportColorBufferGOOGLE* forMarshaling,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    memcpy(*ptr, (uint32_t*)&forMarshaling->colorBuffer, sizeof(uint32_t));
-    *ptr += sizeof(uint32_t);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMap, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMapDynamic, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMapNonSubsampledImages, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
 }
 
-void reservedmarshal_VkImportBufferGOOGLE(
+void reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportBufferGOOGLE* forMarshaling,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    memcpy(*ptr, (uint32_t*)&forMarshaling->buffer, sizeof(uint32_t));
-    *ptr += sizeof(uint32_t);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->minFragmentDensityTexelSize), ptr);
+    reservedmarshal_VkExtent2D(vkStream, rootType, (VkExtent2D*)(&forMarshaling->maxFragmentDensityTexelSize), ptr);
+    memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityInvocations, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
 }
 
-void reservedmarshal_VkImportPhysicalAddressGOOGLE(
+void reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportPhysicalAddressGOOGLE* forMarshaling,
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    memcpy(*ptr, (uint64_t*)&forMarshaling->physicalAddress, sizeof(uint64_t));
-    *ptr += sizeof(uint64_t);
-    memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
-    *ptr += sizeof(VkDeviceSize);
-    memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
-    *ptr += sizeof(VkFormat);
-    memcpy(*ptr, (VkImageTiling*)&forMarshaling->tiling, sizeof(VkImageTiling));
-    *ptr += sizeof(VkImageTiling);
-    memcpy(*ptr, (uint32_t*)&forMarshaling->tilingParameter, sizeof(uint32_t));
-    *ptr += sizeof(uint32_t);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkAttachmentReference(vkStream, rootType, (VkAttachmentReference*)(&forMarshaling->fragmentDensityMapAttachment), ptr);
 }
 
 #endif
@@ -10508,13 +13004,19 @@
 #ifdef VK_EXT_subgroup_size_control
 void reservedmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->subgroupSizeControl, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->computeFullSubgroups, sizeof(VkBool32));
@@ -10523,13 +13025,19 @@
 
 void reservedmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->minSubgroupSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxSubgroupSize, sizeof(uint32_t));
@@ -10542,13 +13050,19 @@
 
 void reservedmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->requiredSubgroupSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
@@ -10557,13 +13071,19 @@
 #ifdef VK_AMD_shader_core_properties2
 void reservedmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkShaderCorePropertiesFlagsAMD*)&forMarshaling->shaderCoreFeatures, sizeof(VkShaderCorePropertiesFlagsAMD));
     *ptr += sizeof(VkShaderCorePropertiesFlagsAMD);
     memcpy(*ptr, (uint32_t*)&forMarshaling->activeComputeUnitCount, sizeof(uint32_t));
@@ -10574,13 +13094,19 @@
 #ifdef VK_AMD_device_coherent_memory
 void reservedmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->deviceCoherentMemory, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10589,13 +13115,19 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void reservedmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderImageInt64Atomics, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->sparseImageInt64Atomics, sizeof(VkBool32));
@@ -10606,13 +13138,19 @@
 #ifdef VK_EXT_memory_budget
 void reservedmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)forMarshaling->heapBudget, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
     *ptr += VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)forMarshaling->heapUsage, VK_MAX_MEMORY_HEAPS * sizeof(VkDeviceSize));
@@ -10623,26 +13161,38 @@
 #ifdef VK_EXT_memory_priority
 void reservedmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->memoryPriority, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkMemoryPriorityAllocateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (float*)&forMarshaling->priority, sizeof(float));
     *ptr += sizeof(float);
 }
@@ -10651,13 +13201,19 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void reservedmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->dedicatedAllocationImageAliasing, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10666,13 +13222,19 @@
 #ifdef VK_EXT_buffer_device_address
 void reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->bufferDeviceAddress, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->bufferDeviceAddressCaptureReplay, sizeof(VkBool32));
@@ -10683,13 +13245,19 @@
 
 void reservedmarshal_VkBufferDeviceAddressCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
 }
@@ -10698,13 +13266,19 @@
 #ifdef VK_EXT_tooling_info
 void reservedmarshal_VkPhysicalDeviceToolPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (char*)forMarshaling->name, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
     *ptr += VK_MAX_EXTENSION_NAME_SIZE * sizeof(char);
     memcpy(*ptr, (char*)forMarshaling->version, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
@@ -10723,13 +13297,19 @@
 #ifdef VK_EXT_validation_features
 void reservedmarshal_VkValidationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->enabledValidationFeatureCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (const VkValidationFeatureEnableEXT*)forMarshaling->pEnabledValidationFeatures, forMarshaling->enabledValidationFeatureCount * sizeof(const VkValidationFeatureEnableEXT));
@@ -10744,13 +13324,19 @@
 #ifdef VK_NV_cooperative_matrix
 void reservedmarshal_VkCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->MSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->NSize, sizeof(uint32_t));
@@ -10771,13 +13357,19 @@
 
 void reservedmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->cooperativeMatrix, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->cooperativeMatrixRobustBufferAccess, sizeof(VkBool32));
@@ -10786,13 +13378,19 @@
 
 void reservedmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkShaderStageFlags*)&forMarshaling->cooperativeMatrixSupportedStages, sizeof(VkShaderStageFlags));
     *ptr += sizeof(VkShaderStageFlags);
 }
@@ -10801,26 +13399,38 @@
 #ifdef VK_NV_coverage_reduction_mode
 void reservedmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->coverageReductionMode, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPipelineCoverageReductionStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCoverageReductionStateCreateFlagsNV*)&forMarshaling->flags, sizeof(VkPipelineCoverageReductionStateCreateFlagsNV));
     *ptr += sizeof(VkPipelineCoverageReductionStateCreateFlagsNV);
     memcpy(*ptr, (VkCoverageReductionModeNV*)&forMarshaling->coverageReductionMode, sizeof(VkCoverageReductionModeNV));
@@ -10829,13 +13439,19 @@
 
 void reservedmarshal_VkFramebufferMixedSamplesCombinationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkCoverageReductionModeNV*)&forMarshaling->coverageReductionMode, sizeof(VkCoverageReductionModeNV));
     *ptr += sizeof(VkCoverageReductionModeNV);
     memcpy(*ptr, (VkSampleCountFlagBits*)&forMarshaling->rasterizationSamples, sizeof(VkSampleCountFlagBits));
@@ -10850,13 +13466,19 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void reservedmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentShaderSampleInterlock, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentShaderPixelInterlock, sizeof(VkBool32));
@@ -10869,13 +13491,19 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void reservedmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->ycbcrImageArrays, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -10884,39 +13512,57 @@
 #ifdef VK_EXT_full_screen_exclusive
 void reservedmarshal_VkSurfaceFullScreenExclusiveInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFullScreenExclusiveEXT*)&forMarshaling->fullScreenExclusive, sizeof(VkFullScreenExclusiveEXT));
     *ptr += sizeof(VkFullScreenExclusiveEXT);
 }
 
 void reservedmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fullScreenExclusiveSupported, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (HMONITOR*)&forMarshaling->hmonitor, sizeof(HMONITOR));
     *ptr += sizeof(HMONITOR);
 }
@@ -10925,13 +13571,19 @@
 #ifdef VK_EXT_headless_surface
 void reservedmarshal_VkHeadlessSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkHeadlessSurfaceCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkHeadlessSurfaceCreateFlagsEXT));
     *ptr += sizeof(VkHeadlessSurfaceCreateFlagsEXT);
 }
@@ -10940,13 +13592,19 @@
 #ifdef VK_EXT_line_rasterization
 void reservedmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->rectangularLines, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->bresenhamLines, sizeof(VkBool32));
@@ -10963,26 +13621,38 @@
 
 void reservedmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->lineSubPixelPrecisionBits, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkLineRasterizationModeEXT*)&forMarshaling->lineRasterizationMode, sizeof(VkLineRasterizationModeEXT));
     *ptr += sizeof(VkLineRasterizationModeEXT);
     memcpy(*ptr, (VkBool32*)&forMarshaling->stippledLineEnable, sizeof(VkBool32));
@@ -10997,13 +13667,19 @@
 #ifdef VK_EXT_shader_atomic_float
 void reservedmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderBufferFloat32Atomics, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderBufferFloat32AtomicAdd, sizeof(VkBool32));
@@ -11036,13 +13712,19 @@
 #ifdef VK_EXT_index_type_uint8
 void reservedmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->indexTypeUint8, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -11051,13 +13733,19 @@
 #ifdef VK_EXT_extended_dynamic_state
 void reservedmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->extendedDynamicState, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -11066,13 +13754,19 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void reservedmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->shaderDemoteToHelperInvocation, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -11081,13 +13775,19 @@
 #ifdef VK_NV_device_generated_commands
 void reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxGraphicsShaderGroupCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxIndirectSequenceCount, sizeof(uint32_t));
@@ -11110,31 +13810,43 @@
 
 void reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->deviceGeneratedCommands, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkGraphicsShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
     {
-        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
+        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pVertexInputState;
@@ -11143,7 +13855,7 @@
     *ptr += 8;
     if (forMarshaling->pVertexInputState)
     {
-        reservedmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState), ptr);
+        reservedmarshal_VkPipelineVertexInputStateCreateInfo(vkStream, rootType, (const VkPipelineVertexInputStateCreateInfo*)(forMarshaling->pVertexInputState), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)forMarshaling->pTessellationState;
@@ -11152,24 +13864,30 @@
     *ptr += 8;
     if (forMarshaling->pTessellationState)
     {
-        reservedmarshal_VkPipelineTessellationStateCreateInfo(vkStream, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState), ptr);
+        reservedmarshal_VkPipelineTessellationStateCreateInfo(vkStream, rootType, (const VkPipelineTessellationStateCreateInfo*)(forMarshaling->pTessellationState), ptr);
     }
 }
 
 void reservedmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->groupCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->groupCount; ++i)
     {
-        reservedmarshal_VkGraphicsShaderGroupCreateInfoNV(vkStream, (const VkGraphicsShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i), ptr);
+        reservedmarshal_VkGraphicsShaderGroupCreateInfoNV(vkStream, rootType, (const VkGraphicsShaderGroupCreateInfoNV*)(forMarshaling->pGroups + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->pipelineCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -11190,20 +13908,24 @@
 
 void reservedmarshal_VkBindShaderGroupIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->groupIndex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkBindIndexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->bufferAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
     memcpy(*ptr, (uint32_t*)&forMarshaling->size, sizeof(uint32_t));
@@ -11214,10 +13936,12 @@
 
 void reservedmarshal_VkBindVertexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->bufferAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
     memcpy(*ptr, (uint32_t*)&forMarshaling->size, sizeof(uint32_t));
@@ -11228,20 +13952,24 @@
 
 void reservedmarshal_VkSetStateFlagsIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->data, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkIndirectCommandsStreamNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkBuffer((*&forMarshaling->buffer));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -11252,13 +13980,19 @@
 
 void reservedmarshal_VkIndirectCommandsLayoutTokenNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkIndirectCommandsTokenTypeNV*)&forMarshaling->tokenType, sizeof(VkIndirectCommandsTokenTypeNV));
     *ptr += sizeof(VkIndirectCommandsTokenTypeNV);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stream, sizeof(uint32_t));
@@ -11291,13 +14025,19 @@
 
 void reservedmarshal_VkIndirectCommandsLayoutCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkIndirectCommandsLayoutUsageFlagsNV*)&forMarshaling->flags, sizeof(VkIndirectCommandsLayoutUsageFlagsNV));
     *ptr += sizeof(VkIndirectCommandsLayoutUsageFlagsNV);
     memcpy(*ptr, (VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
@@ -11306,7 +14046,7 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->tokenCount; ++i)
     {
-        reservedmarshal_VkIndirectCommandsLayoutTokenNV(vkStream, (const VkIndirectCommandsLayoutTokenNV*)(forMarshaling->pTokens + i), ptr);
+        reservedmarshal_VkIndirectCommandsLayoutTokenNV(vkStream, rootType, (const VkIndirectCommandsLayoutTokenNV*)(forMarshaling->pTokens + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->streamCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -11316,13 +14056,19 @@
 
 void reservedmarshal_VkGeneratedCommandsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     *ptr += sizeof(VkPipelineBindPoint);
     uint64_t cgen_var_0;
@@ -11337,7 +14083,7 @@
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->streamCount; ++i)
     {
-        reservedmarshal_VkIndirectCommandsStreamNV(vkStream, (const VkIndirectCommandsStreamNV*)(forMarshaling->pStreams + i), ptr);
+        reservedmarshal_VkIndirectCommandsStreamNV(vkStream, rootType, (const VkIndirectCommandsStreamNV*)(forMarshaling->pStreams + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->sequencesCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -11365,13 +14111,19 @@
 
 void reservedmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineBindPoint*)&forMarshaling->pipelineBindPoint, sizeof(VkPipelineBindPoint));
     *ptr += sizeof(VkPipelineBindPoint);
     uint64_t cgen_var_0;
@@ -11390,26 +14142,38 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->texelBufferAlignment, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->storageTexelBufferOffsetAlignmentBytes, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkBool32*)&forMarshaling->storageTexelBufferOffsetSingleTexelAlignment, sizeof(VkBool32));
@@ -11424,55 +14188,79 @@
 #ifdef VK_QCOM_render_pass_transform
 void reservedmarshal_VkRenderPassTransformBeginInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
     *ptr += sizeof(VkSurfaceTransformFlagBitsKHR);
 }
 
 void reservedmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
     *ptr += sizeof(VkSurfaceTransformFlagBitsKHR);
-    reservedmarshal_VkRect2D(vkStream, (VkRect2D*)(&forMarshaling->renderArea), ptr);
+    reservedmarshal_VkRect2D(vkStream, rootType, (VkRect2D*)(&forMarshaling->renderArea), ptr);
 }
 
 #endif
 #ifdef VK_EXT_device_memory_report
 void reservedmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->deviceMemoryReport, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkDeviceMemoryReportCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceMemoryReportFlagsEXT*)&forMarshaling->flags, sizeof(VkDeviceMemoryReportFlagsEXT));
     *ptr += sizeof(VkDeviceMemoryReportFlagsEXT);
     memcpy(*ptr, (VkDeviceMemoryReportEventTypeEXT*)&forMarshaling->type, sizeof(VkDeviceMemoryReportEventTypeEXT));
@@ -11491,13 +14279,19 @@
 
 void reservedmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceMemoryReportFlagsEXT*)&forMarshaling->flags, sizeof(VkDeviceMemoryReportFlagsEXT));
     *ptr += sizeof(VkDeviceMemoryReportFlagsEXT);
     uint64_t cgen_var_0 = (uint64_t)forMarshaling->pfnUserCallback;
@@ -11512,13 +14306,19 @@
 #ifdef VK_EXT_robustness2
 void reservedmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->robustBufferAccess2, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->robustImageAccess2, sizeof(VkBool32));
@@ -11529,13 +14329,19 @@
 
 void reservedmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->robustStorageBufferAccessSizeAlignment, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->robustUniformBufferAccessSizeAlignment, sizeof(VkDeviceSize));
@@ -11546,40 +14352,58 @@
 #ifdef VK_EXT_custom_border_color
 void reservedmarshal_VkSamplerCustomBorderColorCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkClearColorValue(vkStream, (VkClearColorValue*)(&forMarshaling->customBorderColor), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkClearColorValue(vkStream, rootType, (VkClearColorValue*)(&forMarshaling->customBorderColor), ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
 }
 
 void reservedmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxCustomBorderColorSamplers, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->customBorderColors, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->customBorderColorWithoutFormat, sizeof(VkBool32));
@@ -11592,39 +14416,57 @@
 #ifdef VK_EXT_private_data
 void reservedmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->privateData, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkDevicePrivateDataCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->privateDataSlotRequestCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
 }
 
 void reservedmarshal_VkPrivateDataSlotCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPrivateDataSlotCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkPrivateDataSlotCreateFlagsEXT));
     *ptr += sizeof(VkPrivateDataSlotCreateFlagsEXT);
 }
@@ -11633,13 +14475,19 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void reservedmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->pipelineCreationCacheControl, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -11648,26 +14496,38 @@
 #ifdef VK_NV_device_diagnostics_config
 void reservedmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->diagnosticsConfig, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceDiagnosticsConfigFlagsNV*)&forMarshaling->flags, sizeof(VkDeviceDiagnosticsConfigFlagsNV));
     *ptr += sizeof(VkDeviceDiagnosticsConfigFlagsNV);
 }
@@ -11678,13 +14538,19 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentShadingRateEnums, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->supersampleFragmentShadingRates, sizeof(VkBool32));
@@ -11695,26 +14561,38 @@
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSampleCountFlagBits*)&forMarshaling->maxFragmentShadingRateInvocationCount, sizeof(VkSampleCountFlagBits));
     *ptr += sizeof(VkSampleCountFlagBits);
 }
 
 void reservedmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFragmentShadingRateTypeNV*)&forMarshaling->shadingRateType, sizeof(VkFragmentShadingRateTypeNV));
     *ptr += sizeof(VkFragmentShadingRateTypeNV);
     memcpy(*ptr, (VkFragmentShadingRateNV*)&forMarshaling->shadingRate, sizeof(VkFragmentShadingRateNV));
@@ -11727,26 +14605,38 @@
 #ifdef VK_EXT_fragment_density_map2
 void reservedmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->fragmentDensityMapDeferred, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
 
 void reservedmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->subsampledLoads, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->subsampledCoarseReconstructionEarlyAccess, sizeof(VkBool32));
@@ -11761,13 +14651,19 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void reservedmarshal_VkCopyCommandTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkSurfaceTransformFlagBitsKHR*)&forMarshaling->transform, sizeof(VkSurfaceTransformFlagBitsKHR));
     *ptr += sizeof(VkSurfaceTransformFlagBitsKHR);
 }
@@ -11776,13 +14672,19 @@
 #ifdef VK_EXT_image_robustness
 void reservedmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->robustImageAccess, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -11791,13 +14693,19 @@
 #ifdef VK_EXT_4444_formats
 void reservedmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->formatA4R4G4B4, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->formatA4B4G4R4, sizeof(VkBool32));
@@ -11808,13 +14716,19 @@
 #ifdef VK_EXT_directfb_surface
 void reservedmarshal_VkDirectFBSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDirectFBSurfaceCreateFlagsEXT*)&forMarshaling->flags, sizeof(VkDirectFBSurfaceCreateFlagsEXT));
     *ptr += sizeof(VkDirectFBSurfaceCreateFlagsEXT);
     // WARNING PTR CHECK
@@ -11841,34 +14755,105 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void reservedmarshal_VkImportColorBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* forMarshaling,
+    uint8_t** ptr)
+{
+    (void)vkStream;
+    (void)rootType;
+    memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    memcpy(*ptr, (uint32_t*)&forMarshaling->colorBuffer, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}
+
+void reservedmarshal_VkImportBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* forMarshaling,
+    uint8_t** ptr)
+{
+    (void)vkStream;
+    (void)rootType;
+    memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    memcpy(*ptr, (uint32_t*)&forMarshaling->buffer, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}
+
+void reservedmarshal_VkImportPhysicalAddressGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* forMarshaling,
+    uint8_t** ptr)
+{
+    (void)vkStream;
+    (void)rootType;
+    memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    memcpy(*ptr, (uint64_t*)&forMarshaling->physicalAddress, sizeof(uint64_t));
+    *ptr += sizeof(uint64_t);
+    memcpy(*ptr, (VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
+    *ptr += sizeof(VkDeviceSize);
+    memcpy(*ptr, (VkFormat*)&forMarshaling->format, sizeof(VkFormat));
+    *ptr += sizeof(VkFormat);
+    memcpy(*ptr, (VkImageTiling*)&forMarshaling->tiling, sizeof(VkImageTiling));
+    *ptr += sizeof(VkImageTiling);
+    memcpy(*ptr, (uint32_t*)&forMarshaling->tilingParameter, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+}
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void reservedmarshal_VkDeviceOrHostAddressKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
 }
 
 void reservedmarshal_VkDeviceOrHostAddressConstKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
 }
 
 void reservedmarshal_VkAccelerationStructureBuildRangeInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->primitiveCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->primitiveOffset, sizeof(uint32_t));
@@ -11881,88 +14866,120 @@
 
 void reservedmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkFormat*)&forMarshaling->vertexFormat, sizeof(VkFormat));
     *ptr += sizeof(VkFormat);
-    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->vertexData), ptr);
+    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->vertexData), ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->vertexStride, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxVertex, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (VkIndexType*)&forMarshaling->indexType, sizeof(VkIndexType));
     *ptr += sizeof(VkIndexType);
-    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->indexData), ptr);
-    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->transformData), ptr);
+    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->indexData), ptr);
+    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->transformData), ptr);
 }
 
 void reservedmarshal_VkAccelerationStructureGeometryAabbsDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data), ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->stride, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
 }
 
 void reservedmarshal_VkAccelerationStructureGeometryInstancesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->arrayOfPointers, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
-    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data), ptr);
+    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->data), ptr);
 }
 
 void reservedmarshal_VkAccelerationStructureGeometryDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
-    reservedmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(vkStream, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&forMarshaling->triangles), ptr);
+    (void)rootType;
+    reservedmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(vkStream, rootType, (VkAccelerationStructureGeometryTrianglesDataKHR*)(&forMarshaling->triangles), ptr);
 }
 
 void reservedmarshal_VkAccelerationStructureGeometryKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkGeometryTypeKHR*)&forMarshaling->geometryType, sizeof(VkGeometryTypeKHR));
     *ptr += sizeof(VkGeometryTypeKHR);
-    reservedmarshal_VkAccelerationStructureGeometryDataKHR(vkStream, (VkAccelerationStructureGeometryDataKHR*)(&forMarshaling->geometry), ptr);
+    reservedmarshal_VkAccelerationStructureGeometryDataKHR(vkStream, rootType, (VkAccelerationStructureGeometryDataKHR*)(&forMarshaling->geometry), ptr);
     memcpy(*ptr, (VkGeometryFlagsKHR*)&forMarshaling->flags, sizeof(VkGeometryFlagsKHR));
     *ptr += sizeof(VkGeometryFlagsKHR);
 }
 
 void reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccelerationStructureTypeKHR*)&forMarshaling->type, sizeof(VkAccelerationStructureTypeKHR));
     *ptr += sizeof(VkAccelerationStructureTypeKHR);
     memcpy(*ptr, (VkBuildAccelerationStructureFlagsKHR*)&forMarshaling->flags, sizeof(VkBuildAccelerationStructureFlagsKHR));
@@ -11988,21 +15005,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)forMarshaling->geometryCount; ++i)
         {
-            reservedmarshal_VkAccelerationStructureGeometryKHR(vkStream, (const VkAccelerationStructureGeometryKHR*)(forMarshaling->pGeometries + i), ptr);
+            reservedmarshal_VkAccelerationStructureGeometryKHR(vkStream, rootType, (const VkAccelerationStructureGeometryKHR*)(forMarshaling->pGeometries + i), ptr);
         }
     }
-    reservedmarshal_VkDeviceOrHostAddressKHR(vkStream, (VkDeviceOrHostAddressKHR*)(&forMarshaling->scratchData), ptr);
+    reservedmarshal_VkDeviceOrHostAddressKHR(vkStream, rootType, (VkDeviceOrHostAddressKHR*)(&forMarshaling->scratchData), ptr);
 }
 
 void reservedmarshal_VkAccelerationStructureCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkAccelerationStructureCreateFlagsKHR*)&forMarshaling->createFlags, sizeof(VkAccelerationStructureCreateFlagsKHR));
     *ptr += sizeof(VkAccelerationStructureCreateFlagsKHR);
     uint64_t cgen_var_0;
@@ -12021,13 +15044,19 @@
 
 void reservedmarshal_VkWriteDescriptorSetAccelerationStructureKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->accelerationStructureCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     // WARNING PTR CHECK
@@ -12055,13 +15084,19 @@
 
 void reservedmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->accelerationStructure, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->accelerationStructureCaptureReplay, sizeof(VkBool32));
@@ -12076,13 +15111,19 @@
 
 void reservedmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint64_t*)&forMarshaling->maxGeometryCount, sizeof(uint64_t));
     *ptr += sizeof(uint64_t);
     memcpy(*ptr, (uint64_t*)&forMarshaling->maxInstanceCount, sizeof(uint64_t));
@@ -12103,13 +15144,19 @@
 
 void reservedmarshal_VkAccelerationStructureDeviceAddressInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkAccelerationStructureKHR((*&forMarshaling->accelerationStructure));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -12118,45 +15165,63 @@
 
 void reservedmarshal_VkAccelerationStructureVersionInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (const uint8_t*)forMarshaling->pVersionData, 2*VK_UUID_SIZE * sizeof(const uint8_t));
     *ptr += 2*VK_UUID_SIZE * sizeof(const uint8_t);
 }
 
 void reservedmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkAccelerationStructureKHR((*&forMarshaling->src));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
     *ptr += 1 * 8;
-    reservedmarshal_VkDeviceOrHostAddressKHR(vkStream, (VkDeviceOrHostAddressKHR*)(&forMarshaling->dst), ptr);
+    reservedmarshal_VkDeviceOrHostAddressKHR(vkStream, rootType, (VkDeviceOrHostAddressKHR*)(&forMarshaling->dst), ptr);
     memcpy(*ptr, (VkCopyAccelerationStructureModeKHR*)&forMarshaling->mode, sizeof(VkCopyAccelerationStructureModeKHR));
     *ptr += sizeof(VkCopyAccelerationStructureModeKHR);
 }
 
 void reservedmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
-    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->src), ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
+    reservedmarshal_VkDeviceOrHostAddressConstKHR(vkStream, rootType, (VkDeviceOrHostAddressConstKHR*)(&forMarshaling->src), ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkAccelerationStructureKHR((*&forMarshaling->dst));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -12167,13 +15232,19 @@
 
 void reservedmarshal_VkCopyAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     uint64_t cgen_var_0;
     *&cgen_var_0 = get_host_u64_VkAccelerationStructureKHR((*&forMarshaling->src));
     memcpy(*ptr, (uint64_t*)&cgen_var_0, 1 * 8);
@@ -12188,13 +15259,19 @@
 
 void reservedmarshal_VkAccelerationStructureBuildSizesInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->accelerationStructureSize, sizeof(VkDeviceSize));
     *ptr += sizeof(VkDeviceSize);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->updateScratchSize, sizeof(VkDeviceSize));
@@ -12207,13 +15284,19 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void reservedmarshal_VkRayTracingShaderGroupCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkRayTracingShaderGroupTypeKHR*)&forMarshaling->type, sizeof(VkRayTracingShaderGroupTypeKHR));
     *ptr += sizeof(VkRayTracingShaderGroupTypeKHR);
     memcpy(*ptr, (uint32_t*)&forMarshaling->generalShader, sizeof(uint32_t));
@@ -12238,13 +15321,19 @@
 
 void reservedmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxPipelineRayPayloadSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxPipelineRayHitAttributeSize, sizeof(uint32_t));
@@ -12253,26 +15342,32 @@
 
 void reservedmarshal_VkRayTracingPipelineCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkPipelineCreateFlags*)&forMarshaling->flags, sizeof(VkPipelineCreateFlags));
     *ptr += sizeof(VkPipelineCreateFlags);
     memcpy(*ptr, (uint32_t*)&forMarshaling->stageCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->stageCount; ++i)
     {
-        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
+        reservedmarshal_VkPipelineShaderStageCreateInfo(vkStream, rootType, (const VkPipelineShaderStageCreateInfo*)(forMarshaling->pStages + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->groupCount, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     for (uint32_t i = 0; i < (uint32_t)forMarshaling->groupCount; ++i)
     {
-        reservedmarshal_VkRayTracingShaderGroupCreateInfoKHR(vkStream, (const VkRayTracingShaderGroupCreateInfoKHR*)(forMarshaling->pGroups + i), ptr);
+        reservedmarshal_VkRayTracingShaderGroupCreateInfoKHR(vkStream, rootType, (const VkRayTracingShaderGroupCreateInfoKHR*)(forMarshaling->pGroups + i), ptr);
     }
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxPipelineRayRecursionDepth, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
@@ -12283,7 +15378,7 @@
     *ptr += 8;
     if (forMarshaling->pLibraryInfo)
     {
-        reservedmarshal_VkPipelineLibraryCreateInfoKHR(vkStream, (const VkPipelineLibraryCreateInfoKHR*)(forMarshaling->pLibraryInfo), ptr);
+        reservedmarshal_VkPipelineLibraryCreateInfoKHR(vkStream, rootType, (const VkPipelineLibraryCreateInfoKHR*)(forMarshaling->pLibraryInfo), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_1 = (uint64_t)(uintptr_t)forMarshaling->pLibraryInterface;
@@ -12292,7 +15387,7 @@
     *ptr += 8;
     if (forMarshaling->pLibraryInterface)
     {
-        reservedmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(vkStream, (const VkRayTracingPipelineInterfaceCreateInfoKHR*)(forMarshaling->pLibraryInterface), ptr);
+        reservedmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(vkStream, rootType, (const VkRayTracingPipelineInterfaceCreateInfoKHR*)(forMarshaling->pLibraryInterface), ptr);
     }
     // WARNING PTR CHECK
     uint64_t cgen_var_2 = (uint64_t)(uintptr_t)forMarshaling->pDynamicState;
@@ -12301,7 +15396,7 @@
     *ptr += 8;
     if (forMarshaling->pDynamicState)
     {
-        reservedmarshal_VkPipelineDynamicStateCreateInfo(vkStream, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState), ptr);
+        reservedmarshal_VkPipelineDynamicStateCreateInfo(vkStream, rootType, (const VkPipelineDynamicStateCreateInfo*)(forMarshaling->pDynamicState), ptr);
     }
     uint64_t cgen_var_3;
     *&cgen_var_3 = get_host_u64_VkPipelineLayout((*&forMarshaling->layout));
@@ -12317,13 +15412,19 @@
 
 void reservedmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->rayTracingPipeline, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
     memcpy(*ptr, (VkBool32*)&forMarshaling->rayTracingPipelineShaderGroupHandleCaptureReplay, sizeof(VkBool32));
@@ -12338,13 +15439,19 @@
 
 void reservedmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (uint32_t*)&forMarshaling->shaderGroupHandleSize, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->maxRayRecursionDepth, sizeof(uint32_t));
@@ -12365,10 +15472,12 @@
 
 void reservedmarshal_VkStridedDeviceAddressRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkDeviceAddress*)&forMarshaling->deviceAddress, sizeof(VkDeviceAddress));
     *ptr += sizeof(VkDeviceAddress);
     memcpy(*ptr, (VkDeviceSize*)&forMarshaling->stride, sizeof(VkDeviceSize));
@@ -12379,10 +15488,12 @@
 
 void reservedmarshal_VkTraceRaysIndirectCommandKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (uint32_t*)&forMarshaling->width, sizeof(uint32_t));
     *ptr += sizeof(uint32_t);
     memcpy(*ptr, (uint32_t*)&forMarshaling->height, sizeof(uint32_t));
@@ -12395,13 +15506,19 @@
 #ifdef VK_KHR_ray_query
 void reservedmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* forMarshaling,
     uint8_t** ptr)
 {
     (void)vkStream;
+    (void)rootType;
     memcpy(*ptr, (VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
     *ptr += sizeof(VkStructureType);
-    reservedmarshal_extension_struct(vkStream, forMarshaling->pNext, ptr);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM)
+    {
+        rootType = forMarshaling->sType;
+    }
+    reservedmarshal_extension_struct(vkStream, rootType, forMarshaling->pNext, ptr);
     memcpy(*ptr, (VkBool32*)&forMarshaling->rayQuery, sizeof(VkBool32));
     *ptr += sizeof(VkBool32);
 }
@@ -12409,15 +15526,16 @@
 #endif
 void reservedmarshal_extension_struct(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const void* structExtension,
     uint8_t** ptr)
 {
     VkInstanceCreateInfo* structAccess = (VkInstanceCreateInfo*)(structExtension);
-    uint32_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(vkStream->getFeatureBits(), structExtension);
+    uint32_t currExtSize = goldfish_vk_extension_struct_size_with_stream_features(vkStream->getFeatureBits(), rootType, structExtension);
     if (!currExtSize && structExtension)
     {
         // unknown struct extension; skip and call on its pNext field
-        reservedmarshal_extension_struct(vkStream, (void*)structAccess->pNext, ptr);
+        reservedmarshal_extension_struct(vkStream, rootType, (void*)structAccess->pNext, ptr);
         return;
     }
     else
@@ -12442,1535 +15560,1613 @@
 #ifdef VK_VERSION_1_1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceSubgroupProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSubgroupProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
         {
-            reservedmarshal_VkPhysicalDevice16BitStorageFeatures(vkStream, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevice16BitStorageFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
         {
-            reservedmarshal_VkMemoryDedicatedRequirements(vkStream, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), ptr);
+            reservedmarshal_VkMemoryDedicatedRequirements(vkStream, rootType, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
         {
-            reservedmarshal_VkMemoryDedicatedAllocateInfo(vkStream, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), ptr);
+            reservedmarshal_VkMemoryDedicatedAllocateInfo(vkStream, rootType, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
         {
-            reservedmarshal_VkMemoryAllocateFlagsInfo(vkStream, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), ptr);
+            reservedmarshal_VkMemoryAllocateFlagsInfo(vkStream, rootType, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
         {
-            reservedmarshal_VkDeviceGroupRenderPassBeginInfo(vkStream, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupRenderPassBeginInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
         {
-            reservedmarshal_VkDeviceGroupCommandBufferBeginInfo(vkStream, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupCommandBufferBeginInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
         {
-            reservedmarshal_VkDeviceGroupSubmitInfo(vkStream, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupSubmitInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
         {
-            reservedmarshal_VkDeviceGroupBindSparseInfo(vkStream, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupBindSparseInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
         {
-            reservedmarshal_VkBindBufferMemoryDeviceGroupInfo(vkStream, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), ptr);
+            reservedmarshal_VkBindBufferMemoryDeviceGroupInfo(vkStream, rootType, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
         {
-            reservedmarshal_VkBindImageMemoryDeviceGroupInfo(vkStream, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), ptr);
+            reservedmarshal_VkBindImageMemoryDeviceGroupInfo(vkStream, rootType, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
         {
-            reservedmarshal_VkDeviceGroupDeviceCreateInfo(vkStream, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupDeviceCreateInfo(vkStream, rootType, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
         {
-            reservedmarshal_VkPhysicalDeviceFeatures2(vkStream, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFeatures2(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDevicePointClippingProperties(vkStream, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePointClippingProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
         {
-            reservedmarshal_VkRenderPassInputAttachmentAspectCreateInfo(vkStream, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkRenderPassInputAttachmentAspectCreateInfo(vkStream, rootType, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
         {
-            reservedmarshal_VkImageViewUsageCreateInfo(vkStream, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkImageViewUsageCreateInfo(vkStream, rootType, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
         {
-            reservedmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(vkStream, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(vkStream, rootType, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
         {
-            reservedmarshal_VkRenderPassMultiviewCreateInfo(vkStream, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkRenderPassMultiviewCreateInfo(vkStream, rootType, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceMultiviewFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMultiviewFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceMultiviewProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMultiviewProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTERS_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceVariablePointersFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVariablePointersFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVariablePointersFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceProtectedMemoryFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceProtectedMemoryFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceProtectedMemoryProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceProtectedMemoryProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
         {
-            reservedmarshal_VkProtectedSubmitInfo(vkStream, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), ptr);
+            reservedmarshal_VkProtectedSubmitInfo(vkStream, rootType, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
         {
-            reservedmarshal_VkSamplerYcbcrConversionInfo(vkStream, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), ptr);
+            reservedmarshal_VkSamplerYcbcrConversionInfo(vkStream, rootType, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
         {
-            reservedmarshal_VkBindImagePlaneMemoryInfo(vkStream, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), ptr);
+            reservedmarshal_VkBindImagePlaneMemoryInfo(vkStream, rootType, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
         {
-            reservedmarshal_VkImagePlaneMemoryRequirementsInfo(vkStream, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), ptr);
+            reservedmarshal_VkImagePlaneMemoryRequirementsInfo(vkStream, rootType, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
         {
-            reservedmarshal_VkSamplerYcbcrConversionImageFormatProperties(vkStream, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), ptr);
+            reservedmarshal_VkSamplerYcbcrConversionImageFormatProperties(vkStream, rootType, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
         {
-            reservedmarshal_VkPhysicalDeviceExternalImageFormatInfo(vkStream, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceExternalImageFormatInfo(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
         {
-            reservedmarshal_VkExternalImageFormatProperties(vkStream, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), ptr);
+            reservedmarshal_VkExternalImageFormatProperties(vkStream, rootType, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceIDProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceIDProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
         {
-            reservedmarshal_VkExternalMemoryImageCreateInfo(vkStream, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkExternalMemoryImageCreateInfo(vkStream, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
         {
-            reservedmarshal_VkExternalMemoryBufferCreateInfo(vkStream, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkExternalMemoryBufferCreateInfo(vkStream, rootType, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
         {
-            reservedmarshal_VkExportMemoryAllocateInfo(vkStream, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), ptr);
+            reservedmarshal_VkExportMemoryAllocateInfo(vkStream, rootType, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
         {
-            reservedmarshal_VkExportFenceCreateInfo(vkStream, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkExportFenceCreateInfo(vkStream, rootType, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
         {
-            reservedmarshal_VkExportSemaphoreCreateInfo(vkStream, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkExportSemaphoreCreateInfo(vkStream, rootType, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceMaintenance3Properties(vkStream, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMaintenance3Properties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETERS_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDrawParametersFeatures*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_VERSION_1_2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceVulkan11Features(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVulkan11Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Features*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_1_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceVulkan11Properties(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVulkan11Properties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan11Properties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceVulkan12Features(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVulkan12Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Features*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_1_2_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceVulkan12Properties(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVulkan12Properties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkan12Properties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
         {
-            reservedmarshal_VkImageFormatListCreateInfo(vkStream, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkImageFormatListCreateInfo(vkStream, rootType, reinterpret_cast<const VkImageFormatListCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES:
         {
-            reservedmarshal_VkPhysicalDevice8BitStorageFeatures(vkStream, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevice8BitStorageFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDevice8BitStorageFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DRIVER_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceDriverProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDriverProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDriverProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_INT64_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceShaderAtomicInt64Features(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderAtomicInt64Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicInt64Features*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_FLOAT16_INT8_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceShaderFloat16Int8Features(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderFloat16Int8Features(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderFloat16Int8Features*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FLOAT_CONTROLS_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceFloatControlsProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFloatControlsProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFloatControlsProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO:
         {
-            reservedmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkStream, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(vkStream, rootType, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceDescriptorIndexingProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDescriptorIndexingProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:
         {
-            reservedmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkStream, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension), ptr);
+            reservedmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(vkStream, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT:
         {
-            reservedmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkStream, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension), ptr);
+            reservedmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(vkStream, rootType, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupport*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SUBPASS_DESCRIPTION_DEPTH_STENCIL_RESOLVE:
         {
-            reservedmarshal_VkSubpassDescriptionDepthStencilResolve(vkStream, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension), ptr);
+            reservedmarshal_VkSubpassDescriptionDepthStencilResolve(vkStream, rootType, reinterpret_cast<const VkSubpassDescriptionDepthStencilResolve*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_STENCIL_RESOLVE_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceDepthStencilResolveProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDepthStencilResolveProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDepthStencilResolveProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SCALAR_BLOCK_LAYOUT_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceScalarBlockLayoutFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
         {
-            reservedmarshal_VkImageStencilUsageCreateInfo(vkStream, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkImageStencilUsageCreateInfo(vkStream, rootType, reinterpret_cast<const VkImageStencilUsageCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO:
         {
-            reservedmarshal_VkSamplerReductionModeCreateInfo(vkStream, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkSamplerReductionModeCreateInfo(vkStream, rootType, reinterpret_cast<const VkSamplerReductionModeCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VULKAN_MEMORY_MODEL_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVulkanMemoryModelFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGELESS_FRAMEBUFFER_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImagelessFramebufferFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO:
         {
-            reservedmarshal_VkFramebufferAttachmentsCreateInfo(vkStream, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkFramebufferAttachmentsCreateInfo(vkStream, rootType, reinterpret_cast<const VkFramebufferAttachmentsCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_ATTACHMENT_BEGIN_INFO:
         {
-            reservedmarshal_VkRenderPassAttachmentBeginInfo(vkStream, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension), ptr);
+            reservedmarshal_VkRenderPassAttachmentBeginInfo(vkStream, rootType, reinterpret_cast<const VkRenderPassAttachmentBeginInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_UNIFORM_BUFFER_STANDARD_LAYOUT_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceUniformBufferStandardLayoutFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SUBGROUP_EXTENDED_TYPES_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SEPARATE_DEPTH_STENCIL_LAYOUTS_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_REFERENCE_STENCIL_LAYOUT:
         {
-            reservedmarshal_VkAttachmentReferenceStencilLayout(vkStream, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension), ptr);
+            reservedmarshal_VkAttachmentReferenceStencilLayout(vkStream, rootType, reinterpret_cast<const VkAttachmentReferenceStencilLayout*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_ATTACHMENT_DESCRIPTION_STENCIL_LAYOUT:
         {
-            reservedmarshal_VkAttachmentDescriptionStencilLayout(vkStream, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension), ptr);
+            reservedmarshal_VkAttachmentDescriptionStencilLayout(vkStream, rootType, reinterpret_cast<const VkAttachmentDescriptionStencilLayout*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_QUERY_RESET_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceHostQueryResetFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceHostQueryResetFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceHostQueryResetFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TIMELINE_SEMAPHORE_PROPERTIES:
         {
-            reservedmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(vkStream, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTimelineSemaphoreProperties*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
         {
-            reservedmarshal_VkSemaphoreTypeCreateInfo(vkStream, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkSemaphoreTypeCreateInfo(vkStream, rootType, reinterpret_cast<const VkSemaphoreTypeCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
         {
-            reservedmarshal_VkTimelineSemaphoreSubmitInfo(vkStream, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension), ptr);
+            reservedmarshal_VkTimelineSemaphoreSubmitInfo(vkStream, rootType, reinterpret_cast<const VkTimelineSemaphoreSubmitInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES:
         {
-            reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(vkStream, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeatures*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_OPAQUE_CAPTURE_ADDRESS_CREATE_INFO:
         {
-            reservedmarshal_VkBufferOpaqueCaptureAddressCreateInfo(vkStream, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension), ptr);
+            reservedmarshal_VkBufferOpaqueCaptureAddressCreateInfo(vkStream, rootType, reinterpret_cast<const VkBufferOpaqueCaptureAddressCreateInfo*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
         {
-            reservedmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(vkStream, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension), ptr);
+            reservedmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(vkStream, rootType, reinterpret_cast<const VkMemoryOpaqueCaptureAddressAllocateInfo*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_swapchain
         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            reservedmarshal_VkImageSwapchainCreateInfoKHR(vkStream, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkImageSwapchainCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
         {
-            reservedmarshal_VkBindImageMemorySwapchainInfoKHR(vkStream, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkBindImageMemorySwapchainInfoKHR(vkStream, rootType, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
         {
-            reservedmarshal_VkDeviceGroupPresentInfoKHR(vkStream, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupPresentInfoKHR(vkStream, rootType, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            reservedmarshal_VkDeviceGroupSwapchainCreateInfoKHR(vkStream, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkDeviceGroupSwapchainCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_display_swapchain
         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
         {
-            reservedmarshal_VkDisplayPresentInfoKHR(vkStream, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkDisplayPresentInfoKHR(vkStream, rootType, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            reservedmarshal_VkImportMemoryWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkImportMemoryWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            reservedmarshal_VkExportMemoryWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkExportMemoryWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_fd
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
         {
-            reservedmarshal_VkImportMemoryFdInfoKHR(vkStream, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkImportMemoryFdInfoKHR(vkStream, rootType, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
         {
-            reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(vkStream, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(vkStream, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_external_semaphore_win32
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
         {
-            reservedmarshal_VkExportSemaphoreWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkExportSemaphoreWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
         {
-            reservedmarshal_VkD3D12FenceSubmitInfoKHR(vkStream, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkD3D12FenceSubmitInfoKHR(vkStream, rootType, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_push_descriptor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
         {
-            reservedmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_incremental_present
         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
         {
-            reservedmarshal_VkPresentRegionsKHR(vkStream, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), ptr);
+            reservedmarshal_VkPresentRegionsKHR(vkStream, rootType, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_shared_presentable_image
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
         {
-            reservedmarshal_VkSharedPresentSurfaceCapabilitiesKHR(vkStream, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkSharedPresentSurfaceCapabilitiesKHR(vkStream, rootType, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_external_fence_win32
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
         {
-            reservedmarshal_VkExportFenceWin32HandleInfoKHR(vkStream, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkExportFenceWin32HandleInfoKHR(vkStream, rootType, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_performance_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryFeaturesKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PERFORMANCE_QUERY_PROPERTIES_KHR:
         {
-            reservedmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePerformanceQueryPropertiesKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_CREATE_INFO_KHR:
         {
-            reservedmarshal_VkQueryPoolPerformanceCreateInfoKHR(vkStream, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkQueryPoolPerformanceCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkQueryPoolPerformanceCreateInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PERFORMANCE_QUERY_SUBMIT_INFO_KHR:
         {
-            reservedmarshal_VkPerformanceQuerySubmitInfoKHR(vkStream, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkPerformanceQuerySubmitInfoKHR(vkStream, rootType, reinterpret_cast<const VkPerformanceQuerySubmitInfoKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_portability_subset
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetFeaturesKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PORTABILITY_SUBSET_PROPERTIES_KHR:
         {
-            reservedmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePortabilitySubsetPropertiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_shader_clock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CLOCK_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderClockFeaturesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_shader_terminate_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_TERMINATE_INVOCATION_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_fragment_shading_rate
         case VK_STRUCTURE_TYPE_FRAGMENT_SHADING_RATE_ATTACHMENT_INFO_KHR:
         {
-            reservedmarshal_VkFragmentShadingRateAttachmentInfoKHR(vkStream, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkFragmentShadingRateAttachmentInfoKHR(vkStream, rootType, reinterpret_cast<const VkFragmentShadingRateAttachmentInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_STATE_CREATE_INFO_KHR:
         {
-            reservedmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkStream, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension), ptr);
+            reservedmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(vkStream, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateStateCreateInfoKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateFeaturesKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_PROPERTIES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRatePropertiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_surface_protected_capabilities
         case VK_STRUCTURE_TYPE_SURFACE_PROTECTED_CAPABILITIES_KHR:
         {
-            reservedmarshal_VkSurfaceProtectedCapabilitiesKHR(vkStream, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkSurfaceProtectedCapabilitiesKHR(vkStream, rootType, reinterpret_cast<const VkSurfaceProtectedCapabilitiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_pipeline_executable_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_EXECUTABLE_PROPERTIES_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
         {
-            reservedmarshal_VkNativeBufferANDROID(vkStream, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), ptr);
+            reservedmarshal_VkNativeBufferANDROID(vkStream, rootType, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_debug_report
         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkDebugReportCallbackCreateInfoEXT(vkStream, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkDebugReportCallbackCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_rasterization_order
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
         {
-            reservedmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(vkStream, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), ptr);
+            reservedmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkDedicatedAllocationImageCreateInfoNV(vkStream, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkDedicatedAllocationImageCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
         {
-            reservedmarshal_VkDedicatedAllocationBufferCreateInfoNV(vkStream, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkDedicatedAllocationBufferCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
         {
-            reservedmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(vkStream, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(vkStream, rootType, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_transform_feedback
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TRANSFORM_FEEDBACK_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTransformFeedbackPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_STREAM_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationStateStreamCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
         {
-            reservedmarshal_VkTextureLODGatherFormatPropertiesAMD(vkStream, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), ptr);
+            reservedmarshal_VkTextureLODGatherFormatPropertiesAMD(vkStream, rootType, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_corner_sampled_image
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CORNER_SAMPLED_IMAGE_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCornerSampledImageFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_external_memory
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkExternalMemoryImageCreateInfoNV(vkStream, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkExternalMemoryImageCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
         {
-            reservedmarshal_VkExportMemoryAllocateInfoNV(vkStream, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkExportMemoryAllocateInfoNV(vkStream, rootType, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            reservedmarshal_VkImportMemoryWin32HandleInfoNV(vkStream, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkImportMemoryWin32HandleInfoNV(vkStream, rootType, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            reservedmarshal_VkExportMemoryWin32HandleInfoNV(vkStream, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkExportMemoryWin32HandleInfoNV(vkStream, rootType, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
         {
-            reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(vkStream, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(vkStream, rootType, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_validation_flags
         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
         {
-            reservedmarshal_VkValidationFlagsEXT(vkStream, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), ptr);
+            reservedmarshal_VkValidationFlagsEXT(vkStream, rootType, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_texture_compression_astc_hdr
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXTURE_COMPRESSION_ASTC_HDR_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_astc_decode_mode
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_ASTC_DECODE_MODE_EXT:
         {
-            reservedmarshal_VkImageViewASTCDecodeModeEXT(vkStream, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension), ptr);
+            reservedmarshal_VkImageViewASTCDecodeModeEXT(vkStream, rootType, reinterpret_cast<const VkImageViewASTCDecodeModeEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ASTC_DECODE_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceASTCDecodeFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_conditional_rendering
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
         {
-            reservedmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkStream, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(vkStream, rootType, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_clip_space_w_scaling
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineViewportWScalingStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineViewportWScalingStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_display_control
         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkSwapchainCounterCreateInfoEXT(vkStream, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkSwapchainCounterCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_GOOGLE_display_timing
         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
         {
-            reservedmarshal_VkPresentTimesInfoGOOGLE(vkStream, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), ptr);
+            reservedmarshal_VkPresentTimesInfoGOOGLE(vkStream, rootType, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
         {
-            reservedmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(vkStream, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_viewport_swizzle
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_discard_rectangles
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_conservative_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_depth_clip_enable
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEPTH_CLIP_ENABLE_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDepthClipEnableFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_DEPTH_CLIP_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationDepthClipStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_debug_utils
         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkDebugUtilsMessengerCreateInfoEXT(vkStream, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkDebugUtilsMessengerCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
         {
-            reservedmarshal_VkAndroidHardwareBufferUsageANDROID(vkStream, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), ptr);
+            reservedmarshal_VkAndroidHardwareBufferUsageANDROID(vkStream, rootType, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
         {
-            reservedmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(vkStream, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), ptr);
+            reservedmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(vkStream, rootType, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
         {
-            reservedmarshal_VkImportAndroidHardwareBufferInfoANDROID(vkStream, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), ptr);
+            reservedmarshal_VkImportAndroidHardwareBufferInfoANDROID(vkStream, rootType, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
         {
-            reservedmarshal_VkExternalFormatANDROID(vkStream, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), ptr);
+            reservedmarshal_VkExternalFormatANDROID(vkStream, rootType, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_inline_uniform_block
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INLINE_UNIFORM_BLOCK_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceInlineUniformBlockPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK_EXT:
         {
-            reservedmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(vkStream, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension), ptr);
+            reservedmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(vkStream, rootType, reinterpret_cast<const VkWriteDescriptorSetInlineUniformBlockEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_POOL_INLINE_UNIFORM_BLOCK_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(vkStream, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDescriptorPoolInlineUniformBlockCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_sample_locations
         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
         {
-            reservedmarshal_VkSampleLocationsInfoEXT(vkStream, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkSampleLocationsInfoEXT(vkStream, rootType, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
         {
-            reservedmarshal_VkRenderPassSampleLocationsBeginInfoEXT(vkStream, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkRenderPassSampleLocationsBeginInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_blend_operation_advanced
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineCoverageToColorStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineCoverageToColorStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineCoverageModulationStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineCoverageModulationStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_shader_sm_builtins
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_SM_BUILTINS_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_image_drm_format_modifier
         case VK_STRUCTURE_TYPE_DRM_FORMAT_MODIFIER_PROPERTIES_LIST_EXT:
         {
-            reservedmarshal_VkDrmFormatModifierPropertiesListEXT(vkStream, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension), ptr);
+            reservedmarshal_VkDrmFormatModifierPropertiesListEXT(vkStream, rootType, reinterpret_cast<const VkDrmFormatModifierPropertiesListEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_DRM_FORMAT_MODIFIER_INFO_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImageDrmFormatModifierInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_LIST_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkImageDrmFormatModifierListCreateInfoEXT(vkStream, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkImageDrmFormatModifierListCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkImageDrmFormatModifierListCreateInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_DRM_FORMAT_MODIFIER_EXPLICIT_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkStream, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkImageDrmFormatModifierExplicitCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_validation_cache
         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkShaderModuleValidationCacheCreateInfoEXT(vkStream, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkShaderModuleValidationCacheCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_shading_rate_image
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SHADING_RATE_IMAGE_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportShadingRateImageStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImageFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADING_RATE_IMAGE_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShadingRateImagePropertiesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_COARSE_SAMPLE_ORDER_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_ray_tracing
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_NV:
         {
-            reservedmarshal_VkWriteDescriptorSetAccelerationStructureNV(vkStream, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension), ptr);
+            reservedmarshal_VkWriteDescriptorSetAccelerationStructureNV(vkStream, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceRayTracingPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRayTracingPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPropertiesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_representative_fragment_test
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_REPRESENTATIVE_FRAGMENT_TEST_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_REPRESENTATIVE_FRAGMENT_TEST_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineRepresentativeFragmentTestStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_filter_cubic
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_VIEW_IMAGE_FORMAT_INFO_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImageViewImageFormatInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_FILTER_CUBIC_IMAGE_VIEW_IMAGE_FORMAT_PROPERTIES_EXT:
         {
-            reservedmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(vkStream, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkFilterCubicImageViewImageFormatPropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_global_priority
         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(vkStream, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_external_memory_host
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
         {
-            reservedmarshal_VkImportMemoryHostPointerInfoEXT(vkStream, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkImportMemoryHostPointerInfoEXT(vkStream, rootType, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_pipeline_compiler_control
         case VK_STRUCTURE_TYPE_PIPELINE_COMPILER_CONTROL_CREATE_INFO_AMD:
         {
-            reservedmarshal_VkPipelineCompilerControlCreateInfoAMD(vkStream, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension), ptr);
+            reservedmarshal_VkPipelineCompilerControlCreateInfoAMD(vkStream, rootType, reinterpret_cast<const VkPipelineCompilerControlCreateInfoAMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
         {
-            reservedmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_memory_overallocation_behavior
         case VK_STRUCTURE_TYPE_DEVICE_MEMORY_OVERALLOCATION_CREATE_INFO_AMD:
         {
-            reservedmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(vkStream, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension), ptr);
+            reservedmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(vkStream, rootType, reinterpret_cast<const VkDeviceMemoryOverallocationCreateInfoAMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_GGP_frame_token
         case VK_STRUCTURE_TYPE_PRESENT_FRAME_TOKEN_GGP:
         {
-            reservedmarshal_VkPresentFrameTokenGGP(vkStream, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension), ptr);
+            reservedmarshal_VkPresentFrameTokenGGP(vkStream, rootType, reinterpret_cast<const VkPresentFrameTokenGGP*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_feedback
         case VK_STRUCTURE_TYPE_PIPELINE_CREATION_FEEDBACK_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineCreationFeedbackCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineCreationFeedbackCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineCreationFeedbackCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_compute_shader_derivatives
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COMPUTE_SHADER_DERIVATIVES_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_mesh_shader
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MESH_SHADER_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMeshShaderPropertiesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shader_barycentric
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_BARYCENTRIC_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_shader_image_footprint
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_FOOTPRINT_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageFootprintFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_scissor_exclusive
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_EXCLUSIVE_SCISSOR_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineViewportExclusiveScissorStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXCLUSIVE_SCISSOR_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExclusiveScissorFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
         {
-            reservedmarshal_VkQueueFamilyCheckpointPropertiesNV(vkStream, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkQueueFamilyCheckpointPropertiesNV(vkStream, rootType, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_INTEL_shader_integer_functions2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_INTEGER_FUNCTIONS_2_FEATURES_INTEL:
         {
-            reservedmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_INTEL_performance_query
         case VK_STRUCTURE_TYPE_QUERY_POOL_PERFORMANCE_QUERY_CREATE_INFO_INTEL:
         {
-            reservedmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(vkStream, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension), ptr);
+            reservedmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(vkStream, rootType, reinterpret_cast<const VkQueryPoolPerformanceQueryCreateInfoINTEL*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_pci_bus_info
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PCI_BUS_INFO_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePCIBusInfoPropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_display_native_hdr
         case VK_STRUCTURE_TYPE_DISPLAY_NATIVE_HDR_SURFACE_CAPABILITIES_AMD:
         {
-            reservedmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(vkStream, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension), ptr);
+            reservedmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(vkStream, rootType, reinterpret_cast<const VkDisplayNativeHdrSurfaceCapabilitiesAMD*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SWAPCHAIN_DISPLAY_NATIVE_HDR_CREATE_INFO_AMD:
         {
-            reservedmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(vkStream, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension), ptr);
+            reservedmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(vkStream, rootType, reinterpret_cast<const VkSwapchainDisplayNativeHdrCreateInfoAMD*>(structExtension), ptr);
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            reservedmarshal_VkImportColorBufferGOOGLE(vkStream, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), ptr);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+                {
+                    reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), ptr);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_DEVICE_CREATE_INFO:
+                {
+                    reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), ptr);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    reservedmarshal_VkImportColorBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), ptr);
+                    break;
+                }
+                default:
+                {
+                    reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension), ptr);
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            reservedmarshal_VkImportBufferGOOGLE(vkStream, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), ptr);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROPERTIES_2:
+                {
+                    reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension), ptr);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    reservedmarshal_VkImportPhysicalAddressGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), ptr);
+                    break;
+                }
+                default:
+                {
+                    reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension), ptr);
+                    break;
+                }
+            }
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkImportPhysicalAddressGOOGLE(vkStream, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), ptr);
+            switch(rootType)
+            {
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO:
+                {
+                    reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), ptr);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_RENDER_PASS_CREATE_INFO_2:
+                {
+                    reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), ptr);
+                    break;
+                }
+                case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO:
+                {
+                    reservedmarshal_VkImportBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), ptr);
+                    break;
+                }
+                default:
+                {
+                    reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension), ptr);
+                    break;
+                }
+            }
             break;
         }
 #endif
 #ifdef VK_EXT_subgroup_size_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_SIZE_CONTROL_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SHADER_STAGE_REQUIRED_SUBGROUP_SIZE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_2_AMD:
         {
-            reservedmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderCoreProperties2AMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_AMD_device_coherent_memory
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COHERENT_MEMORY_FEATURES_AMD:
         {
-            reservedmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(vkStream, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCoherentMemoryFeaturesAMD*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_shader_image_atomic_int64
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_IMAGE_ATOMIC_INT64_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_memory_budget
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_BUDGET_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryBudgetPropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_memory_priority
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MEMORY_PRIORITY_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceMemoryPriorityFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_PRIORITY_ALLOCATE_INFO_EXT:
         {
-            reservedmarshal_VkMemoryPriorityAllocateInfoEXT(vkStream, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkMemoryPriorityAllocateInfoEXT(vkStream, rootType, reinterpret_cast<const VkMemoryPriorityAllocateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation_image_aliasing
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEDICATED_ALLOCATION_IMAGE_ALIASING_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_buffer_device_address
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BUFFER_DEVICE_ADDRESS_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_BUFFER_DEVICE_ADDRESS_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkBufferDeviceAddressCreateInfoEXT(vkStream, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkBufferDeviceAddressCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkBufferDeviceAddressCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_validation_features
         case VK_STRUCTURE_TYPE_VALIDATION_FEATURES_EXT:
         {
-            reservedmarshal_VkValidationFeaturesEXT(vkStream, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkValidationFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkValidationFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_cooperative_matrix
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COOPERATIVE_MATRIX_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCooperativeMatrixPropertiesNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_coverage_reduction_mode
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_COVERAGE_REDUCTION_MODE_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCoverageReductionModeFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_REDUCTION_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineCoverageReductionStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineCoverageReductionStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineCoverageReductionStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_shader_interlock
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADER_INTERLOCK_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_ycbcr_image_arrays
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_YCBCR_IMAGE_ARRAYS_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_full_screen_exclusive
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_INFO_EXT:
         {
-            reservedmarshal_VkSurfaceFullScreenExclusiveInfoEXT(vkStream, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkSurfaceFullScreenExclusiveInfoEXT(vkStream, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_CAPABILITIES_FULL_SCREEN_EXCLUSIVE_EXT:
         {
-            reservedmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(vkStream, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension), ptr);
+            reservedmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(vkStream, rootType, reinterpret_cast<const VkSurfaceCapabilitiesFullScreenExclusiveEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_SURFACE_FULL_SCREEN_EXCLUSIVE_WIN32_INFO_EXT:
         {
-            reservedmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(vkStream, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(vkStream, rootType, reinterpret_cast<const VkSurfaceFullScreenExclusiveWin32InfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_line_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_LINE_RASTERIZATION_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceLineRasterizationPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_LINE_STATE_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(vkStream, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkPipelineRasterizationLineStateCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_shader_atomic_float
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_ATOMIC_FLOAT_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_index_type_uint8
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_INDEX_TYPE_UINT8_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceIndexTypeUint8FeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_extended_dynamic_state
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTENDED_DYNAMIC_STATE_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DEMOTE_TO_HELPER_INVOCATION_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_device_generated_commands
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_GENERATED_COMMANDS_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_GRAPHICS_PIPELINE_SHADER_GROUPS_CREATE_INFO_NV:
         {
-            reservedmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(vkStream, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkGraphicsPipelineShaderGroupsCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_texel_buffer_alignment
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_TEXEL_BUFFER_ALIGNMENT_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_QCOM_render_pass_transform
         case VK_STRUCTURE_TYPE_RENDER_PASS_TRANSFORM_BEGIN_INFO_QCOM:
         {
-            reservedmarshal_VkRenderPassTransformBeginInfoQCOM(vkStream, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension), ptr);
+            reservedmarshal_VkRenderPassTransformBeginInfoQCOM(vkStream, rootType, reinterpret_cast<const VkRenderPassTransformBeginInfoQCOM*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_RENDER_PASS_TRANSFORM_INFO_QCOM:
         {
-            reservedmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(vkStream, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension), ptr);
+            reservedmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(vkStream, rootType, reinterpret_cast<const VkCommandBufferInheritanceRenderPassTransformInfoQCOM*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_device_memory_report
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DEVICE_MEMORY_REPORT_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DEVICE_MEMORY_REPORT_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(vkStream, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDeviceDeviceMemoryReportCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_robustness2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2FeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ROBUSTNESS_2_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRobustness2PropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_custom_border_color
         case VK_STRUCTURE_TYPE_SAMPLER_CUSTOM_BORDER_COLOR_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkSamplerCustomBorderColorCreateInfoEXT(vkStream, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkSamplerCustomBorderColorCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkSamplerCustomBorderColorCreateInfoEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorPropertiesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CUSTOM_BORDER_COLOR_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceCustomBorderColorFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_private_data
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRIVATE_DATA_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePrivateDataFeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_PRIVATE_DATA_CREATE_INFO_EXT:
         {
-            reservedmarshal_VkDevicePrivateDataCreateInfoEXT(vkStream, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension), ptr);
+            reservedmarshal_VkDevicePrivateDataCreateInfoEXT(vkStream, rootType, reinterpret_cast<const VkDevicePrivateDataCreateInfoEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_pipeline_creation_cache_control
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PIPELINE_CREATION_CACHE_CONTROL_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostics_config
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DIAGNOSTICS_CONFIG_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceDiagnosticsConfigFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_DIAGNOSTICS_CONFIG_CREATE_INFO_NV:
         {
-            reservedmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(vkStream, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkDeviceDiagnosticsConfigCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_NV_fragment_shading_rate_enums
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_FEATURES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_SHADING_RATE_ENUMS_PROPERTIES_NV:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_FRAGMENT_SHADING_RATE_ENUM_STATE_CREATE_INFO_NV:
         {
-            reservedmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(vkStream, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension), ptr);
+            reservedmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(vkStream, rootType, reinterpret_cast<const VkPipelineFragmentShadingRateEnumStateCreateInfoNV*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_fragment_density_map2
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_2_PROPERTIES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_QCOM_rotated_copy_commands
         case VK_STRUCTURE_TYPE_COPY_COMMAND_TRANSFORM_INFO_QCOM:
         {
-            reservedmarshal_VkCopyCommandTransformInfoQCOM(vkStream, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension), ptr);
+            reservedmarshal_VkCopyCommandTransformInfoQCOM(vkStream, rootType, reinterpret_cast<const VkCopyCommandTransformInfoQCOM*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_image_robustness
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_IMAGE_ROBUSTNESS_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceImageRobustnessFeaturesEXT*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_EXT_4444_formats
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_4444_FORMATS_FEATURES_EXT:
         {
-            reservedmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(vkStream, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(vkStream, rootType, reinterpret_cast<const VkPhysicalDevice4444FormatsFeaturesEXT*>(structExtension), ptr);
+            break;
+        }
+#endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            reservedmarshal_VkImportColorBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            reservedmarshal_VkImportBufferGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportBufferGOOGLE*>(structExtension), ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            reservedmarshal_VkImportPhysicalAddressGOOGLE(vkStream, rootType, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
-            reservedmarshal_VkWriteDescriptorSetAccelerationStructureKHR(vkStream, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension), ptr);
+            reservedmarshal_VkWriteDescriptorSetAccelerationStructureKHR(vkStream, rootType, reinterpret_cast<const VkWriteDescriptorSetAccelerationStructureKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructureFeaturesKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ACCELERATION_STRUCTURE_PROPERTIES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceAccelerationStructurePropertiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_ray_tracing_pipeline
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelineFeaturesKHR*>(structExtension), ptr);
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_TRACING_PIPELINE_PROPERTIES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayTracingPipelinePropertiesKHR*>(structExtension), ptr);
             break;
         }
 #endif
 #ifdef VK_KHR_ray_query
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_RAY_QUERY_FEATURES_KHR:
         {
-            reservedmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(vkStream, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension), ptr);
+            reservedmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(vkStream, rootType, reinterpret_cast<const VkPhysicalDeviceRayQueryFeaturesKHR*>(structExtension), ptr);
             break;
         }
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
index ac5f12a..6984b87 100644
--- a/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
+++ b/system/vulkan_enc/goldfish_vk_reserved_marshaling_guest.h
@@ -46,546 +46,655 @@
 #ifdef VK_VERSION_1_0
 void reservedmarshal_VkExtent2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent2D* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExtent3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtent3D* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkOffset2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset2D* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkOffset3D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkOffset3D* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRect2D(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRect2D* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBaseInStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseInStructure* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBaseOutStructure(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBaseOutStructure* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryBarrier* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDispatchIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDispatchIndirectCommand* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDrawIndexedIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndexedIndirectCommand* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDrawIndirectCommand(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawIndirectCommand* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageSubresourceRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceRange* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryBarrier* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryBarrier(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryBarrier* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAllocationCallbacks(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAllocationCallbacks* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkApplicationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkApplicationInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkInstanceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInstanceCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryHeap(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHeap* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryType(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryType* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceLimits(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLimits* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSparseProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkQueueFamilyProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceQueueCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExtensionProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExtensionProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkLayerProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkLayerProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubmitInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMappedMemoryRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMappedMemoryRange* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseMemoryBind* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseBufferMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseBufferMemoryBindInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageOpaqueMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageOpaqueMemoryBindInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageSubresource(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresource* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageMemoryBind(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBind* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageMemoryBindInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryBindInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindSparseInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageMemoryRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkEventCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkEventCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkQueryPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferViewCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubresourceLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubresourceLayout* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkComponentMapping(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComponentMapping* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageViewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkShaderModuleCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineCacheCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCacheCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSpecializationMapEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationMapEntry* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSpecializationInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSpecializationInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineShaderStageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkComputePipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkComputePipelineCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkVertexInputBindingDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDescription* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkVertexInputAttributeDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputAttributeDescription* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineVertexInputStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineInputAssemblyStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInputAssemblyStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineTessellationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkViewport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewport* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineViewportStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineRasterizationStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineMultisampleStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineMultisampleStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkStencilOpState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStencilOpState* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineDepthStencilStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDepthStencilStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineColorBlendAttachmentState(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAttachmentState* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineColorBlendStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineDynamicStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDynamicStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGraphicsPipelineCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPushConstantRange(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPushConstantRange* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLayoutCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSamplerCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyDescriptorSet* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorBufferInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorImageInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorPoolSize(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolSize* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetLayoutBinding(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBinding* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetLayoutCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkWriteDescriptorSet(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSet* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFramebufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassDescription(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassDependency(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCommandPoolCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandPoolCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCommandBufferAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCommandBufferInheritanceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferBeginInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageSubresourceLayers(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSubresourceLayers* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkClearColorValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearColorValue* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkClearDepthStencilValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearDepthStencilValue* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkClearValue(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearValue* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkClearAttachment(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearAttachment* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkClearRect(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkClearRect* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageBlit(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageCopy(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassBeginInfo* forMarshaling,
     uint8_t** ptr);
 
@@ -593,191 +702,229 @@
 #ifdef VK_VERSION_1_1
 void reservedmarshal_VkPhysicalDeviceSubgroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindBufferMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindImageMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDevice16BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice16BitStorageFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryDedicatedRequirements(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedRequirements* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryDedicatedAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryDedicatedAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryAllocateFlagsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryAllocateFlagsInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupRenderPassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupRenderPassBeginInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupCommandBufferBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupCommandBufferBeginInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSubmitInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupBindSparseInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupBindSparseInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindBufferMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindBufferMemoryDeviceGroupInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindImageMemoryDeviceGroupInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemoryDeviceGroupInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceGroupProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceGroupProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupDeviceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupDeviceCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferMemoryRequirementsInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageMemoryRequirementsInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageSparseMemoryRequirementsInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSparseMemoryRequirementsInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryRequirements2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageMemoryRequirements2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageMemoryRequirements2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFeatures2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFeatures2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProperties2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFormatProperties2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatProperties2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageFormatInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkQueueFamilyProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyProperties2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceMemoryProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryProperties2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSparseImageFormatProperties2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSparseImageFormatProperties2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSparseImageFormatInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSparseImageFormatInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDevicePointClippingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePointClippingProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkInputAttachmentAspectReference(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInputAttachmentAspectReference* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassInputAttachmentAspectCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassInputAttachmentAspectCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageViewUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewUsageCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineTessellationDomainOriginStateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineTessellationDomainOriginStateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassMultiviewCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassMultiviewCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceMultiviewFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceMultiviewProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceVariablePointersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVariablePointersFeatures* forMarshaling,
     uint8_t** ptr);
 
@@ -785,151 +932,181 @@
 
 void reservedmarshal_VkPhysicalDeviceProtectedMemoryFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceProtectedMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceProtectedMemoryProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceQueueInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkProtectedSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkProtectedSubmitInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSamplerYcbcrConversionCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSamplerYcbcrConversionInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindImagePlaneMemoryInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImagePlaneMemoryInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImagePlaneMemoryRequirementsInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePlaneMemoryRequirementsInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSamplerYcbcrConversionImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerYcbcrConversionImageFormatProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorUpdateTemplateEntry(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateEntry* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorUpdateTemplateCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorUpdateTemplateCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalMemoryProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceExternalImageFormatInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalImageFormatInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalImageFormatProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceExternalBufferInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalBufferInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalBufferProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalBufferProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceIDProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIDProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalMemoryImageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalMemoryBufferCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryBufferCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportMemoryAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceExternalFenceInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalFenceInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalFenceProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFenceProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportFenceCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportSemaphoreCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceExternalSemaphoreInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalSemaphoreInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalSemaphoreProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceMaintenance3Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMaintenance3Properties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutSupport* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShaderDrawParametersFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDrawParametersFeatures* forMarshaling,
     uint8_t** ptr);
 
@@ -939,256 +1116,307 @@
 #ifdef VK_VERSION_1_2
 void reservedmarshal_VkPhysicalDeviceVulkan11Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Features* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceVulkan11Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan11Properties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceVulkan12Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Features* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkConformanceVersion(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConformanceVersion* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceVulkan12Properties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkan12Properties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageFormatListCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageFormatListCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescription2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentReference2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReference2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassDescription2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescription2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassDependency2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDependency2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassCreateInfo2(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassCreateInfo2* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassBeginInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassEndInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassEndInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDevice8BitStorageFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice8BitStorageFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceDriverProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDriverProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShaderAtomicInt64Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicInt64Features* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShaderFloat16Int8Features(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderFloat16Int8Features* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFloatControlsProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFloatControlsProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetLayoutBindingFlagsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetLayoutBindingFlagsCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceDescriptorIndexingFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceDescriptorIndexingProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDescriptorIndexingProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetVariableDescriptorCountAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorSetVariableDescriptorCountLayoutSupport(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorSetVariableDescriptorCountLayoutSupport* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassDescriptionDepthStencilResolve(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassDescriptionDepthStencilResolve* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceDepthStencilResolveProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthStencilResolveProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceScalarBlockLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceScalarBlockLayoutFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageStencilUsageCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageStencilUsageCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSamplerReductionModeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerReductionModeCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSamplerFilterMinmaxProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSamplerFilterMinmaxProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceVulkanMemoryModelFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVulkanMemoryModelFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceImagelessFramebufferFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImagelessFramebufferFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFramebufferAttachmentImageInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentImageInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFramebufferAttachmentsCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferAttachmentsCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassAttachmentBeginInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassAttachmentBeginInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceUniformBufferStandardLayoutFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceUniformBufferStandardLayoutFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSubgroupExtendedTypesFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSeparateDepthStencilLayoutsFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentReferenceStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentReferenceStencilLayout* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentDescriptionStencilLayout(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentDescriptionStencilLayout* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceHostQueryResetFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceHostQueryResetFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceTimelineSemaphoreFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceTimelineSemaphoreProperties(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTimelineSemaphoreProperties* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSemaphoreTypeCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreTypeCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkTimelineSemaphoreSubmitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTimelineSemaphoreSubmitInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSemaphoreWaitInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreWaitInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSemaphoreSignalInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreSignalInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeatures(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeatures* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferDeviceAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferOpaqueCaptureAddressCreateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferOpaqueCaptureAddressCreateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryOpaqueCaptureAddressAllocateInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryOpaqueCaptureAddressAllocateInfo* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceMemoryOpaqueCaptureAddressInfo(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOpaqueCaptureAddressInfo* forMarshaling,
     uint8_t** ptr);
 
@@ -1196,11 +1424,13 @@
 #ifdef VK_KHR_surface
 void reservedmarshal_VkSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSurfaceFormatKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormatKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1208,41 +1438,49 @@
 #ifdef VK_KHR_swapchain
 void reservedmarshal_VkSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageSwapchainCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindImageMemorySwapchainInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindImageMemorySwapchainInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAcquireNextImageInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireNextImageInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupPresentCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentCapabilitiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupPresentInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceGroupSwapchainCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceGroupSwapchainCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1250,36 +1488,43 @@
 #ifdef VK_KHR_display
 void reservedmarshal_VkDisplayModeParametersKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeParametersKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayModeCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayModePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayPlaneCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilitiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayPlanePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlanePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplaySurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplaySurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1287,6 +1532,7 @@
 #ifdef VK_KHR_display_swapchain
 void reservedmarshal_VkDisplayPresentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPresentInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1294,6 +1540,7 @@
 #ifdef VK_KHR_xlib_surface
 void reservedmarshal_VkXlibSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXlibSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1301,6 +1548,7 @@
 #ifdef VK_KHR_xcb_surface
 void reservedmarshal_VkXcbSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXcbSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1308,6 +1556,7 @@
 #ifdef VK_KHR_wayland_surface
 void reservedmarshal_VkWaylandSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWaylandSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1315,6 +1564,7 @@
 #ifdef VK_KHR_android_surface
 void reservedmarshal_VkAndroidSurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidSurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1322,6 +1572,7 @@
 #ifdef VK_KHR_win32_surface
 void reservedmarshal_VkWin32SurfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32SurfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1407,21 +1658,25 @@
 #ifdef VK_KHR_external_memory_win32
 void reservedmarshal_VkImportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportMemoryWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryWin32HandlePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryWin32HandlePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1429,16 +1684,19 @@
 #ifdef VK_KHR_external_memory_fd
 void reservedmarshal_VkImportMemoryFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryFdInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryFdPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryFdPropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetFdInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1446,6 +1704,7 @@
 #ifdef VK_KHR_win32_keyed_mutex
 void reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1463,21 +1722,25 @@
 #ifdef VK_KHR_external_semaphore_win32
 void reservedmarshal_VkImportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportSemaphoreWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportSemaphoreWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkD3D12FenceSubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkD3D12FenceSubmitInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSemaphoreGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1485,11 +1748,13 @@
 #ifdef VK_KHR_external_semaphore_fd
 void reservedmarshal_VkImportSemaphoreFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportSemaphoreFdInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSemaphoreGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSemaphoreGetFdInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1497,6 +1762,7 @@
 #ifdef VK_KHR_push_descriptor
 void reservedmarshal_VkPhysicalDevicePushDescriptorPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePushDescriptorPropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1514,16 +1780,19 @@
 #ifdef VK_KHR_incremental_present
 void reservedmarshal_VkRectLayerKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRectLayerKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPresentRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPresentRegionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentRegionsKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1563,6 +1832,7 @@
 #ifdef VK_KHR_shared_presentable_image
 void reservedmarshal_VkSharedPresentSurfaceCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSharedPresentSurfaceCapabilitiesKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1580,16 +1850,19 @@
 #ifdef VK_KHR_external_fence_win32
 void reservedmarshal_VkImportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportFenceWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportFenceWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFenceGetWin32HandleInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetWin32HandleInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1597,11 +1870,13 @@
 #ifdef VK_KHR_external_fence_fd
 void reservedmarshal_VkImportFenceFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportFenceFdInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFenceGetFdInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFenceGetFdInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1609,41 +1884,49 @@
 #ifdef VK_KHR_performance_query
 void reservedmarshal_VkPhysicalDevicePerformanceQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDevicePerformanceQueryPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePerformanceQueryPropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceCounterKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceCounterDescriptionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterDescriptionKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkQueryPoolPerformanceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceCounterResultKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceCounterResultKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAcquireProfilingLockInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAcquireProfilingLockInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceQuerySubmitInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceQuerySubmitInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1663,16 +1946,19 @@
 #ifdef VK_KHR_get_surface_capabilities2
 void reservedmarshal_VkPhysicalDeviceSurfaceInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSurfaceInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSurfaceCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSurfaceFormat2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFormat2KHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1686,26 +1972,31 @@
 #ifdef VK_KHR_get_display_properties2
 void reservedmarshal_VkDisplayProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayProperties2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayPlaneProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneProperties2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayModeProperties2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayModeProperties2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayPlaneInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayPlaneCapabilities2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPlaneCapabilities2KHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1759,11 +2050,13 @@
 #ifdef VK_KHR_portability_subset
 void reservedmarshal_VkPhysicalDevicePortabilitySubsetFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDevicePortabilitySubsetPropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePortabilitySubsetPropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1791,6 +2084,7 @@
 #ifdef VK_KHR_shader_clock
 void reservedmarshal_VkPhysicalDeviceShaderClockFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderClockFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1834,6 +2128,7 @@
 #ifdef VK_KHR_shader_terminate_invocation
 void reservedmarshal_VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderTerminateInvocationFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1841,26 +2136,31 @@
 #ifdef VK_KHR_fragment_shading_rate
 void reservedmarshal_VkFragmentShadingRateAttachmentInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFragmentShadingRateAttachmentInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineFragmentShadingRateStateCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateStateCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRatePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRatePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1870,6 +2170,7 @@
 #ifdef VK_KHR_surface_protected_capabilities
 void reservedmarshal_VkSurfaceProtectedCapabilitiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceProtectedCapabilitiesKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1903,36 +2204,43 @@
 #ifdef VK_KHR_pipeline_executable_properties
 void reservedmarshal_VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineExecutablePropertiesFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineExecutablePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutablePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineExecutableInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineExecutableStatisticValueKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticValueKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineExecutableStatisticKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableStatisticKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineExecutableInternalRepresentationKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineExecutableInternalRepresentationKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1940,6 +2248,7 @@
 #ifdef VK_KHR_pipeline_library
 void reservedmarshal_VkPipelineLibraryCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineLibraryCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -1949,56 +2258,67 @@
 #ifdef VK_KHR_copy_commands2
 void reservedmarshal_VkBufferCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferCopy2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageCopy2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBufferImageCopy2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferImageCopy2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyBufferToImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyBufferToImageInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyImageToBufferInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyImageToBufferInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageBlit2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageBlit2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBlitImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBlitImageInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageResolve2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageResolve2KHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkResolveImageInfo2KHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkResolveImageInfo2KHR* forMarshaling,
     uint8_t** ptr);
 
@@ -2006,6 +2326,7 @@
 #ifdef VK_ANDROID_native_buffer
 void reservedmarshal_VkNativeBufferANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkNativeBufferANDROID* forMarshaling,
     uint8_t** ptr);
 
@@ -2013,6 +2334,7 @@
 #ifdef VK_EXT_debug_report
 void reservedmarshal_VkDebugReportCallbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugReportCallbackCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2026,6 +2348,7 @@
 #ifdef VK_AMD_rasterization_order
 void reservedmarshal_VkPipelineRasterizationStateRasterizationOrderAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateRasterizationOrderAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -2037,16 +2360,19 @@
 #ifdef VK_EXT_debug_marker
 void reservedmarshal_VkDebugMarkerObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectNameInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDebugMarkerObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerObjectTagInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDebugMarkerMarkerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugMarkerMarkerInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2056,16 +2382,19 @@
 #ifdef VK_NV_dedicated_allocation
 void reservedmarshal_VkDedicatedAllocationImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationImageCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDedicatedAllocationBufferCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationBufferCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDedicatedAllocationMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDedicatedAllocationMemoryAllocateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2073,16 +2402,19 @@
 #ifdef VK_EXT_transform_feedback
 void reservedmarshal_VkPhysicalDeviceTransformFeedbackFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceTransformFeedbackPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTransformFeedbackPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineRasterizationStateStreamCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationStateStreamCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2090,11 +2422,13 @@
 #ifdef VK_NVX_image_view_handle
 void reservedmarshal_VkImageViewHandleInfoNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewHandleInfoNVX* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageViewAddressPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewAddressPropertiesNVX* forMarshaling,
     uint8_t** ptr);
 
@@ -2110,6 +2444,7 @@
 #ifdef VK_AMD_texture_gather_bias_lod
 void reservedmarshal_VkTextureLODGatherFormatPropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTextureLODGatherFormatPropertiesAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -2117,11 +2452,13 @@
 #ifdef VK_AMD_shader_info
 void reservedmarshal_VkShaderResourceUsageAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderResourceUsageAMD* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkShaderStatisticsInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderStatisticsInfoAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -2131,6 +2468,7 @@
 #ifdef VK_GGP_stream_descriptor_surface
 void reservedmarshal_VkStreamDescriptorSurfaceCreateInfoGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStreamDescriptorSurfaceCreateInfoGGP* forMarshaling,
     uint8_t** ptr);
 
@@ -2138,6 +2476,7 @@
 #ifdef VK_NV_corner_sampled_image
 void reservedmarshal_VkPhysicalDeviceCornerSampledImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCornerSampledImageFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2147,6 +2486,7 @@
 #ifdef VK_NV_external_memory_capabilities
 void reservedmarshal_VkExternalImageFormatPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalImageFormatPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2154,11 +2494,13 @@
 #ifdef VK_NV_external_memory
 void reservedmarshal_VkExternalMemoryImageCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalMemoryImageCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportMemoryAllocateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryAllocateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2166,11 +2508,13 @@
 #ifdef VK_NV_external_memory_win32
 void reservedmarshal_VkImportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryWin32HandleInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExportMemoryWin32HandleInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExportMemoryWin32HandleInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2178,6 +2522,7 @@
 #ifdef VK_NV_win32_keyed_mutex
 void reservedmarshal_VkWin32KeyedMutexAcquireReleaseInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWin32KeyedMutexAcquireReleaseInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2185,6 +2530,7 @@
 #ifdef VK_EXT_validation_flags
 void reservedmarshal_VkValidationFlagsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFlagsEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2192,6 +2538,7 @@
 #ifdef VK_NN_vi_surface
 void reservedmarshal_VkViSurfaceCreateInfoNN(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViSurfaceCreateInfoNN* forMarshaling,
     uint8_t** ptr);
 
@@ -2203,6 +2550,7 @@
 #ifdef VK_EXT_texture_compression_astc_hdr
 void reservedmarshal_VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTextureCompressionASTCHDRFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2210,11 +2558,13 @@
 #ifdef VK_EXT_astc_decode_mode
 void reservedmarshal_VkImageViewASTCDecodeModeEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageViewASTCDecodeModeEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceASTCDecodeFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceASTCDecodeFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2222,16 +2572,19 @@
 #ifdef VK_EXT_conditional_rendering
 void reservedmarshal_VkConditionalRenderingBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkConditionalRenderingBeginInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2239,11 +2592,13 @@
 #ifdef VK_NV_clip_space_w_scaling
 void reservedmarshal_VkViewportWScalingNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportWScalingNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineViewportWScalingStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportWScalingStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2255,6 +2610,7 @@
 #ifdef VK_EXT_display_surface_counter
 void reservedmarshal_VkSurfaceCapabilities2EXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilities2EXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2262,21 +2618,25 @@
 #ifdef VK_EXT_display_control
 void reservedmarshal_VkDisplayPowerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayPowerInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceEventInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDisplayEventInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayEventInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSwapchainCounterCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainCounterCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2284,21 +2644,25 @@
 #ifdef VK_GOOGLE_display_timing
 void reservedmarshal_VkRefreshCycleDurationGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRefreshCycleDurationGOOGLE* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPastPresentationTimingGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPastPresentationTimingGOOGLE* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPresentTimeGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimeGOOGLE* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPresentTimesInfoGOOGLE(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentTimesInfoGOOGLE* forMarshaling,
     uint8_t** ptr);
 
@@ -2312,6 +2676,7 @@
 #ifdef VK_NVX_multiview_per_view_attributes
 void reservedmarshal_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* forMarshaling,
     uint8_t** ptr);
 
@@ -2319,11 +2684,13 @@
 #ifdef VK_NV_viewport_swizzle
 void reservedmarshal_VkViewportSwizzleNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkViewportSwizzleNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineViewportSwizzleStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportSwizzleStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2331,11 +2698,13 @@
 #ifdef VK_EXT_discard_rectangles
 void reservedmarshal_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineDiscardRectangleStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineDiscardRectangleStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2343,11 +2712,13 @@
 #ifdef VK_EXT_conservative_rasterization
 void reservedmarshal_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationConservativeStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2355,11 +2726,13 @@
 #ifdef VK_EXT_depth_clip_enable
 void reservedmarshal_VkPhysicalDeviceDepthClipEnableFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDepthClipEnableFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineRasterizationDepthClipStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationDepthClipStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2369,11 +2742,13 @@
 #ifdef VK_EXT_hdr_metadata
 void reservedmarshal_VkXYColorEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkXYColorEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkHdrMetadataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHdrMetadataEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2381,6 +2756,7 @@
 #ifdef VK_MVK_ios_surface
 void reservedmarshal_VkIOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIOSSurfaceCreateInfoMVK* forMarshaling,
     uint8_t** ptr);
 
@@ -2388,6 +2764,7 @@
 #ifdef VK_MVK_macos_surface
 void reservedmarshal_VkMacOSSurfaceCreateInfoMVK(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMacOSSurfaceCreateInfoMVK* forMarshaling,
     uint8_t** ptr);
 
@@ -2401,26 +2778,31 @@
 #ifdef VK_EXT_debug_utils
 void reservedmarshal_VkDebugUtilsLabelEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsLabelEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDebugUtilsObjectNameInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectNameInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDebugUtilsMessengerCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCallbackDataEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDebugUtilsMessengerCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsMessengerCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDebugUtilsObjectTagInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDebugUtilsObjectTagInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2428,31 +2810,37 @@
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
 void reservedmarshal_VkAndroidHardwareBufferUsageANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferUsageANDROID* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAndroidHardwareBufferPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferPropertiesANDROID* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAndroidHardwareBufferFormatPropertiesANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAndroidHardwareBufferFormatPropertiesANDROID* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImportAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportAndroidHardwareBufferInfoANDROID* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryGetAndroidHardwareBufferInfoANDROID* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkExternalFormatANDROID(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkExternalFormatANDROID* forMarshaling,
     uint8_t** ptr);
 
@@ -2472,21 +2860,25 @@
 #ifdef VK_EXT_inline_uniform_block
 void reservedmarshal_VkPhysicalDeviceInlineUniformBlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceInlineUniformBlockPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceInlineUniformBlockPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkWriteDescriptorSetInlineUniformBlockEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetInlineUniformBlockEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDescriptorPoolInlineUniformBlockCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDescriptorPoolInlineUniformBlockCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2496,41 +2888,49 @@
 #ifdef VK_EXT_sample_locations
 void reservedmarshal_VkSampleLocationEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSampleLocationsInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSampleLocationsInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAttachmentSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAttachmentSampleLocationsEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSubpassSampleLocationsEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSubpassSampleLocationsEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRenderPassSampleLocationsBeginInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassSampleLocationsBeginInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineSampleLocationsStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineSampleLocationsStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSampleLocationsPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMultisamplePropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMultisamplePropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2538,16 +2938,19 @@
 #ifdef VK_EXT_blend_operation_advanced
 void reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2555,6 +2958,7 @@
 #ifdef VK_NV_fragment_coverage_to_color
 void reservedmarshal_VkPipelineCoverageToColorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageToColorStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2562,6 +2966,7 @@
 #ifdef VK_NV_framebuffer_mixed_samples
 void reservedmarshal_VkPipelineCoverageModulationStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageModulationStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2571,11 +2976,13 @@
 #ifdef VK_NV_shader_sm_builtins
 void reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShaderSMBuiltinsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderSMBuiltinsFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2585,31 +2992,37 @@
 #ifdef VK_EXT_image_drm_format_modifier
 void reservedmarshal_VkDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDrmFormatModifierPropertiesListEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrmFormatModifierPropertiesListEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceImageDrmFormatModifierInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageDrmFormatModifierInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageDrmFormatModifierListCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierListCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageDrmFormatModifierExplicitCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierExplicitCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkImageDrmFormatModifierPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImageDrmFormatModifierPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2617,11 +3030,13 @@
 #ifdef VK_EXT_validation_cache
 void reservedmarshal_VkValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationCacheCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkShaderModuleValidationCacheCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShaderModuleValidationCacheCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2643,36 +3058,43 @@
 #ifdef VK_NV_shading_rate_image
 void reservedmarshal_VkShadingRatePaletteNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkShadingRatePaletteNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineViewportShadingRateImageStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportShadingRateImageStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShadingRateImageFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImageFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceShadingRateImagePropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShadingRateImagePropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCoarseSampleLocationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleLocationNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCoarseSampleOrderCustomNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCoarseSampleOrderCustomNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineViewportCoarseSampleOrderStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportCoarseSampleOrderStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2680,66 +3102,79 @@
 #ifdef VK_NV_ray_tracing
 void reservedmarshal_VkRayTracingShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRayTracingPipelineCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGeometryTrianglesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryTrianglesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGeometryAABBNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryAABBNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGeometryDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryDataNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGeometryNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeometryNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindAccelerationStructureMemoryInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindAccelerationStructureMemoryInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkWriteDescriptorSetAccelerationStructureNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureMemoryRequirementsInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceRayTracingPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkTransformMatrixKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTransformMatrixKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -2747,6 +3182,7 @@
 
 void reservedmarshal_VkAabbPositionsKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAabbPositionsKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -2754,6 +3190,7 @@
 
 void reservedmarshal_VkAccelerationStructureInstanceKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureInstanceKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -2763,11 +3200,13 @@
 #ifdef VK_NV_representative_fragment_test
 void reservedmarshal_VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRepresentativeFragmentTestFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineRepresentativeFragmentTestStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRepresentativeFragmentTestStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2775,11 +3214,13 @@
 #ifdef VK_EXT_filter_cubic
 void reservedmarshal_VkPhysicalDeviceImageViewImageFormatInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageViewImageFormatInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFilterCubicImageViewImageFormatPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFilterCubicImageViewImageFormatPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2789,6 +3230,7 @@
 #ifdef VK_EXT_global_priority
 void reservedmarshal_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceQueueGlobalPriorityCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2796,16 +3238,19 @@
 #ifdef VK_EXT_external_memory_host
 void reservedmarshal_VkImportMemoryHostPointerInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImportMemoryHostPointerInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryHostPointerPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryHostPointerPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2815,6 +3260,7 @@
 #ifdef VK_AMD_pipeline_compiler_control
 void reservedmarshal_VkPipelineCompilerControlCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCompilerControlCreateInfoAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -2822,6 +3268,7 @@
 #ifdef VK_EXT_calibrated_timestamps
 void reservedmarshal_VkCalibratedTimestampInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCalibratedTimestampInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2829,6 +3276,7 @@
 #ifdef VK_AMD_shader_core_properties
 void reservedmarshal_VkPhysicalDeviceShaderCorePropertiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCorePropertiesAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -2836,6 +3284,7 @@
 #ifdef VK_AMD_memory_overallocation_behavior
 void reservedmarshal_VkDeviceMemoryOverallocationCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryOverallocationCreateInfoAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -2843,21 +3292,25 @@
 #ifdef VK_EXT_vertex_attribute_divisor
 void reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkVertexInputBindingDivisorDescriptionEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkVertexInputBindingDivisorDescriptionEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineVertexInputDivisorStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceVertexAttributeDivisorFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2865,6 +3318,7 @@
 #ifdef VK_GGP_frame_token
 void reservedmarshal_VkPresentFrameTokenGGP(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPresentFrameTokenGGP* forMarshaling,
     uint8_t** ptr);
 
@@ -2872,11 +3326,13 @@
 #ifdef VK_EXT_pipeline_creation_feedback
 void reservedmarshal_VkPipelineCreationFeedbackEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineCreationFeedbackCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCreationFeedbackCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -2886,6 +3342,7 @@
 #ifdef VK_NV_compute_shader_derivatives
 void reservedmarshal_VkPhysicalDeviceComputeShaderDerivativesFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceComputeShaderDerivativesFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2893,16 +3350,19 @@
 #ifdef VK_NV_mesh_shader
 void reservedmarshal_VkPhysicalDeviceMeshShaderFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceMeshShaderPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMeshShaderPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDrawMeshTasksIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDrawMeshTasksIndirectCommandNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2910,6 +3370,7 @@
 #ifdef VK_NV_fragment_shader_barycentric
 void reservedmarshal_VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderBarycentricFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2917,6 +3378,7 @@
 #ifdef VK_NV_shader_image_footprint
 void reservedmarshal_VkPhysicalDeviceShaderImageFootprintFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageFootprintFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2924,11 +3386,13 @@
 #ifdef VK_NV_scissor_exclusive
 void reservedmarshal_VkPipelineViewportExclusiveScissorStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineViewportExclusiveScissorStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceExclusiveScissorFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExclusiveScissorFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2936,11 +3400,13 @@
 #ifdef VK_NV_device_diagnostic_checkpoints
 void reservedmarshal_VkQueueFamilyCheckpointPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueueFamilyCheckpointPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCheckpointDataNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCheckpointDataNV* forMarshaling,
     uint8_t** ptr);
 
@@ -2948,6 +3414,7 @@
 #ifdef VK_INTEL_shader_integer_functions2
 void reservedmarshal_VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderIntegerFunctions2FeaturesINTEL* forMarshaling,
     uint8_t** ptr);
 
@@ -2955,21 +3422,25 @@
 #ifdef VK_INTEL_performance_query
 void reservedmarshal_VkPerformanceValueDataINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueDataINTEL* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceValueINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceValueINTEL* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkInitializePerformanceApiInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkInitializePerformanceApiInfoINTEL* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkQueryPoolPerformanceQueryCreateInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkQueryPoolPerformanceQueryCreateInfoINTEL* forMarshaling,
     uint8_t** ptr);
 
@@ -2977,21 +3448,25 @@
 
 void reservedmarshal_VkPerformanceMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceMarkerInfoINTEL* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceStreamMarkerInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceStreamMarkerInfoINTEL* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceOverrideInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceOverrideInfoINTEL* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPerformanceConfigurationAcquireInfoINTEL(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPerformanceConfigurationAcquireInfoINTEL* forMarshaling,
     uint8_t** ptr);
 
@@ -2999,6 +3474,7 @@
 #ifdef VK_EXT_pci_bus_info
 void reservedmarshal_VkPhysicalDevicePCIBusInfoPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePCIBusInfoPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3006,11 +3482,13 @@
 #ifdef VK_AMD_display_native_hdr
 void reservedmarshal_VkDisplayNativeHdrSurfaceCapabilitiesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDisplayNativeHdrSurfaceCapabilitiesAMD* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSwapchainDisplayNativeHdrCreateInfoAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSwapchainDisplayNativeHdrCreateInfoAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -3018,6 +3496,7 @@
 #ifdef VK_FUCHSIA_imagepipe_surface
 void reservedmarshal_VkImagePipeSurfaceCreateInfoFUCHSIA(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkImagePipeSurfaceCreateInfoFUCHSIA* forMarshaling,
     uint8_t** ptr);
 
@@ -3025,24 +3504,28 @@
 #ifdef VK_EXT_metal_surface
 void reservedmarshal_VkMetalSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMetalSurfaceCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void reservedmarshal_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void reservedmarshal_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportColorBufferGOOGLE* forMarshaling,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
-void reservedmarshal_VkImportBufferGOOGLE(
+void reservedmarshal_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportBufferGOOGLE* forMarshaling,
+    VkStructureType rootType,
+    const VkPhysicalDeviceFragmentDensityMapPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
-void reservedmarshal_VkImportPhysicalAddressGOOGLE(
+void reservedmarshal_VkRenderPassFragmentDensityMapCreateInfoEXT(
     VulkanStreamGuest* vkStream,
-    const VkImportPhysicalAddressGOOGLE* forMarshaling,
+    VkStructureType rootType,
+    const VkRenderPassFragmentDensityMapCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 #endif
@@ -3057,16 +3540,19 @@
 #ifdef VK_EXT_subgroup_size_control
 void reservedmarshal_VkPhysicalDeviceSubgroupSizeControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceSubgroupSizeControlPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceSubgroupSizeControlPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineShaderStageRequiredSubgroupSizeCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3074,6 +3560,7 @@
 #ifdef VK_AMD_shader_core_properties2
 void reservedmarshal_VkPhysicalDeviceShaderCoreProperties2AMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderCoreProperties2AMD* forMarshaling,
     uint8_t** ptr);
 
@@ -3081,6 +3568,7 @@
 #ifdef VK_AMD_device_coherent_memory
 void reservedmarshal_VkPhysicalDeviceCoherentMemoryFeaturesAMD(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoherentMemoryFeaturesAMD* forMarshaling,
     uint8_t** ptr);
 
@@ -3088,6 +3576,7 @@
 #ifdef VK_EXT_shader_image_atomic_int64
 void reservedmarshal_VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderImageAtomicInt64FeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3095,6 +3584,7 @@
 #ifdef VK_EXT_memory_budget
 void reservedmarshal_VkPhysicalDeviceMemoryBudgetPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryBudgetPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3102,11 +3592,13 @@
 #ifdef VK_EXT_memory_priority
 void reservedmarshal_VkPhysicalDeviceMemoryPriorityFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceMemoryPriorityFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkMemoryPriorityAllocateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkMemoryPriorityAllocateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3114,6 +3606,7 @@
 #ifdef VK_NV_dedicated_allocation_image_aliasing
 void reservedmarshal_VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDedicatedAllocationImageAliasingFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -3121,6 +3614,7 @@
 #ifdef VK_EXT_buffer_device_address
 void reservedmarshal_VkPhysicalDeviceBufferDeviceAddressFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceBufferDeviceAddressFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3130,6 +3624,7 @@
 
 void reservedmarshal_VkBufferDeviceAddressCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBufferDeviceAddressCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3137,6 +3632,7 @@
 #ifdef VK_EXT_tooling_info
 void reservedmarshal_VkPhysicalDeviceToolPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceToolPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3148,6 +3644,7 @@
 #ifdef VK_EXT_validation_features
 void reservedmarshal_VkValidationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkValidationFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3155,16 +3652,19 @@
 #ifdef VK_NV_cooperative_matrix
 void reservedmarshal_VkCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCooperativeMatrixPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceCooperativeMatrixFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceCooperativeMatrixPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCooperativeMatrixPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
@@ -3172,16 +3672,19 @@
 #ifdef VK_NV_coverage_reduction_mode
 void reservedmarshal_VkPhysicalDeviceCoverageReductionModeFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCoverageReductionModeFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineCoverageReductionStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineCoverageReductionStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkFramebufferMixedSamplesCombinationNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkFramebufferMixedSamplesCombinationNV* forMarshaling,
     uint8_t** ptr);
 
@@ -3189,6 +3692,7 @@
 #ifdef VK_EXT_fragment_shader_interlock
 void reservedmarshal_VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShaderInterlockFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3196,6 +3700,7 @@
 #ifdef VK_EXT_ycbcr_image_arrays
 void reservedmarshal_VkPhysicalDeviceYcbcrImageArraysFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceYcbcrImageArraysFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3203,16 +3708,19 @@
 #ifdef VK_EXT_full_screen_exclusive
 void reservedmarshal_VkSurfaceFullScreenExclusiveInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSurfaceCapabilitiesFullScreenExclusiveEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceCapabilitiesFullScreenExclusiveEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSurfaceFullScreenExclusiveWin32InfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSurfaceFullScreenExclusiveWin32InfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3220,6 +3728,7 @@
 #ifdef VK_EXT_headless_surface
 void reservedmarshal_VkHeadlessSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkHeadlessSurfaceCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3227,16 +3736,19 @@
 #ifdef VK_EXT_line_rasterization
 void reservedmarshal_VkPhysicalDeviceLineRasterizationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceLineRasterizationPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceLineRasterizationPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineRasterizationLineStateCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineRasterizationLineStateCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3244,6 +3756,7 @@
 #ifdef VK_EXT_shader_atomic_float
 void reservedmarshal_VkPhysicalDeviceShaderAtomicFloatFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderAtomicFloatFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3255,6 +3768,7 @@
 #ifdef VK_EXT_index_type_uint8
 void reservedmarshal_VkPhysicalDeviceIndexTypeUint8FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceIndexTypeUint8FeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3262,6 +3776,7 @@
 #ifdef VK_EXT_extended_dynamic_state
 void reservedmarshal_VkPhysicalDeviceExtendedDynamicStateFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3269,6 +3784,7 @@
 #ifdef VK_EXT_shader_demote_to_helper_invocation
 void reservedmarshal_VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceShaderDemoteToHelperInvocationFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3276,66 +3792,79 @@
 #ifdef VK_NV_device_generated_commands
 void reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceGeneratedCommandsFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGraphicsShaderGroupCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsShaderGroupCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGraphicsPipelineShaderGroupsCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGraphicsPipelineShaderGroupsCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindShaderGroupIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindShaderGroupIndirectCommandNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindIndexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindIndexBufferIndirectCommandNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkBindVertexBufferIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkBindVertexBufferIndirectCommandNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkSetStateFlagsIndirectCommandNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSetStateFlagsIndirectCommandNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkIndirectCommandsStreamNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsStreamNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkIndirectCommandsLayoutTokenNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutTokenNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkIndirectCommandsLayoutCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkIndirectCommandsLayoutCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGeneratedCommandsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsInfoNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkGeneratedCommandsMemoryRequirementsInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkGeneratedCommandsMemoryRequirementsInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -3343,11 +3872,13 @@
 #ifdef VK_EXT_texel_buffer_alignment
 void reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceTexelBufferAlignmentPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3355,11 +3886,13 @@
 #ifdef VK_QCOM_render_pass_transform
 void reservedmarshal_VkRenderPassTransformBeginInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRenderPassTransformBeginInfoQCOM* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCommandBufferInheritanceRenderPassTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCommandBufferInheritanceRenderPassTransformInfoQCOM* forMarshaling,
     uint8_t** ptr);
 
@@ -3367,16 +3900,19 @@
 #ifdef VK_EXT_device_memory_report
 void reservedmarshal_VkPhysicalDeviceDeviceMemoryReportFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDeviceMemoryReportFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceMemoryReportCallbackDataEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceMemoryReportCallbackDataEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceDeviceMemoryReportCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDeviceMemoryReportCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3384,11 +3920,13 @@
 #ifdef VK_EXT_robustness2
 void reservedmarshal_VkPhysicalDeviceRobustness2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2FeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceRobustness2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRobustness2PropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3396,16 +3934,19 @@
 #ifdef VK_EXT_custom_border_color
 void reservedmarshal_VkSamplerCustomBorderColorCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkSamplerCustomBorderColorCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceCustomBorderColorPropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorPropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceCustomBorderColorFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceCustomBorderColorFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3415,16 +3956,19 @@
 #ifdef VK_EXT_private_data
 void reservedmarshal_VkPhysicalDevicePrivateDataFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePrivateDataFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDevicePrivateDataCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDevicePrivateDataCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPrivateDataSlotCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPrivateDataSlotCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3432,6 +3976,7 @@
 #ifdef VK_EXT_pipeline_creation_cache_control
 void reservedmarshal_VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevicePipelineCreationCacheControlFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3439,11 +3984,13 @@
 #ifdef VK_NV_device_diagnostics_config
 void reservedmarshal_VkPhysicalDeviceDiagnosticsConfigFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceDiagnosticsConfigFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceDiagnosticsConfigCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceDiagnosticsConfigCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -3453,16 +4000,19 @@
 #ifdef VK_NV_fragment_shading_rate_enums
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsFeaturesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentShadingRateEnumsPropertiesNV* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPipelineFragmentShadingRateEnumStateCreateInfoNV(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPipelineFragmentShadingRateEnumStateCreateInfoNV* forMarshaling,
     uint8_t** ptr);
 
@@ -3470,11 +4020,13 @@
 #ifdef VK_EXT_fragment_density_map2
 void reservedmarshal_VkPhysicalDeviceFragmentDensityMap2FeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2FeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceFragmentDensityMap2PropertiesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceFragmentDensityMap2PropertiesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3482,6 +4034,7 @@
 #ifdef VK_QCOM_rotated_copy_commands
 void reservedmarshal_VkCopyCommandTransformInfoQCOM(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyCommandTransformInfoQCOM* forMarshaling,
     uint8_t** ptr);
 
@@ -3489,6 +4042,7 @@
 #ifdef VK_EXT_image_robustness
 void reservedmarshal_VkPhysicalDeviceImageRobustnessFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceImageRobustnessFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3496,6 +4050,7 @@
 #ifdef VK_EXT_4444_formats
 void reservedmarshal_VkPhysicalDevice4444FormatsFeaturesEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDevice4444FormatsFeaturesEXT* forMarshaling,
     uint8_t** ptr);
 
@@ -3503,105 +4058,143 @@
 #ifdef VK_EXT_directfb_surface
 void reservedmarshal_VkDirectFBSurfaceCreateInfoEXT(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDirectFBSurfaceCreateInfoEXT* forMarshaling,
     uint8_t** ptr);
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void reservedmarshal_VkImportColorBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportColorBufferGOOGLE* forMarshaling,
+    uint8_t** ptr);
+
+void reservedmarshal_VkImportBufferGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportBufferGOOGLE* forMarshaling,
+    uint8_t** ptr);
+
+void reservedmarshal_VkImportPhysicalAddressGOOGLE(
+    VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
+    const VkImportPhysicalAddressGOOGLE* forMarshaling,
+    uint8_t** ptr);
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void reservedmarshal_VkDeviceOrHostAddressKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkDeviceOrHostAddressConstKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkDeviceOrHostAddressConstKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureBuildRangeInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildRangeInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureGeometryTrianglesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryTrianglesDataKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureGeometryAabbsDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryAabbsDataKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureGeometryInstancesDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryInstancesDataKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureGeometryDataKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryDataKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureGeometryKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureGeometryKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureBuildGeometryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildGeometryInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkWriteDescriptorSetAccelerationStructureKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkWriteDescriptorSetAccelerationStructureKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceAccelerationStructureFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructureFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceAccelerationStructurePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceAccelerationStructurePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureDeviceAddressInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureDeviceAddressInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureVersionInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureVersionInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyAccelerationStructureToMemoryInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureToMemoryInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyMemoryToAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyMemoryToAccelerationStructureInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkCopyAccelerationStructureInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkCopyAccelerationStructureInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkAccelerationStructureBuildSizesInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkAccelerationStructureBuildSizesInfoKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -3609,36 +4202,43 @@
 #ifdef VK_KHR_ray_tracing_pipeline
 void reservedmarshal_VkRayTracingShaderGroupCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingShaderGroupCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRayTracingPipelineInterfaceCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineInterfaceCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkRayTracingPipelineCreateInfoKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkRayTracingPipelineCreateInfoKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceRayTracingPipelineFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelineFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkPhysicalDeviceRayTracingPipelinePropertiesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayTracingPipelinePropertiesKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkStridedDeviceAddressRegionKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkStridedDeviceAddressRegionKHR* forMarshaling,
     uint8_t** ptr);
 
 void reservedmarshal_VkTraceRaysIndirectCommandKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkTraceRaysIndirectCommandKHR* forMarshaling,
     uint8_t** ptr);
 
@@ -3646,6 +4246,7 @@
 #ifdef VK_KHR_ray_query
 void reservedmarshal_VkPhysicalDeviceRayQueryFeaturesKHR(
     VulkanStreamGuest* vkStream,
+    VkStructureType rootType,
     const VkPhysicalDeviceRayQueryFeaturesKHR* forMarshaling,
     uint8_t** ptr);
 
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.cpp b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
index bc75720..bcc896b 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.cpp
@@ -12921,10 +12921,10 @@
 }
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void transform_tohost_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     ResourceTracker* resourceTracker,
-    VkImportColorBufferGOOGLE* toTransform)
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
@@ -12934,9 +12934,9 @@
     }
 }
 
-void transform_fromhost_VkImportColorBufferGOOGLE(
+void transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     ResourceTracker* resourceTracker,
-    VkImportColorBufferGOOGLE* toTransform)
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
@@ -12946,9 +12946,9 @@
     }
 }
 
-void transform_tohost_VkImportBufferGOOGLE(
+void transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     ResourceTracker* resourceTracker,
-    VkImportBufferGOOGLE* toTransform)
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
@@ -12956,11 +12956,13 @@
     {
         transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minFragmentDensityTexelSize));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxFragmentDensityTexelSize));
 }
 
-void transform_fromhost_VkImportBufferGOOGLE(
+void transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     ResourceTracker* resourceTracker,
-    VkImportBufferGOOGLE* toTransform)
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
@@ -12968,11 +12970,13 @@
     {
         transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minFragmentDensityTexelSize));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxFragmentDensityTexelSize));
 }
 
-void transform_tohost_VkImportPhysicalAddressGOOGLE(
+void transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT(
     ResourceTracker* resourceTracker,
-    VkImportPhysicalAddressGOOGLE* toTransform)
+    VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
@@ -12980,11 +12984,12 @@
     {
         transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
+    transform_tohost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(&toTransform->fragmentDensityMapAttachment));
 }
 
-void transform_fromhost_VkImportPhysicalAddressGOOGLE(
+void transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT(
     ResourceTracker* resourceTracker,
-    VkImportPhysicalAddressGOOGLE* toTransform)
+    VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
@@ -12992,6 +12997,7 @@
     {
         transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
+    transform_fromhost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(&toTransform->fragmentDensityMapAttachment));
 }
 
 #endif
@@ -14894,6 +14900,78 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void transform_tohost_VkImportColorBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportColorBufferGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkImportColorBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportColorBufferGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImportBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportBufferGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkImportBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportBufferGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImportPhysicalAddressGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportPhysicalAddressGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkImportPhysicalAddressGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportPhysicalAddressGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void transform_tohost_VkDeviceOrHostAddressKHR(
@@ -16761,20 +16839,20 @@
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            transform_tohost_VkImportColorBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            transform_tohost_VkImportBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            transform_tohost_VkImportPhysicalAddressGOOGLE(resourceTracker, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT(resourceTracker, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
@@ -17124,6 +17202,23 @@
             break;
         }
 #endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            transform_tohost_VkImportColorBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            transform_tohost_VkImportBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            transform_tohost_VkImportPhysicalAddressGOOGLE(resourceTracker, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
@@ -18319,20 +18414,20 @@
             break;
         }
 #endif
-#ifdef VK_GOOGLE_color_buffer
-        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+#ifdef VK_EXT_fragment_density_map
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_FEATURES_EXT:
         {
-            transform_fromhost_VkImportColorBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapFeaturesEXT*>(structExtension_out));
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FRAGMENT_DENSITY_MAP_PROPERTIES_EXT:
         {
-            transform_fromhost_VkImportBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceFragmentDensityMapPropertiesEXT*>(structExtension_out));
             break;
         }
-        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        case VK_STRUCTURE_TYPE_RENDER_PASS_FRAGMENT_DENSITY_MAP_CREATE_INFO_EXT:
         {
-            transform_fromhost_VkImportPhysicalAddressGOOGLE(resourceTracker, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT(resourceTracker, reinterpret_cast<VkRenderPassFragmentDensityMapCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
@@ -18682,6 +18777,23 @@
             break;
         }
 #endif
+#ifdef VK_GOOGLE_gfxstream
+        case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
+        {
+            transform_fromhost_VkImportColorBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_BUFFER_GOOGLE:
+        {
+            transform_fromhost_VkImportBufferGOOGLE(resourceTracker, reinterpret_cast<VkImportBufferGOOGLE*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
+        {
+            transform_fromhost_VkImportPhysicalAddressGOOGLE(resourceTracker, reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_KHR_acceleration_structure
         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_ACCELERATION_STRUCTURE_KHR:
         {
diff --git a/system/vulkan_enc/goldfish_vk_transform_guest.h b/system/vulkan_enc/goldfish_vk_transform_guest.h
index 9434787..78262cd 100644
--- a/system/vulkan_enc/goldfish_vk_transform_guest.h
+++ b/system/vulkan_enc/goldfish_vk_transform_guest.h
@@ -4705,30 +4705,30 @@
     VkMetalSurfaceCreateInfoEXT* toTransform);
 
 #endif
-#ifdef VK_GOOGLE_color_buffer
-void transform_tohost_VkImportColorBufferGOOGLE(
+#ifdef VK_EXT_fragment_density_map
+void transform_tohost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     ResourceTracker* resourceTracker,
-    VkImportColorBufferGOOGLE* toTransform);
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform);
 
-void transform_fromhost_VkImportColorBufferGOOGLE(
+void transform_fromhost_VkPhysicalDeviceFragmentDensityMapFeaturesEXT(
     ResourceTracker* resourceTracker,
-    VkImportColorBufferGOOGLE* toTransform);
+    VkPhysicalDeviceFragmentDensityMapFeaturesEXT* toTransform);
 
-void transform_tohost_VkImportBufferGOOGLE(
+void transform_tohost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     ResourceTracker* resourceTracker,
-    VkImportBufferGOOGLE* toTransform);
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform);
 
-void transform_fromhost_VkImportBufferGOOGLE(
+void transform_fromhost_VkPhysicalDeviceFragmentDensityMapPropertiesEXT(
     ResourceTracker* resourceTracker,
-    VkImportBufferGOOGLE* toTransform);
+    VkPhysicalDeviceFragmentDensityMapPropertiesEXT* toTransform);
 
-void transform_tohost_VkImportPhysicalAddressGOOGLE(
+void transform_tohost_VkRenderPassFragmentDensityMapCreateInfoEXT(
     ResourceTracker* resourceTracker,
-    VkImportPhysicalAddressGOOGLE* toTransform);
+    VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform);
 
-void transform_fromhost_VkImportPhysicalAddressGOOGLE(
+void transform_fromhost_VkRenderPassFragmentDensityMapCreateInfoEXT(
     ResourceTracker* resourceTracker,
-    VkImportPhysicalAddressGOOGLE* toTransform);
+    VkRenderPassFragmentDensityMapCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_EXT_scalar_block_layout
@@ -5422,6 +5422,30 @@
 
 #endif
 #ifdef VK_GOOGLE_gfxstream
+void transform_tohost_VkImportColorBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportColorBufferGOOGLE* toTransform);
+
+void transform_fromhost_VkImportColorBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportColorBufferGOOGLE* toTransform);
+
+void transform_tohost_VkImportBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportBufferGOOGLE* toTransform);
+
+void transform_fromhost_VkImportBufferGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportBufferGOOGLE* toTransform);
+
+void transform_tohost_VkImportPhysicalAddressGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportPhysicalAddressGOOGLE* toTransform);
+
+void transform_fromhost_VkImportPhysicalAddressGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkImportPhysicalAddressGOOGLE* toTransform);
+
 #endif
 #ifdef VK_KHR_acceleration_structure
 void transform_tohost_VkDeviceOrHostAddressKHR(