diff --git a/system/vulkan_enc/Android.mk b/system/vulkan_enc/Android.mk
index 499f875..ec87be0 100644
--- a/system/vulkan_enc/Android.mk
+++ b/system/vulkan_enc/Android.mk
@@ -48,7 +48,6 @@
     VulkanHandleMapping.cpp \
     ResourceTracker.cpp \
     VkEncoder.cpp \
-VkEventHandler.cpp \
 goldfish_vk_extension_structs_guest.cpp \
 goldfish_vk_marshaling_guest.cpp \
 goldfish_vk_deepcopy_guest.cpp \
diff --git a/system/vulkan_enc/CMakeLists.txt b/system/vulkan_enc/CMakeLists.txt
index 87d92a0..cb0c71a 100644
--- a/system/vulkan_enc/CMakeLists.txt
+++ b/system/vulkan_enc/CMakeLists.txt
@@ -1,8 +1,8 @@
 # This is an autogenerated file! Do not edit!
 # instead run make from .../device/generic/goldfish-opengl
 # which will re-generate this file.
-android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc/Android.mk" "3a3e30f6712f849d0d4fdff1b495901bc4eef121d06df6f1a5176d80f0b8fc80")
-set(vulkan_enc_src Resources.cpp Validation.cpp VulkanStream.cpp VulkanHandleMapping.cpp ResourceTracker.cpp VkEncoder.cpp VkEventHandler.cpp goldfish_vk_extension_structs_guest.cpp goldfish_vk_marshaling_guest.cpp goldfish_vk_deepcopy_guest.cpp goldfish_vk_handlemap_guest.cpp goldfish_vk_transform.cpp)
+android_validate_sha256("${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc/Android.mk" "507ec7abf2b89e48acb38033eb9ecf2d2ca9826bfc37aa4d28af8fbecb5d6362")
+set(vulkan_enc_src Resources.cpp Validation.cpp VulkanStream.cpp VulkanHandleMapping.cpp ResourceTracker.cpp VkEncoder.cpp goldfish_vk_extension_structs_guest.cpp goldfish_vk_marshaling_guest.cpp goldfish_vk_deepcopy_guest.cpp goldfish_vk_handlemap_guest.cpp goldfish_vk_transform.cpp)
 android_add_shared_library(vulkan_enc)
 target_include_directories(vulkan_enc PRIVATE ${GOLDFISH_DEVICE_ROOT}/android-emu ${GOLDFISH_DEVICE_ROOT}/shared/OpenglCodecCommon ${GOLDFISH_DEVICE_ROOT}/system/vulkan_enc ${GOLDFISH_DEVICE_ROOT}/./host/include/libOpenglRender ${GOLDFISH_DEVICE_ROOT}/./system/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/guest ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include ${GOLDFISH_DEVICE_ROOT}/./../../../external/qemu/android/android-emugl/host/include/vulkan)
 target_compile_definitions(vulkan_enc PRIVATE "-DWITH_GLES2" "-DPLATFORM_SDK_VERSION=29" "-DGOLDFISH_HIDL_GRALLOC" "-DEMULATOR_OPENGL_POST_O=1" "-DHOST_BUILD" "-DANDROID" "-DGL_GLEXT_PROTOTYPES" "-DPAGE_SIZE=4096" "-DGOLDFISH_VULKAN" "-DLOG_TAG=\"goldfish_vulkan\"" "-DVK_ANDROID_native_buffer" "-DVK_GOOGLE_address_space" "-DVK_USE_PLATFORM_ANDROID_KHR" "-DVK_NO_PROTOTYPES")
diff --git a/system/vulkan_enc/ResourceTracker.cpp b/system/vulkan_enc/ResourceTracker.cpp
index 7d5bd67..f76c644 100644
--- a/system/vulkan_enc/ResourceTracker.cpp
+++ b/system/vulkan_enc/ResourceTracker.cpp
@@ -263,7 +263,39 @@
         return mFeatureInfo->hasDirectMem;
     }
 
-    void deviceMemoryTransform(
+    void deviceMemoryTransform_tohost(
+        VkDeviceMemory* memory, uint32_t memoryCount,
+        VkDeviceSize* offset, uint32_t offsetCount,
+        VkDeviceSize* size, uint32_t sizeCount,
+        uint32_t* typeIndex, uint32_t typeIndexCount,
+        uint32_t* typeBits, uint32_t typeBitsCount) {
+        
+        if (memoryCount != offsetCount ||
+            offsetCount != sizeCount ||
+            sizeCount != memoryCount) {
+            ALOGE("FATAL: Mismatched counts for device memory info");
+            abort();
+        }
+
+        for (uint32_t i = 0; i < memoryCount; ++i) {
+            // TODO
+            (void)memory;
+            (void)offset;
+            (void)size;
+        }
+
+        for (uint32_t i = 0; i < typeIndexCount; ++i) {
+            // TODO
+            (void)typeIndex;
+        }
+
+        for (uint32_t i = 0; i < typeBitsCount; ++i) {
+            // TODO
+            (void)typeBits;
+        }
+    }
+
+    void deviceMemoryTransform_fromhost(
         VkDeviceMemory* memory, uint32_t memoryCount,
         VkDeviceSize* offset, uint32_t offsetCount,
         VkDeviceSize* size, uint32_t sizeCount,
@@ -323,6 +355,11 @@
         // no-op
     }
 
+    void on_vkGetPhysicalDeviceMemoryProperties(
+        void*,
+        VkPhysicalDevice,
+        VkPhysicalDeviceMemoryProperties*) { }
+
     VkResult on_vkCreateDevice(
         void* context,
         VkResult input_result,
@@ -631,13 +668,27 @@
     return mImpl->usingDirectMapping();
 }
 
-void ResourceTracker::deviceMemoryTransform(
+void ResourceTracker::deviceMemoryTransform_tohost(
     VkDeviceMemory* memory, uint32_t memoryCount,
     VkDeviceSize* offset, uint32_t offsetCount,
     VkDeviceSize* size, uint32_t sizeCount,
     uint32_t* typeIndex, uint32_t typeIndexCount,
     uint32_t* typeBits, uint32_t typeBitsCount) {
-    mImpl->deviceMemoryTransform(
+    mImpl->deviceMemoryTransform_tohost(
+        memory, memoryCount,
+        offset, offsetCount,
+        size, sizeCount,
+        typeIndex, typeIndexCount,
+        typeBits, typeBitsCount);
+}
+
+void ResourceTracker::deviceMemoryTransform_fromhost(
+    VkDeviceMemory* memory, uint32_t memoryCount,
+    VkDeviceSize* offset, uint32_t offsetCount,
+    VkDeviceSize* size, uint32_t sizeCount,
+    uint32_t* typeIndex, uint32_t typeIndexCount,
+    uint32_t* typeBits, uint32_t typeBitsCount) {
+    mImpl->deviceMemoryTransform_fromhost(
         memory, memoryCount,
         offset, offsetCount,
         size, sizeCount,
@@ -670,6 +721,14 @@
     mImpl->on_vkGetPhysicalDeviceProperties2(context, physicalDevice, pProperties);
 }
 
+void ResourceTracker::on_vkGetPhysicalDeviceMemoryProperties(
+    void* context,
+    VkPhysicalDevice physicalDevice,
+    VkPhysicalDeviceMemoryProperties* pMemoryProperties) {
+    mImpl->on_vkGetPhysicalDeviceMemoryProperties(
+        context, physicalDevice, pMemoryProperties);
+}
+
 VkResult ResourceTracker::on_vkCreateDevice(
     void* context,
     VkResult input_result,
diff --git a/system/vulkan_enc/ResourceTracker.h b/system/vulkan_enc/ResourceTracker.h
index 104cbb8..d4299ea 100644
--- a/system/vulkan_enc/ResourceTracker.h
+++ b/system/vulkan_enc/ResourceTracker.h
@@ -18,14 +18,13 @@
 
 #include "VulkanHandleMapping.h"
 #include "VulkanHandles.h"
-#include "VkEventHandler.h"
 #include <memory>
 
 struct EmulatorFeatureInfo;
 
 namespace goldfish_vk {
 
-class ResourceTracker : public VkEventHandler {
+class ResourceTracker {
 public:
     ResourceTracker();
     virtual ~ResourceTracker();
@@ -44,18 +43,22 @@
     VkResult on_vkEnumerateInstanceVersion(
         void* context,
         VkResult input_result,
-        uint32_t* apiVersion) override;
+        uint32_t* apiVersion);
     VkResult on_vkEnumerateDeviceExtensionProperties(
         void* context,
         VkResult input_result,
         VkPhysicalDevice physicalDevice,
         const char* pLayerName,
         uint32_t* pPropertyCount,
-        VkExtensionProperties* pProperties) override;
+        VkExtensionProperties* pProperties);
     void on_vkGetPhysicalDeviceProperties2(
         void* context,
         VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties2* pProperties) override;
+        VkPhysicalDeviceProperties2* pProperties);
+    void on_vkGetPhysicalDeviceMemoryProperties(
+        void* context,
+        VkPhysicalDevice physicalDevice,
+        VkPhysicalDeviceMemoryProperties* pMemoryProperties);
 
     VkResult on_vkCreateDevice(
         void* context,
@@ -63,7 +66,7 @@
         VkPhysicalDevice physicalDevice,
         const VkDeviceCreateInfo* pCreateInfo,
         const VkAllocationCallbacks* pAllocator,
-        VkDevice* pDevice) override;
+        VkDevice* pDevice);
 
     VkResult on_vkAllocateMemory(
         void* context,
@@ -71,7 +74,7 @@
         VkDevice device,
         const VkMemoryAllocateInfo* pAllocateInfo,
         const VkAllocationCallbacks* pAllocator,
-        VkDeviceMemory* pMemory) override;
+        VkDeviceMemory* pMemory);
 
     VkResult on_vkMapMemory(
         void* context,
@@ -86,7 +89,7 @@
     void on_vkUnmapMemory(
         void* context,
         VkDevice device,
-        VkDeviceMemory memory) override;
+        VkDeviceMemory memory);
 
     void unwrap_VkNativeBufferANDROID(
         const VkImageCreateInfo* pCreateInfo,
@@ -114,7 +117,13 @@
     bool isValidMemoryRange(const VkMappedMemoryRange& range) const;
     void setupFeatures(const EmulatorFeatureInfo* features);
     bool usingDirectMapping() const;
-    void deviceMemoryTransform(
+    void deviceMemoryTransform_tohost(
+        VkDeviceMemory* memory, uint32_t memoryCount,
+        VkDeviceSize* offset, uint32_t offsetCount,
+        VkDeviceSize* size, uint32_t sizeCount,
+        uint32_t* typeIndex, uint32_t typeIndexCount,
+        uint32_t* typeBits, uint32_t typeBitsCount);
+    void deviceMemoryTransform_fromhost(
         VkDeviceMemory* memory, uint32_t memoryCount,
         VkDeviceSize* offset, uint32_t offsetCount,
         VkDeviceSize* size, uint32_t sizeCount,
diff --git a/system/vulkan_enc/Validation.h b/system/vulkan_enc/Validation.h
index 30af8b4..f006633 100644
--- a/system/vulkan_enc/Validation.h
+++ b/system/vulkan_enc/Validation.h
@@ -15,24 +15,22 @@
 
 #include <vulkan/vulkan.h>
 
-#include "VkEventHandler.h"
-
 namespace goldfish_vk {
 
-class Validation : public VkEventHandler {
+class Validation {
 public:
     VkResult on_vkFlushMappedMemoryRanges(
         void* context,
         VkResult input_result,
         VkDevice device,
         uint32_t memoryRangeCount,
-        const VkMappedMemoryRange* pMemoryRanges) override;
+        const VkMappedMemoryRange* pMemoryRanges);
     VkResult on_vkInvalidateMappedMemoryRanges(
         void* context,
         VkResult input_result,
         VkDevice device,
         uint32_t memoryRangeCount,
-        const VkMappedMemoryRange* pMemoryRanges) override;
+        const VkMappedMemoryRange* pMemoryRanges);
 };
 
-} // namespace goldfish_vk
\ No newline at end of file
+} // namespace goldfish_vk
diff --git a/system/vulkan_enc/VkEncoder.cpp b/system/vulkan_enc/VkEncoder.cpp
index 736924f..6724ca5 100644
--- a/system/vulkan_enc/VkEncoder.cpp
+++ b/system/vulkan_enc/VkEncoder.cpp
@@ -106,11 +106,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkInstanceCreateInfo(mImpl->resources(), (VkInstanceCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkInstanceCreateInfo(mImpl->resources(), (VkInstanceCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -178,7 +178,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -345,6 +345,10 @@
     stream->write((uint64_t*)&cgen_var_21, 1 * 8);
     marshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
     unmarshal_VkPhysicalDeviceFeatures(stream, (VkPhysicalDeviceFeatures*)(pFeatures));
+    if (pFeatures)
+    {
+        transform_fromhost_VkPhysicalDeviceFeatures(mImpl->resources(), (VkPhysicalDeviceFeatures*)(pFeatures));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceFormatProperties(
@@ -380,6 +384,10 @@
     stream->write((VkFormat*)&local_format, sizeof(VkFormat));
     marshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
     unmarshal_VkFormatProperties(stream, (VkFormatProperties*)(pFormatProperties));
+    if (pFormatProperties)
+    {
+        transform_fromhost_VkFormatProperties(mImpl->resources(), (VkFormatProperties*)(pFormatProperties));
+    }
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties(
@@ -435,6 +443,10 @@
     stream->write((VkImageCreateFlags*)&local_flags, sizeof(VkImageCreateFlags));
     marshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
     unmarshal_VkImageFormatProperties(stream, (VkImageFormatProperties*)(pImageFormatProperties));
+    if (pImageFormatProperties)
+    {
+        transform_fromhost_VkImageFormatProperties(mImpl->resources(), (VkImageFormatProperties*)(pImageFormatProperties));
+    }
     VkResult vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceImageFormatProperties_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -471,6 +483,10 @@
     stream->write((uint64_t*)&cgen_var_27, 1 * 8);
     marshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
     unmarshal_VkPhysicalDeviceProperties(stream, (VkPhysicalDeviceProperties*)(pProperties));
+    if (pProperties)
+    {
+        transform_fromhost_VkPhysicalDeviceProperties(mImpl->resources(), (VkPhysicalDeviceProperties*)(pProperties));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceQueueFamilyProperties(
@@ -558,6 +574,13 @@
             unmarshal_VkQueueFamilyProperties(stream, (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
         }
     }
+    if (pQueueFamilyProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
+        {
+            transform_fromhost_VkQueueFamilyProperties(mImpl->resources(), (VkQueueFamilyProperties*)(pQueueFamilyProperties + i));
+        }
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceMemoryProperties(
@@ -588,6 +611,11 @@
     stream->write((uint64_t*)&cgen_var_37, 1 * 8);
     marshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
     unmarshal_VkPhysicalDeviceMemoryProperties(stream, (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
+    if (pMemoryProperties)
+    {
+        transform_fromhost_VkPhysicalDeviceMemoryProperties(mImpl->resources(), (VkPhysicalDeviceMemoryProperties*)(pMemoryProperties));
+    }
+    mImpl->resources()->on_vkGetPhysicalDeviceMemoryProperties(this, physicalDevice, pMemoryProperties);
 }
 
 PFN_vkVoidFunction VkEncoder::vkGetInstanceProcAddr(
@@ -702,11 +730,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDeviceCreateInfo(mImpl->resources(), (VkDeviceCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDeviceCreateInfo(mImpl->resources(), (VkDeviceCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -781,7 +809,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -899,6 +927,13 @@
             unmarshal_VkExtensionProperties(stream, (VkExtensionProperties*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkExtensionProperties(mImpl->resources(), (VkExtensionProperties*)(pProperties + i));
+        }
+    }
     VkResult vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
     stream->read(&vkEnumerateInstanceExtensionProperties_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -994,6 +1029,13 @@
             unmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkLayerProperties(mImpl->resources(), (VkLayerProperties*)(pProperties + i));
+        }
+    }
     VkResult vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
     stream->read(&vkEnumerateInstanceLayerProperties_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -1087,6 +1129,13 @@
             unmarshal_VkLayerProperties(stream, (VkLayerProperties*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkLayerProperties(mImpl->resources(), (VkLayerProperties*)(pProperties + i));
+        }
+    }
     VkResult vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
     stream->read(&vkEnumerateDeviceLayerProperties_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -1176,7 +1225,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((submitCount)); ++i)
         {
-            transform_VkSubmitInfo(mImpl->resources(), (VkSubmitInfo*)(local_pSubmits + i));
+            transform_tohost_VkSubmitInfo(mImpl->resources(), (VkSubmitInfo*)(local_pSubmits + i));
         }
     }
     countingStream->rewind();
@@ -1311,11 +1360,11 @@
     local_pAllocator = nullptr;
     if (local_pAllocateInfo)
     {
-        transform_VkMemoryAllocateInfo(mImpl->resources(), (VkMemoryAllocateInfo*)(local_pAllocateInfo));
+        transform_tohost_VkMemoryAllocateInfo(mImpl->resources(), (VkMemoryAllocateInfo*)(local_pAllocateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -1391,7 +1440,7 @@
         deepcopy_VkAllocationCallbacks(pool, pAllocator, (VkAllocationCallbacks*)(local_pAllocator));
     }
     local_pAllocator = nullptr;
-    mImpl->resources()->deviceMemoryTransform(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    mImpl->resources()->deviceMemoryTransform_tohost(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     countingStream->rewind();
     {
         uint64_t cgen_var_93;
@@ -1478,7 +1527,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
         {
-            transform_VkMappedMemoryRange(mImpl->resources(), (VkMappedMemoryRange*)(local_pMemoryRanges + i));
+            transform_tohost_VkMappedMemoryRange(mImpl->resources(), (VkMappedMemoryRange*)(local_pMemoryRanges + i));
         }
     }
     countingStream->rewind();
@@ -1580,7 +1629,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((memoryRangeCount)); ++i)
         {
-            transform_VkMappedMemoryRange(mImpl->resources(), (VkMappedMemoryRange*)(local_pMemoryRanges + i));
+            transform_tohost_VkMappedMemoryRange(mImpl->resources(), (VkMappedMemoryRange*)(local_pMemoryRanges + i));
         }
     }
     countingStream->rewind();
@@ -1648,7 +1697,7 @@
     VkDeviceMemory local_memory;
     local_device = device;
     local_memory = memory;
-    mImpl->resources()->deviceMemoryTransform(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    mImpl->resources()->deviceMemoryTransform_tohost(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     countingStream->rewind();
     {
         uint64_t cgen_var_103;
@@ -1693,7 +1742,7 @@
     local_buffer = buffer;
     local_memory = memory;
     local_memoryOffset = memoryOffset;
-    mImpl->resources()->deviceMemoryTransform(&local_memory, 1, &local_memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    mImpl->resources()->deviceMemoryTransform_tohost(&local_memory, 1, &local_memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     countingStream->rewind();
     {
         uint64_t cgen_var_107;
@@ -1749,7 +1798,7 @@
     local_image = image;
     local_memory = memory;
     local_memoryOffset = memoryOffset;
-    mImpl->resources()->deviceMemoryTransform(&local_memory, 1, &local_memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    mImpl->resources()->deviceMemoryTransform_tohost(&local_memory, 1, &local_memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     countingStream->rewind();
     {
         uint64_t cgen_var_113;
@@ -1823,6 +1872,10 @@
     stream->write((uint64_t*)&cgen_var_122, 1 * 8);
     marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
     unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
+    if (pMemoryRequirements)
+    {
+        transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
+    }
 }
 
 void VkEncoder::vkGetImageMemoryRequirements(
@@ -1862,6 +1915,10 @@
     stream->write((uint64_t*)&cgen_var_126, 1 * 8);
     marshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
     unmarshal_VkMemoryRequirements(stream, (VkMemoryRequirements*)(pMemoryRequirements));
+    if (pMemoryRequirements)
+    {
+        transform_fromhost_VkMemoryRequirements(mImpl->resources(), (VkMemoryRequirements*)(pMemoryRequirements));
+    }
 }
 
 void VkEncoder::vkGetImageSparseMemoryRequirements(
@@ -1958,6 +2015,13 @@
             unmarshal_VkSparseImageMemoryRequirements(stream, (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
         }
     }
+    if (pSparseMemoryRequirements)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
+        {
+            transform_fromhost_VkSparseImageMemoryRequirements(mImpl->resources(), (VkSparseImageMemoryRequirements*)(pSparseMemoryRequirements + i));
+        }
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties(
@@ -2070,6 +2134,13 @@
             unmarshal_VkSparseImageFormatProperties(stream, (VkSparseImageFormatProperties*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkSparseImageFormatProperties(mImpl->resources(), (VkSparseImageFormatProperties*)(pProperties + i));
+        }
+    }
 }
 
 VkResult VkEncoder::vkQueueBindSparse(
@@ -2103,7 +2174,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            transform_VkBindSparseInfo(mImpl->resources(), (VkBindSparseInfo*)(local_pBindInfo + i));
+            transform_tohost_VkBindSparseInfo(mImpl->resources(), (VkBindSparseInfo*)(local_pBindInfo + i));
         }
     }
     countingStream->rewind();
@@ -2174,11 +2245,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkFenceCreateInfo(mImpl->resources(), (VkFenceCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkFenceCreateInfo(mImpl->resources(), (VkFenceCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2255,7 +2326,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2491,11 +2562,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkSemaphoreCreateInfo(mImpl->resources(), (VkSemaphoreCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkSemaphoreCreateInfo(mImpl->resources(), (VkSemaphoreCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2572,7 +2643,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2641,11 +2712,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkEventCreateInfo(mImpl->resources(), (VkEventCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkEventCreateInfo(mImpl->resources(), (VkEventCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2722,7 +2793,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2914,11 +2985,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkQueryPoolCreateInfo(mImpl->resources(), (VkQueryPoolCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkQueryPoolCreateInfo(mImpl->resources(), (VkQueryPoolCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -2995,7 +3066,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3136,11 +3207,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkBufferCreateInfo(mImpl->resources(), (VkBufferCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkBufferCreateInfo(mImpl->resources(), (VkBufferCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3217,7 +3288,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3286,11 +3357,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkBufferViewCreateInfo(mImpl->resources(), (VkBufferViewCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkBufferViewCreateInfo(mImpl->resources(), (VkBufferViewCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3367,7 +3438,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3437,11 +3508,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkImageCreateInfo(mImpl->resources(), (VkImageCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkImageCreateInfo(mImpl->resources(), (VkImageCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3518,7 +3589,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3581,7 +3652,7 @@
     }
     if (local_pSubresource)
     {
-        transform_VkImageSubresource(mImpl->resources(), (VkImageSubresource*)(local_pSubresource));
+        transform_tohost_VkImageSubresource(mImpl->resources(), (VkImageSubresource*)(local_pSubresource));
     }
     countingStream->rewind();
     {
@@ -3608,6 +3679,10 @@
     marshal_VkImageSubresource(stream, (VkImageSubresource*)(local_pSubresource));
     marshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
     unmarshal_VkSubresourceLayout(stream, (VkSubresourceLayout*)(pLayout));
+    if (pLayout)
+    {
+        transform_fromhost_VkSubresourceLayout(mImpl->resources(), (VkSubresourceLayout*)(pLayout));
+    }
 }
 
 VkResult VkEncoder::vkCreateImageView(
@@ -3640,11 +3715,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkImageViewCreateInfo(mImpl->resources(), (VkImageViewCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkImageViewCreateInfo(mImpl->resources(), (VkImageViewCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3721,7 +3796,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3790,11 +3865,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkShaderModuleCreateInfo(mImpl->resources(), (VkShaderModuleCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkShaderModuleCreateInfo(mImpl->resources(), (VkShaderModuleCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3871,7 +3946,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -3940,11 +4015,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkPipelineCacheCreateInfo(mImpl->resources(), (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkPipelineCacheCreateInfo(mImpl->resources(), (VkPipelineCacheCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4021,7 +4096,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4263,12 +4338,12 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            transform_VkGraphicsPipelineCreateInfo(mImpl->resources(), (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
+            transform_tohost_VkGraphicsPipelineCreateInfo(mImpl->resources(), (VkGraphicsPipelineCreateInfo*)(local_pCreateInfos + i));
         }
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4388,12 +4463,12 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((createInfoCount)); ++i)
         {
-            transform_VkComputePipelineCreateInfo(mImpl->resources(), (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
+            transform_tohost_VkComputePipelineCreateInfo(mImpl->resources(), (VkComputePipelineCreateInfo*)(local_pCreateInfos + i));
         }
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4496,7 +4571,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4565,11 +4640,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkPipelineLayoutCreateInfo(mImpl->resources(), (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkPipelineLayoutCreateInfo(mImpl->resources(), (VkPipelineLayoutCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4646,7 +4721,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4715,11 +4790,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkSamplerCreateInfo(mImpl->resources(), (VkSamplerCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkSamplerCreateInfo(mImpl->resources(), (VkSamplerCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4796,7 +4871,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4865,11 +4940,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -4946,7 +5021,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5015,11 +5090,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDescriptorPoolCreateInfo(mImpl->resources(), (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDescriptorPoolCreateInfo(mImpl->resources(), (VkDescriptorPoolCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5096,7 +5171,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5202,7 +5277,7 @@
     }
     if (local_pAllocateInfo)
     {
-        transform_VkDescriptorSetAllocateInfo(mImpl->resources(), (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
+        transform_tohost_VkDescriptorSetAllocateInfo(mImpl->resources(), (VkDescriptorSetAllocateInfo*)(local_pAllocateInfo));
     }
     countingStream->rewind();
     {
@@ -5378,14 +5453,14 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
         {
-            transform_VkWriteDescriptorSet(mImpl->resources(), (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
+            transform_tohost_VkWriteDescriptorSet(mImpl->resources(), (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
         }
     }
     if (local_pDescriptorCopies)
     {
         for (uint32_t i = 0; i < (uint32_t)((descriptorCopyCount)); ++i)
         {
-            transform_VkCopyDescriptorSet(mImpl->resources(), (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
+            transform_tohost_VkCopyDescriptorSet(mImpl->resources(), (VkCopyDescriptorSet*)(local_pDescriptorCopies + i));
         }
     }
     countingStream->rewind();
@@ -5454,11 +5529,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkFramebufferCreateInfo(mImpl->resources(), (VkFramebufferCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkFramebufferCreateInfo(mImpl->resources(), (VkFramebufferCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5535,7 +5610,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5604,11 +5679,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkRenderPassCreateInfo(mImpl->resources(), (VkRenderPassCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkRenderPassCreateInfo(mImpl->resources(), (VkRenderPassCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5685,7 +5760,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5761,6 +5836,10 @@
     stream->write((uint64_t*)&cgen_var_456, 1 * 8);
     marshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
     unmarshal_VkExtent2D(stream, (VkExtent2D*)(pGranularity));
+    if (pGranularity)
+    {
+        transform_fromhost_VkExtent2D(mImpl->resources(), (VkExtent2D*)(pGranularity));
+    }
 }
 
 VkResult VkEncoder::vkCreateCommandPool(
@@ -5793,11 +5872,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkCommandPoolCreateInfo(mImpl->resources(), (VkCommandPoolCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkCommandPoolCreateInfo(mImpl->resources(), (VkCommandPoolCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5874,7 +5953,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -5980,7 +6059,7 @@
     }
     if (local_pAllocateInfo)
     {
-        transform_VkCommandBufferAllocateInfo(mImpl->resources(), (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
+        transform_tohost_VkCommandBufferAllocateInfo(mImpl->resources(), (VkCommandBufferAllocateInfo*)(local_pAllocateInfo));
     }
     countingStream->rewind();
     {
@@ -6128,7 +6207,7 @@
     }
     if (local_pBeginInfo)
     {
-        transform_VkCommandBufferBeginInfo(mImpl->resources(), (VkCommandBufferBeginInfo*)(local_pBeginInfo));
+        transform_tohost_VkCommandBufferBeginInfo(mImpl->resources(), (VkCommandBufferBeginInfo*)(local_pBeginInfo));
     }
     countingStream->rewind();
     {
@@ -6294,7 +6373,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            transform_VkViewport(mImpl->resources(), (VkViewport*)(local_pViewports + i));
+            transform_tohost_VkViewport(mImpl->resources(), (VkViewport*)(local_pViewports + i));
         }
     }
     countingStream->rewind();
@@ -6356,7 +6435,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((scissorCount)); ++i)
         {
-            transform_VkRect2D(mImpl->resources(), (VkRect2D*)(local_pScissors + i));
+            transform_tohost_VkRect2D(mImpl->resources(), (VkRect2D*)(local_pScissors + i));
         }
     }
     countingStream->rewind();
@@ -7142,7 +7221,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            transform_VkBufferCopy(mImpl->resources(), (VkBufferCopy*)(local_pRegions + i));
+            transform_tohost_VkBufferCopy(mImpl->resources(), (VkBufferCopy*)(local_pRegions + i));
         }
     }
     countingStream->rewind();
@@ -7223,7 +7302,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            transform_VkImageCopy(mImpl->resources(), (VkImageCopy*)(local_pRegions + i));
+            transform_tohost_VkImageCopy(mImpl->resources(), (VkImageCopy*)(local_pRegions + i));
         }
     }
     countingStream->rewind();
@@ -7311,7 +7390,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            transform_VkImageBlit(mImpl->resources(), (VkImageBlit*)(local_pRegions + i));
+            transform_tohost_VkImageBlit(mImpl->resources(), (VkImageBlit*)(local_pRegions + i));
         }
     }
     countingStream->rewind();
@@ -7395,7 +7474,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            transform_VkBufferImageCopy(mImpl->resources(), (VkBufferImageCopy*)(local_pRegions + i));
+            transform_tohost_VkBufferImageCopy(mImpl->resources(), (VkBufferImageCopy*)(local_pRegions + i));
         }
     }
     countingStream->rewind();
@@ -7475,7 +7554,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            transform_VkBufferImageCopy(mImpl->resources(), (VkBufferImageCopy*)(local_pRegions + i));
+            transform_tohost_VkBufferImageCopy(mImpl->resources(), (VkBufferImageCopy*)(local_pRegions + i));
         }
     }
     countingStream->rewind();
@@ -7662,13 +7741,13 @@
     }
     if (local_pColor)
     {
-        transform_VkClearColorValue(mImpl->resources(), (VkClearColorValue*)(local_pColor));
+        transform_tohost_VkClearColorValue(mImpl->resources(), (VkClearColorValue*)(local_pColor));
     }
     if (local_pRanges)
     {
         for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
         {
-            transform_VkImageSubresourceRange(mImpl->resources(), (VkImageSubresourceRange*)(local_pRanges + i));
+            transform_tohost_VkImageSubresourceRange(mImpl->resources(), (VkImageSubresourceRange*)(local_pRanges + i));
         }
     }
     countingStream->rewind();
@@ -7747,13 +7826,13 @@
     }
     if (local_pDepthStencil)
     {
-        transform_VkClearDepthStencilValue(mImpl->resources(), (VkClearDepthStencilValue*)(local_pDepthStencil));
+        transform_tohost_VkClearDepthStencilValue(mImpl->resources(), (VkClearDepthStencilValue*)(local_pDepthStencil));
     }
     if (local_pRanges)
     {
         for (uint32_t i = 0; i < (uint32_t)((rangeCount)); ++i)
         {
-            transform_VkImageSubresourceRange(mImpl->resources(), (VkImageSubresourceRange*)(local_pRanges + i));
+            transform_tohost_VkImageSubresourceRange(mImpl->resources(), (VkImageSubresourceRange*)(local_pRanges + i));
         }
     }
     countingStream->rewind();
@@ -7834,14 +7913,14 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((attachmentCount)); ++i)
         {
-            transform_VkClearAttachment(mImpl->resources(), (VkClearAttachment*)(local_pAttachments + i));
+            transform_tohost_VkClearAttachment(mImpl->resources(), (VkClearAttachment*)(local_pAttachments + i));
         }
     }
     if (local_pRects)
     {
         for (uint32_t i = 0; i < (uint32_t)((rectCount)); ++i)
         {
-            transform_VkClearRect(mImpl->resources(), (VkClearRect*)(local_pRects + i));
+            transform_tohost_VkClearRect(mImpl->resources(), (VkClearRect*)(local_pRects + i));
         }
     }
     countingStream->rewind();
@@ -7920,7 +7999,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((regionCount)); ++i)
         {
-            transform_VkImageResolve(mImpl->resources(), (VkImageResolve*)(local_pRegions + i));
+            transform_tohost_VkImageResolve(mImpl->resources(), (VkImageResolve*)(local_pRegions + i));
         }
     }
     countingStream->rewind();
@@ -8117,21 +8196,21 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
         {
-            transform_VkMemoryBarrier(mImpl->resources(), (VkMemoryBarrier*)(local_pMemoryBarriers + i));
+            transform_tohost_VkMemoryBarrier(mImpl->resources(), (VkMemoryBarrier*)(local_pMemoryBarriers + i));
         }
     }
     if (local_pBufferMemoryBarriers)
     {
         for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
         {
-            transform_VkBufferMemoryBarrier(mImpl->resources(), (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
+            transform_tohost_VkBufferMemoryBarrier(mImpl->resources(), (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
         }
     }
     if (local_pImageMemoryBarriers)
     {
         for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
         {
-            transform_VkImageMemoryBarrier(mImpl->resources(), (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
+            transform_tohost_VkImageMemoryBarrier(mImpl->resources(), (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
         }
     }
     countingStream->rewind();
@@ -8265,21 +8344,21 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((memoryBarrierCount)); ++i)
         {
-            transform_VkMemoryBarrier(mImpl->resources(), (VkMemoryBarrier*)(local_pMemoryBarriers + i));
+            transform_tohost_VkMemoryBarrier(mImpl->resources(), (VkMemoryBarrier*)(local_pMemoryBarriers + i));
         }
     }
     if (local_pBufferMemoryBarriers)
     {
         for (uint32_t i = 0; i < (uint32_t)((bufferMemoryBarrierCount)); ++i)
         {
-            transform_VkBufferMemoryBarrier(mImpl->resources(), (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
+            transform_tohost_VkBufferMemoryBarrier(mImpl->resources(), (VkBufferMemoryBarrier*)(local_pBufferMemoryBarriers + i));
         }
     }
     if (local_pImageMemoryBarriers)
     {
         for (uint32_t i = 0; i < (uint32_t)((imageMemoryBarrierCount)); ++i)
         {
-            transform_VkImageMemoryBarrier(mImpl->resources(), (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
+            transform_tohost_VkImageMemoryBarrier(mImpl->resources(), (VkImageMemoryBarrier*)(local_pImageMemoryBarriers + i));
         }
     }
     countingStream->rewind();
@@ -8660,7 +8739,7 @@
     local_contents = contents;
     if (local_pRenderPassBegin)
     {
-        transform_VkRenderPassBeginInfo(mImpl->resources(), (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
+        transform_tohost_VkRenderPassBeginInfo(mImpl->resources(), (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     }
     countingStream->rewind();
     {
@@ -8829,7 +8908,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            transform_VkBindBufferMemoryInfo(mImpl->resources(), (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
+            transform_tohost_VkBindBufferMemoryInfo(mImpl->resources(), (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
         }
     }
     countingStream->rewind();
@@ -8892,7 +8971,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            transform_VkBindImageMemoryInfo(mImpl->resources(), (VkBindImageMemoryInfo*)(local_pBindInfos + i));
+            transform_tohost_VkBindImageMemoryInfo(mImpl->resources(), (VkBindImageMemoryInfo*)(local_pBindInfos + i));
         }
     }
     countingStream->rewind();
@@ -9144,6 +9223,13 @@
             unmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
         }
     }
+    if (pPhysicalDeviceGroupProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
+        {
+            transform_fromhost_VkPhysicalDeviceGroupProperties(mImpl->resources(), (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
+        }
+    }
     VkResult vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
     stream->read(&vkEnumeratePhysicalDeviceGroups_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -9173,7 +9259,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkImageMemoryRequirementsInfo2(mImpl->resources(), (VkImageMemoryRequirementsInfo2*)(local_pInfo));
+        transform_tohost_VkImageMemoryRequirementsInfo2(mImpl->resources(), (VkImageMemoryRequirementsInfo2*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -9194,6 +9280,10 @@
     marshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
     marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
     unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    if (pMemoryRequirements)
+    {
+        transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
+    }
 }
 
 void VkEncoder::vkGetBufferMemoryRequirements2(
@@ -9217,7 +9307,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkBufferMemoryRequirementsInfo2(mImpl->resources(), (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
+        transform_tohost_VkBufferMemoryRequirementsInfo2(mImpl->resources(), (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -9238,6 +9328,10 @@
     marshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
     marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
     unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    if (pMemoryRequirements)
+    {
+        transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
+    }
 }
 
 void VkEncoder::vkGetImageSparseMemoryRequirements2(
@@ -9262,7 +9356,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkImageSparseMemoryRequirementsInfo2(mImpl->resources(), (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
+        transform_tohost_VkImageSparseMemoryRequirementsInfo2(mImpl->resources(), (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -9339,6 +9433,13 @@
             unmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
         }
     }
+    if (pSparseMemoryRequirements)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
+        {
+            transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
+        }
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceFeatures2(
@@ -9369,6 +9470,10 @@
     stream->write((uint64_t*)&cgen_var_682, 1 * 8);
     marshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
     unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
+    if (pFeatures)
+    {
+        transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceProperties2(
@@ -9411,6 +9516,10 @@
     stream->write((VkFormat*)&local_format, sizeof(VkFormat));
     marshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
     unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
+    if (pFormatProperties)
+    {
+        transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
+    }
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2(
@@ -9434,7 +9543,7 @@
     }
     if (local_pImageFormatInfo)
     {
-        transform_VkPhysicalDeviceImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
+        transform_tohost_VkPhysicalDeviceImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
     }
     countingStream->rewind();
     {
@@ -9455,6 +9564,10 @@
     marshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
     marshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
     unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
+    if (pImageFormatProperties)
+    {
+        transform_fromhost_VkImageFormatProperties2(mImpl->resources(), (VkImageFormatProperties2*)(pImageFormatProperties));
+    }
     VkResult vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceImageFormatProperties2_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -9548,6 +9661,13 @@
             unmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
         }
     }
+    if (pQueueFamilyProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
+        {
+            transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
+        }
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2(
@@ -9578,6 +9698,10 @@
     stream->write((uint64_t*)&cgen_var_696, 1 * 8);
     marshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
     unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
+    if (pMemoryProperties)
+    {
+        transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2(
@@ -9602,7 +9726,7 @@
     }
     if (local_pFormatInfo)
     {
-        transform_VkPhysicalDeviceSparseImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
+        transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
     }
     countingStream->rewind();
     {
@@ -9679,6 +9803,13 @@
             unmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
+        }
+    }
 }
 
 void VkEncoder::vkTrimCommandPool(
@@ -9742,7 +9873,7 @@
     }
     if (local_pQueueInfo)
     {
-        transform_VkDeviceQueueInfo2(mImpl->resources(), (VkDeviceQueueInfo2*)(local_pQueueInfo));
+        transform_tohost_VkDeviceQueueInfo2(mImpl->resources(), (VkDeviceQueueInfo2*)(local_pQueueInfo));
     }
     countingStream->rewind();
     {
@@ -9803,11 +9934,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkSamplerYcbcrConversionCreateInfo(mImpl->resources(), (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkSamplerYcbcrConversionCreateInfo(mImpl->resources(), (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -9884,7 +10015,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -9953,11 +10084,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDescriptorUpdateTemplateCreateInfo(mImpl->resources(), (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDescriptorUpdateTemplateCreateInfo(mImpl->resources(), (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -10034,7 +10165,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -10159,7 +10290,7 @@
     }
     if (local_pExternalBufferInfo)
     {
-        transform_VkPhysicalDeviceExternalBufferInfo(mImpl->resources(), (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
+        transform_tohost_VkPhysicalDeviceExternalBufferInfo(mImpl->resources(), (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
     }
     countingStream->rewind();
     {
@@ -10180,6 +10311,10 @@
     marshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
     marshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
     unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
+    if (pExternalBufferProperties)
+    {
+        transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceExternalFenceProperties(
@@ -10203,7 +10338,7 @@
     }
     if (local_pExternalFenceInfo)
     {
-        transform_VkPhysicalDeviceExternalFenceInfo(mImpl->resources(), (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
+        transform_tohost_VkPhysicalDeviceExternalFenceInfo(mImpl->resources(), (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
     }
     countingStream->rewind();
     {
@@ -10224,6 +10359,10 @@
     marshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
     marshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
     unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
+    if (pExternalFenceProperties)
+    {
+        transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceExternalSemaphoreProperties(
@@ -10247,7 +10386,7 @@
     }
     if (local_pExternalSemaphoreInfo)
     {
-        transform_VkPhysicalDeviceExternalSemaphoreInfo(mImpl->resources(), (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
+        transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(mImpl->resources(), (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
     }
     countingStream->rewind();
     {
@@ -10268,6 +10407,10 @@
     marshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
     marshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
     unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
+    if (pExternalSemaphoreProperties)
+    {
+        transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
+    }
 }
 
 void VkEncoder::vkGetDescriptorSetLayoutSupport(
@@ -10291,7 +10434,7 @@
     }
     if (local_pCreateInfo)
     {
-        transform_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     }
     countingStream->rewind();
     {
@@ -10312,6 +10455,10 @@
     marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     marshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
     unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
+    if (pSupport)
+    {
+        transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
+    }
 }
 
 #endif
@@ -10340,7 +10487,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -10466,6 +10613,10 @@
     stream->write((uint64_t*)&cgen_var_769, 1 * 8);
     marshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
     unmarshal_VkSurfaceCapabilitiesKHR(stream, (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
+    if (pSurfaceCapabilities)
+    {
+        transform_fromhost_VkSurfaceCapabilitiesKHR(mImpl->resources(), (VkSurfaceCapabilitiesKHR*)(pSurfaceCapabilities));
+    }
     VkResult vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -10568,6 +10719,13 @@
             unmarshal_VkSurfaceFormatKHR(stream, (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
         }
     }
+    if (pSurfaceFormats)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
+        {
+            transform_fromhost_VkSurfaceFormatKHR(mImpl->resources(), (VkSurfaceFormatKHR*)(pSurfaceFormats + i));
+        }
+    }
     VkResult vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -10701,11 +10859,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkSwapchainCreateInfoKHR(mImpl->resources(), (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkSwapchainCreateInfoKHR(mImpl->resources(), (VkSwapchainCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -10782,7 +10940,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -11022,7 +11180,7 @@
     }
     if (local_pPresentInfo)
     {
-        transform_VkPresentInfoKHR(mImpl->resources(), (VkPresentInfoKHR*)(local_pPresentInfo));
+        transform_tohost_VkPresentInfoKHR(mImpl->resources(), (VkPresentInfoKHR*)(local_pPresentInfo));
     }
     countingStream->rewind();
     {
@@ -11076,6 +11234,10 @@
     stream->write((uint64_t*)&cgen_var_827, 1 * 8);
     marshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
     unmarshal_VkDeviceGroupPresentCapabilitiesKHR(stream, (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
+    if (pDeviceGroupPresentCapabilities)
+    {
+        transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(mImpl->resources(), (VkDeviceGroupPresentCapabilitiesKHR*)(pDeviceGroupPresentCapabilities));
+    }
     VkResult vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -11245,6 +11407,13 @@
             unmarshal_VkRect2D(stream, (VkRect2D*)(pRects + i));
         }
     }
+    if (pRects)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pRectCount)); ++i)
+        {
+            transform_fromhost_VkRect2D(mImpl->resources(), (VkRect2D*)(pRects + i));
+        }
+    }
     VkResult vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -11274,7 +11443,7 @@
     }
     if (local_pAcquireInfo)
     {
-        transform_VkAcquireNextImageInfoKHR(mImpl->resources(), (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
+        transform_tohost_VkAcquireNextImageInfoKHR(mImpl->resources(), (VkAcquireNextImageInfoKHR*)(local_pAcquireInfo));
     }
     countingStream->rewind();
     {
@@ -11390,6 +11559,13 @@
             unmarshal_VkDisplayPropertiesKHR(stream, (VkDisplayPropertiesKHR*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkDisplayPropertiesKHR(mImpl->resources(), (VkDisplayPropertiesKHR*)(pProperties + i));
+        }
+    }
     VkResult vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -11483,6 +11659,13 @@
             unmarshal_VkDisplayPlanePropertiesKHR(stream, (VkDisplayPlanePropertiesKHR*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkDisplayPlanePropertiesKHR(mImpl->resources(), (VkDisplayPlanePropertiesKHR*)(pProperties + i));
+        }
+    }
     VkResult vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -11694,6 +11877,13 @@
             unmarshal_VkDisplayModePropertiesKHR(stream, (VkDisplayModePropertiesKHR*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkDisplayModePropertiesKHR(mImpl->resources(), (VkDisplayModePropertiesKHR*)(pProperties + i));
+        }
+    }
     VkResult vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetDisplayModePropertiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -11735,11 +11925,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDisplayModeCreateInfoKHR(mImpl->resources(), (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkDisplayModeCreateInfoKHR(mImpl->resources(), (VkDisplayModeCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -11840,6 +12030,10 @@
     stream->write((uint32_t*)&local_planeIndex, sizeof(uint32_t));
     marshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
     unmarshal_VkDisplayPlaneCapabilitiesKHR(stream, (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
+    if (pCapabilities)
+    {
+        transform_fromhost_VkDisplayPlaneCapabilitiesKHR(mImpl->resources(), (VkDisplayPlaneCapabilitiesKHR*)(pCapabilities));
+    }
     VkResult vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetDisplayPlaneCapabilitiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -11878,11 +12072,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDisplaySurfaceCreateInfoKHR(mImpl->resources(), (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkDisplaySurfaceCreateInfoKHR(mImpl->resources(), (VkDisplaySurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -11973,12 +12167,12 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
         {
-            transform_VkSwapchainCreateInfoKHR(mImpl->resources(), (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
+            transform_tohost_VkSwapchainCreateInfoKHR(mImpl->resources(), (VkSwapchainCreateInfoKHR*)(local_pCreateInfos + i));
         }
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12081,11 +12275,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkXlibSurfaceCreateInfoKHR(mImpl->resources(), (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkXlibSurfaceCreateInfoKHR(mImpl->resources(), (VkXlibSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12214,11 +12408,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkXcbSurfaceCreateInfoKHR(mImpl->resources(), (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkXcbSurfaceCreateInfoKHR(mImpl->resources(), (VkXcbSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12347,11 +12541,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkWaylandSurfaceCreateInfoKHR(mImpl->resources(), (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkWaylandSurfaceCreateInfoKHR(mImpl->resources(), (VkWaylandSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12475,11 +12669,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkMirSurfaceCreateInfoKHR(mImpl->resources(), (VkMirSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkMirSurfaceCreateInfoKHR(mImpl->resources(), (VkMirSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12603,11 +12797,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkAndroidSurfaceCreateInfoKHR(mImpl->resources(), (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkAndroidSurfaceCreateInfoKHR(mImpl->resources(), (VkAndroidSurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12690,11 +12884,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkWin32SurfaceCreateInfoKHR(mImpl->resources(), (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
+        transform_tohost_VkWin32SurfaceCreateInfoKHR(mImpl->resources(), (VkWin32SurfaceCreateInfoKHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -12816,6 +13010,10 @@
     stream->write((uint64_t*)&cgen_var_964, 1 * 8);
     marshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
     unmarshal_VkPhysicalDeviceFeatures2(stream, (VkPhysicalDeviceFeatures2*)(pFeatures));
+    if (pFeatures)
+    {
+        transform_fromhost_VkPhysicalDeviceFeatures2(mImpl->resources(), (VkPhysicalDeviceFeatures2*)(pFeatures));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceProperties2KHR(
@@ -12846,6 +13044,10 @@
     stream->write((uint64_t*)&cgen_var_966, 1 * 8);
     marshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
     unmarshal_VkPhysicalDeviceProperties2(stream, (VkPhysicalDeviceProperties2*)(pProperties));
+    if (pProperties)
+    {
+        transform_fromhost_VkPhysicalDeviceProperties2(mImpl->resources(), (VkPhysicalDeviceProperties2*)(pProperties));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceFormatProperties2KHR(
@@ -12881,6 +13083,10 @@
     stream->write((VkFormat*)&local_format, sizeof(VkFormat));
     marshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
     unmarshal_VkFormatProperties2(stream, (VkFormatProperties2*)(pFormatProperties));
+    if (pFormatProperties)
+    {
+        transform_fromhost_VkFormatProperties2(mImpl->resources(), (VkFormatProperties2*)(pFormatProperties));
+    }
 }
 
 VkResult VkEncoder::vkGetPhysicalDeviceImageFormatProperties2KHR(
@@ -12904,7 +13110,7 @@
     }
     if (local_pImageFormatInfo)
     {
-        transform_VkPhysicalDeviceImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
+        transform_tohost_VkPhysicalDeviceImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
     }
     countingStream->rewind();
     {
@@ -12925,6 +13131,10 @@
     marshal_VkPhysicalDeviceImageFormatInfo2(stream, (VkPhysicalDeviceImageFormatInfo2*)(local_pImageFormatInfo));
     marshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
     unmarshal_VkImageFormatProperties2(stream, (VkImageFormatProperties2*)(pImageFormatProperties));
+    if (pImageFormatProperties)
+    {
+        transform_fromhost_VkImageFormatProperties2(mImpl->resources(), (VkImageFormatProperties2*)(pImageFormatProperties));
+    }
     VkResult vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -13018,6 +13228,13 @@
             unmarshal_VkQueueFamilyProperties2(stream, (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
         }
     }
+    if (pQueueFamilyProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pQueueFamilyPropertyCount)); ++i)
+        {
+            transform_fromhost_VkQueueFamilyProperties2(mImpl->resources(), (VkQueueFamilyProperties2*)(pQueueFamilyProperties + i));
+        }
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceMemoryProperties2KHR(
@@ -13048,6 +13265,10 @@
     stream->write((uint64_t*)&cgen_var_980, 1 * 8);
     marshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
     unmarshal_VkPhysicalDeviceMemoryProperties2(stream, (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
+    if (pMemoryProperties)
+    {
+        transform_fromhost_VkPhysicalDeviceMemoryProperties2(mImpl->resources(), (VkPhysicalDeviceMemoryProperties2*)(pMemoryProperties));
+    }
 }
 
 void VkEncoder::vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
@@ -13072,7 +13293,7 @@
     }
     if (local_pFormatInfo)
     {
-        transform_VkPhysicalDeviceSparseImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
+        transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(mImpl->resources(), (VkPhysicalDeviceSparseImageFormatInfo2*)(local_pFormatInfo));
     }
     countingStream->rewind();
     {
@@ -13149,6 +13370,13 @@
             unmarshal_VkSparseImageFormatProperties2(stream, (VkSparseImageFormatProperties2*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkSparseImageFormatProperties2(mImpl->resources(), (VkSparseImageFormatProperties2*)(pProperties + i));
+        }
+    }
 }
 
 #endif
@@ -13416,6 +13644,13 @@
             unmarshal_VkPhysicalDeviceGroupProperties(stream, (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
         }
     }
+    if (pPhysicalDeviceGroupProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPhysicalDeviceGroupCount)); ++i)
+        {
+            transform_fromhost_VkPhysicalDeviceGroupProperties(mImpl->resources(), (VkPhysicalDeviceGroupProperties*)(pPhysicalDeviceGroupProperties + i));
+        }
+    }
     VkResult vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
     stream->read(&vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -13447,7 +13682,7 @@
     }
     if (local_pExternalBufferInfo)
     {
-        transform_VkPhysicalDeviceExternalBufferInfo(mImpl->resources(), (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
+        transform_tohost_VkPhysicalDeviceExternalBufferInfo(mImpl->resources(), (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
     }
     countingStream->rewind();
     {
@@ -13468,6 +13703,10 @@
     marshal_VkPhysicalDeviceExternalBufferInfo(stream, (VkPhysicalDeviceExternalBufferInfo*)(local_pExternalBufferInfo));
     marshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
     unmarshal_VkExternalBufferProperties(stream, (VkExternalBufferProperties*)(pExternalBufferProperties));
+    if (pExternalBufferProperties)
+    {
+        transform_fromhost_VkExternalBufferProperties(mImpl->resources(), (VkExternalBufferProperties*)(pExternalBufferProperties));
+    }
 }
 
 #endif
@@ -13495,7 +13734,7 @@
     }
     if (local_pGetWin32HandleInfo)
     {
-        transform_VkMemoryGetWin32HandleInfoKHR(mImpl->resources(), (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
+        transform_tohost_VkMemoryGetWin32HandleInfoKHR(mImpl->resources(), (VkMemoryGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
     }
     countingStream->rewind();
     {
@@ -13562,6 +13801,10 @@
     stream->write((HANDLE*)&local_handle, sizeof(HANDLE));
     marshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
     unmarshal_VkMemoryWin32HandlePropertiesKHR(stream, (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
+    if (pMemoryWin32HandleProperties)
+    {
+        transform_fromhost_VkMemoryWin32HandlePropertiesKHR(mImpl->resources(), (VkMemoryWin32HandlePropertiesKHR*)(pMemoryWin32HandleProperties));
+    }
     VkResult vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetMemoryWin32HandlePropertiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -13593,7 +13836,7 @@
     }
     if (local_pGetFdInfo)
     {
-        transform_VkMemoryGetFdInfoKHR(mImpl->resources(), (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
+        transform_tohost_VkMemoryGetFdInfoKHR(mImpl->resources(), (VkMemoryGetFdInfoKHR*)(local_pGetFdInfo));
     }
     countingStream->rewind();
     {
@@ -13660,6 +13903,10 @@
     stream->write((int*)&local_fd, sizeof(int));
     marshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
     unmarshal_VkMemoryFdPropertiesKHR(stream, (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
+    if (pMemoryFdProperties)
+    {
+        transform_fromhost_VkMemoryFdPropertiesKHR(mImpl->resources(), (VkMemoryFdPropertiesKHR*)(pMemoryFdProperties));
+    }
     VkResult vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetMemoryFdPropertiesKHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -13693,7 +13940,7 @@
     }
     if (local_pExternalSemaphoreInfo)
     {
-        transform_VkPhysicalDeviceExternalSemaphoreInfo(mImpl->resources(), (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
+        transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(mImpl->resources(), (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
     }
     countingStream->rewind();
     {
@@ -13714,6 +13961,10 @@
     marshal_VkPhysicalDeviceExternalSemaphoreInfo(stream, (VkPhysicalDeviceExternalSemaphoreInfo*)(local_pExternalSemaphoreInfo));
     marshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
     unmarshal_VkExternalSemaphoreProperties(stream, (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
+    if (pExternalSemaphoreProperties)
+    {
+        transform_fromhost_VkExternalSemaphoreProperties(mImpl->resources(), (VkExternalSemaphoreProperties*)(pExternalSemaphoreProperties));
+    }
 }
 
 #endif
@@ -13740,7 +13991,7 @@
     }
     if (local_pImportSemaphoreWin32HandleInfo)
     {
-        transform_VkImportSemaphoreWin32HandleInfoKHR(mImpl->resources(), (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
+        transform_tohost_VkImportSemaphoreWin32HandleInfoKHR(mImpl->resources(), (VkImportSemaphoreWin32HandleInfoKHR*)(local_pImportSemaphoreWin32HandleInfo));
     }
     countingStream->rewind();
     {
@@ -13787,7 +14038,7 @@
     }
     if (local_pGetWin32HandleInfo)
     {
-        transform_VkSemaphoreGetWin32HandleInfoKHR(mImpl->resources(), (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
+        transform_tohost_VkSemaphoreGetWin32HandleInfoKHR(mImpl->resources(), (VkSemaphoreGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
     }
     countingStream->rewind();
     {
@@ -13838,7 +14089,7 @@
     }
     if (local_pImportSemaphoreFdInfo)
     {
-        transform_VkImportSemaphoreFdInfoKHR(mImpl->resources(), (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
+        transform_tohost_VkImportSemaphoreFdInfoKHR(mImpl->resources(), (VkImportSemaphoreFdInfoKHR*)(local_pImportSemaphoreFdInfo));
     }
     countingStream->rewind();
     {
@@ -13885,7 +14136,7 @@
     }
     if (local_pGetFdInfo)
     {
-        transform_VkSemaphoreGetFdInfoKHR(mImpl->resources(), (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
+        transform_tohost_VkSemaphoreGetFdInfoKHR(mImpl->resources(), (VkSemaphoreGetFdInfoKHR*)(local_pGetFdInfo));
     }
     countingStream->rewind();
     {
@@ -13953,7 +14204,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((descriptorWriteCount)); ++i)
         {
-            transform_VkWriteDescriptorSet(mImpl->resources(), (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
+            transform_tohost_VkWriteDescriptorSet(mImpl->resources(), (VkWriteDescriptorSet*)(local_pDescriptorWrites + i));
         }
     }
     countingStream->rewind();
@@ -14098,11 +14349,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDescriptorUpdateTemplateCreateInfo(mImpl->resources(), (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDescriptorUpdateTemplateCreateInfo(mImpl->resources(), (VkDescriptorUpdateTemplateCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -14177,7 +14428,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -14312,11 +14563,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkRenderPassCreateInfo2KHR(mImpl->resources(), (VkRenderPassCreateInfo2KHR*)(local_pCreateInfo));
+        transform_tohost_VkRenderPassCreateInfo2KHR(mImpl->resources(), (VkRenderPassCreateInfo2KHR*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -14395,11 +14646,11 @@
     }
     if (local_pRenderPassBegin)
     {
-        transform_VkRenderPassBeginInfo(mImpl->resources(), (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
+        transform_tohost_VkRenderPassBeginInfo(mImpl->resources(), (VkRenderPassBeginInfo*)(local_pRenderPassBegin));
     }
     if (local_pSubpassBeginInfo)
     {
-        transform_VkSubpassBeginInfoKHR(mImpl->resources(), (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
+        transform_tohost_VkSubpassBeginInfoKHR(mImpl->resources(), (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
     }
     countingStream->rewind();
     {
@@ -14449,11 +14700,11 @@
     }
     if (local_pSubpassBeginInfo)
     {
-        transform_VkSubpassBeginInfoKHR(mImpl->resources(), (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
+        transform_tohost_VkSubpassBeginInfoKHR(mImpl->resources(), (VkSubpassBeginInfoKHR*)(local_pSubpassBeginInfo));
     }
     if (local_pSubpassEndInfo)
     {
-        transform_VkSubpassEndInfoKHR(mImpl->resources(), (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
+        transform_tohost_VkSubpassEndInfoKHR(mImpl->resources(), (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
     }
     countingStream->rewind();
     {
@@ -14495,7 +14746,7 @@
     }
     if (local_pSubpassEndInfo)
     {
-        transform_VkSubpassEndInfoKHR(mImpl->resources(), (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
+        transform_tohost_VkSubpassEndInfoKHR(mImpl->resources(), (VkSubpassEndInfoKHR*)(local_pSubpassEndInfo));
     }
     countingStream->rewind();
     {
@@ -14581,7 +14832,7 @@
     }
     if (local_pExternalFenceInfo)
     {
-        transform_VkPhysicalDeviceExternalFenceInfo(mImpl->resources(), (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
+        transform_tohost_VkPhysicalDeviceExternalFenceInfo(mImpl->resources(), (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
     }
     countingStream->rewind();
     {
@@ -14602,6 +14853,10 @@
     marshal_VkPhysicalDeviceExternalFenceInfo(stream, (VkPhysicalDeviceExternalFenceInfo*)(local_pExternalFenceInfo));
     marshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
     unmarshal_VkExternalFenceProperties(stream, (VkExternalFenceProperties*)(pExternalFenceProperties));
+    if (pExternalFenceProperties)
+    {
+        transform_fromhost_VkExternalFenceProperties(mImpl->resources(), (VkExternalFenceProperties*)(pExternalFenceProperties));
+    }
 }
 
 #endif
@@ -14628,7 +14883,7 @@
     }
     if (local_pImportFenceWin32HandleInfo)
     {
-        transform_VkImportFenceWin32HandleInfoKHR(mImpl->resources(), (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
+        transform_tohost_VkImportFenceWin32HandleInfoKHR(mImpl->resources(), (VkImportFenceWin32HandleInfoKHR*)(local_pImportFenceWin32HandleInfo));
     }
     countingStream->rewind();
     {
@@ -14675,7 +14930,7 @@
     }
     if (local_pGetWin32HandleInfo)
     {
-        transform_VkFenceGetWin32HandleInfoKHR(mImpl->resources(), (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
+        transform_tohost_VkFenceGetWin32HandleInfoKHR(mImpl->resources(), (VkFenceGetWin32HandleInfoKHR*)(local_pGetWin32HandleInfo));
     }
     countingStream->rewind();
     {
@@ -14726,7 +14981,7 @@
     }
     if (local_pImportFenceFdInfo)
     {
-        transform_VkImportFenceFdInfoKHR(mImpl->resources(), (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
+        transform_tohost_VkImportFenceFdInfoKHR(mImpl->resources(), (VkImportFenceFdInfoKHR*)(local_pImportFenceFdInfo));
     }
     countingStream->rewind();
     {
@@ -14773,7 +15028,7 @@
     }
     if (local_pGetFdInfo)
     {
-        transform_VkFenceGetFdInfoKHR(mImpl->resources(), (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
+        transform_tohost_VkFenceGetFdInfoKHR(mImpl->resources(), (VkFenceGetFdInfoKHR*)(local_pGetFdInfo));
     }
     countingStream->rewind();
     {
@@ -14827,7 +15082,7 @@
     }
     if (local_pSurfaceInfo)
     {
-        transform_VkPhysicalDeviceSurfaceInfo2KHR(mImpl->resources(), (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
+        transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(mImpl->resources(), (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     }
     countingStream->rewind();
     {
@@ -14848,6 +15103,10 @@
     marshal_VkPhysicalDeviceSurfaceInfo2KHR(stream, (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     marshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
     unmarshal_VkSurfaceCapabilities2KHR(stream, (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
+    if (pSurfaceCapabilities)
+    {
+        transform_fromhost_VkSurfaceCapabilities2KHR(mImpl->resources(), (VkSurfaceCapabilities2KHR*)(pSurfaceCapabilities));
+    }
     VkResult vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -14878,7 +15137,7 @@
     }
     if (local_pSurfaceInfo)
     {
-        transform_VkPhysicalDeviceSurfaceInfo2KHR(mImpl->resources(), (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
+        transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(mImpl->resources(), (VkPhysicalDeviceSurfaceInfo2KHR*)(local_pSurfaceInfo));
     }
     countingStream->rewind();
     {
@@ -14955,6 +15214,13 @@
             unmarshal_VkSurfaceFormat2KHR(stream, (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
         }
     }
+    if (pSurfaceFormats)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pSurfaceFormatCount)); ++i)
+        {
+            transform_fromhost_VkSurfaceFormat2KHR(mImpl->resources(), (VkSurfaceFormat2KHR*)(pSurfaceFormats + i));
+        }
+    }
     VkResult vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -15052,6 +15318,13 @@
             unmarshal_VkDisplayProperties2KHR(stream, (VkDisplayProperties2KHR*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkDisplayProperties2KHR(mImpl->resources(), (VkDisplayProperties2KHR*)(pProperties + i));
+        }
+    }
     VkResult vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -15145,6 +15418,13 @@
             unmarshal_VkDisplayPlaneProperties2KHR(stream, (VkDisplayPlaneProperties2KHR*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkDisplayPlaneProperties2KHR(mImpl->resources(), (VkDisplayPlaneProperties2KHR*)(pProperties + i));
+        }
+    }
     VkResult vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -15247,6 +15527,13 @@
             unmarshal_VkDisplayModeProperties2KHR(stream, (VkDisplayModeProperties2KHR*)(pProperties + i));
         }
     }
+    if (pProperties)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPropertyCount)); ++i)
+        {
+            transform_fromhost_VkDisplayModeProperties2KHR(mImpl->resources(), (VkDisplayModeProperties2KHR*)(pProperties + i));
+        }
+    }
     VkResult vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetDisplayModeProperties2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -15276,7 +15563,7 @@
     }
     if (local_pDisplayPlaneInfo)
     {
-        transform_VkDisplayPlaneInfo2KHR(mImpl->resources(), (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
+        transform_tohost_VkDisplayPlaneInfo2KHR(mImpl->resources(), (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
     }
     countingStream->rewind();
     {
@@ -15297,6 +15584,10 @@
     marshal_VkDisplayPlaneInfo2KHR(stream, (VkDisplayPlaneInfo2KHR*)(local_pDisplayPlaneInfo));
     marshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
     unmarshal_VkDisplayPlaneCapabilities2KHR(stream, (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
+    if (pCapabilities)
+    {
+        transform_fromhost_VkDisplayPlaneCapabilities2KHR(mImpl->resources(), (VkDisplayPlaneCapabilities2KHR*)(pCapabilities));
+    }
     VkResult vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
     stream->read(&vkGetDisplayPlaneCapabilities2KHR_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -15334,7 +15625,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkImageMemoryRequirementsInfo2(mImpl->resources(), (VkImageMemoryRequirementsInfo2*)(local_pInfo));
+        transform_tohost_VkImageMemoryRequirementsInfo2(mImpl->resources(), (VkImageMemoryRequirementsInfo2*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -15355,6 +15646,10 @@
     marshal_VkImageMemoryRequirementsInfo2(stream, (VkImageMemoryRequirementsInfo2*)(local_pInfo));
     marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
     unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    if (pMemoryRequirements)
+    {
+        transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
+    }
 }
 
 void VkEncoder::vkGetBufferMemoryRequirements2KHR(
@@ -15378,7 +15673,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkBufferMemoryRequirementsInfo2(mImpl->resources(), (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
+        transform_tohost_VkBufferMemoryRequirementsInfo2(mImpl->resources(), (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -15399,6 +15694,10 @@
     marshal_VkBufferMemoryRequirementsInfo2(stream, (VkBufferMemoryRequirementsInfo2*)(local_pInfo));
     marshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
     unmarshal_VkMemoryRequirements2(stream, (VkMemoryRequirements2*)(pMemoryRequirements));
+    if (pMemoryRequirements)
+    {
+        transform_fromhost_VkMemoryRequirements2(mImpl->resources(), (VkMemoryRequirements2*)(pMemoryRequirements));
+    }
 }
 
 void VkEncoder::vkGetImageSparseMemoryRequirements2KHR(
@@ -15423,7 +15722,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkImageSparseMemoryRequirementsInfo2(mImpl->resources(), (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
+        transform_tohost_VkImageSparseMemoryRequirementsInfo2(mImpl->resources(), (VkImageSparseMemoryRequirementsInfo2*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -15500,6 +15799,13 @@
             unmarshal_VkSparseImageMemoryRequirements2(stream, (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
         }
     }
+    if (pSparseMemoryRequirements)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pSparseMemoryRequirementCount)); ++i)
+        {
+            transform_fromhost_VkSparseImageMemoryRequirements2(mImpl->resources(), (VkSparseImageMemoryRequirements2*)(pSparseMemoryRequirements + i));
+        }
+    }
 }
 
 #endif
@@ -15536,11 +15842,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkSamplerYcbcrConversionCreateInfo(mImpl->resources(), (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkSamplerYcbcrConversionCreateInfo(mImpl->resources(), (VkSamplerYcbcrConversionCreateInfo*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -15615,7 +15921,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -15683,7 +15989,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            transform_VkBindBufferMemoryInfo(mImpl->resources(), (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
+            transform_tohost_VkBindBufferMemoryInfo(mImpl->resources(), (VkBindBufferMemoryInfo*)(local_pBindInfos + i));
         }
     }
     countingStream->rewind();
@@ -15746,7 +16052,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((bindInfoCount)); ++i)
         {
-            transform_VkBindImageMemoryInfo(mImpl->resources(), (VkBindImageMemoryInfo*)(local_pBindInfos + i));
+            transform_tohost_VkBindImageMemoryInfo(mImpl->resources(), (VkBindImageMemoryInfo*)(local_pBindInfos + i));
         }
     }
     countingStream->rewind();
@@ -15804,7 +16110,7 @@
     }
     if (local_pCreateInfo)
     {
-        transform_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
+        transform_tohost_VkDescriptorSetLayoutCreateInfo(mImpl->resources(), (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     }
     countingStream->rewind();
     {
@@ -15825,6 +16131,10 @@
     marshal_VkDescriptorSetLayoutCreateInfo(stream, (VkDescriptorSetLayoutCreateInfo*)(local_pCreateInfo));
     marshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
     unmarshal_VkDescriptorSetLayoutSupport(stream, (VkDescriptorSetLayoutSupport*)(pSupport));
+    if (pSupport)
+    {
+        transform_fromhost_VkDescriptorSetLayoutSupport(mImpl->resources(), (VkDescriptorSetLayoutSupport*)(pSupport));
+    }
 }
 
 #endif
@@ -16167,11 +16477,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDebugReportCallbackCreateInfoEXT(mImpl->resources(), (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
+        transform_tohost_VkDebugReportCallbackCreateInfoEXT(mImpl->resources(), (VkDebugReportCallbackCreateInfoEXT*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -16248,7 +16558,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -16392,7 +16702,7 @@
     }
     if (local_pTagInfo)
     {
-        transform_VkDebugMarkerObjectTagInfoEXT(mImpl->resources(), (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
+        transform_tohost_VkDebugMarkerObjectTagInfoEXT(mImpl->resources(), (VkDebugMarkerObjectTagInfoEXT*)(local_pTagInfo));
     }
     countingStream->rewind();
     {
@@ -16438,7 +16748,7 @@
     }
     if (local_pNameInfo)
     {
-        transform_VkDebugMarkerObjectNameInfoEXT(mImpl->resources(), (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
+        transform_tohost_VkDebugMarkerObjectNameInfoEXT(mImpl->resources(), (VkDebugMarkerObjectNameInfoEXT*)(local_pNameInfo));
     }
     countingStream->rewind();
     {
@@ -16484,7 +16794,7 @@
     }
     if (local_pMarkerInfo)
     {
-        transform_VkDebugMarkerMarkerInfoEXT(mImpl->resources(), (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
+        transform_tohost_VkDebugMarkerMarkerInfoEXT(mImpl->resources(), (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
     }
     countingStream->rewind();
     {
@@ -16550,7 +16860,7 @@
     }
     if (local_pMarkerInfo)
     {
-        transform_VkDebugMarkerMarkerInfoEXT(mImpl->resources(), (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
+        transform_tohost_VkDebugMarkerMarkerInfoEXT(mImpl->resources(), (VkDebugMarkerMarkerInfoEXT*)(local_pMarkerInfo));
     }
     countingStream->rewind();
     {
@@ -16883,6 +17193,10 @@
     stream->write((VkExternalMemoryHandleTypeFlagsNV*)&local_externalHandleType, sizeof(VkExternalMemoryHandleTypeFlagsNV));
     marshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
     unmarshal_VkExternalImageFormatPropertiesNV(stream, (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
+    if (pExternalImageFormatProperties)
+    {
+        transform_fromhost_VkExternalImageFormatPropertiesNV(mImpl->resources(), (VkExternalImageFormatPropertiesNV*)(pExternalImageFormatProperties));
+    }
     VkResult vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -16912,7 +17226,7 @@
     local_device = device;
     local_memory = memory;
     local_handleType = handleType;
-    mImpl->resources()->deviceMemoryTransform(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    mImpl->resources()->deviceMemoryTransform_tohost(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     countingStream->rewind();
     {
         uint64_t cgen_var_1238;
@@ -16982,11 +17296,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkViSurfaceCreateInfoNN(mImpl->resources(), (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
+        transform_tohost_VkViSurfaceCreateInfoNN(mImpl->resources(), (VkViSurfaceCreateInfoNN*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -17063,7 +17377,7 @@
     }
     if (local_pConditionalRenderingBegin)
     {
-        transform_VkConditionalRenderingBeginInfoEXT(mImpl->resources(), (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
+        transform_tohost_VkConditionalRenderingBeginInfoEXT(mImpl->resources(), (VkConditionalRenderingBeginInfoEXT*)(local_pConditionalRenderingBegin));
     }
     countingStream->rewind();
     {
@@ -17131,7 +17445,7 @@
     }
     if (local_pProcessCommandsInfo)
     {
-        transform_VkCmdProcessCommandsInfoNVX(mImpl->resources(), (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
+        transform_tohost_VkCmdProcessCommandsInfoNVX(mImpl->resources(), (VkCmdProcessCommandsInfoNVX*)(local_pProcessCommandsInfo));
     }
     countingStream->rewind();
     {
@@ -17171,7 +17485,7 @@
     }
     if (local_pReserveSpaceInfo)
     {
-        transform_VkCmdReserveSpaceForCommandsInfoNVX(mImpl->resources(), (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
+        transform_tohost_VkCmdReserveSpaceForCommandsInfoNVX(mImpl->resources(), (VkCmdReserveSpaceForCommandsInfoNVX*)(local_pReserveSpaceInfo));
     }
     countingStream->rewind();
     {
@@ -17221,11 +17535,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkIndirectCommandsLayoutCreateInfoNVX(mImpl->resources(), (VkIndirectCommandsLayoutCreateInfoNVX*)(local_pCreateInfo));
+        transform_tohost_VkIndirectCommandsLayoutCreateInfoNVX(mImpl->resources(), (VkIndirectCommandsLayoutCreateInfoNVX*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -17302,7 +17616,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -17371,11 +17685,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkObjectTableCreateInfoNVX(mImpl->resources(), (VkObjectTableCreateInfoNVX*)(local_pCreateInfo));
+        transform_tohost_VkObjectTableCreateInfoNVX(mImpl->resources(), (VkObjectTableCreateInfoNVX*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -17452,7 +17766,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -17647,7 +17961,15 @@
     marshal_VkDeviceGeneratedCommandsFeaturesNVX(stream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
     marshal_VkDeviceGeneratedCommandsLimitsNVX(stream, (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
     unmarshal_VkDeviceGeneratedCommandsFeaturesNVX(stream, (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
+    if (pFeatures)
+    {
+        transform_fromhost_VkDeviceGeneratedCommandsFeaturesNVX(mImpl->resources(), (VkDeviceGeneratedCommandsFeaturesNVX*)(pFeatures));
+    }
     unmarshal_VkDeviceGeneratedCommandsLimitsNVX(stream, (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
+    if (pLimits)
+    {
+        transform_fromhost_VkDeviceGeneratedCommandsLimitsNVX(mImpl->resources(), (VkDeviceGeneratedCommandsLimitsNVX*)(pLimits));
+    }
 }
 
 #endif
@@ -17683,7 +18005,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((viewportCount)); ++i)
         {
-            transform_VkViewportWScalingNV(mImpl->resources(), (VkViewportWScalingNV*)(local_pViewportWScalings + i));
+            transform_tohost_VkViewportWScalingNV(mImpl->resources(), (VkViewportWScalingNV*)(local_pViewportWScalings + i));
         }
     }
     countingStream->rewind();
@@ -17896,6 +18218,10 @@
     stream->write((uint64_t*)&cgen_var_1311, 1 * 8);
     marshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
     unmarshal_VkSurfaceCapabilities2EXT(stream, (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
+    if (pSurfaceCapabilities)
+    {
+        transform_fromhost_VkSurfaceCapabilities2EXT(mImpl->resources(), (VkSurfaceCapabilities2EXT*)(pSurfaceCapabilities));
+    }
     VkResult vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
     stream->read(&vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -17929,7 +18255,7 @@
     }
     if (local_pDisplayPowerInfo)
     {
-        transform_VkDisplayPowerInfoEXT(mImpl->resources(), (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
+        transform_tohost_VkDisplayPowerInfoEXT(mImpl->resources(), (VkDisplayPowerInfoEXT*)(local_pDisplayPowerInfo));
     }
     countingStream->rewind();
     {
@@ -17991,11 +18317,11 @@
     local_pAllocator = nullptr;
     if (local_pDeviceEventInfo)
     {
-        transform_VkDeviceEventInfoEXT(mImpl->resources(), (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
+        transform_tohost_VkDeviceEventInfoEXT(mImpl->resources(), (VkDeviceEventInfoEXT*)(local_pDeviceEventInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -18079,11 +18405,11 @@
     local_pAllocator = nullptr;
     if (local_pDisplayEventInfo)
     {
-        transform_VkDisplayEventInfoEXT(mImpl->resources(), (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
+        transform_tohost_VkDisplayEventInfoEXT(mImpl->resources(), (VkDisplayEventInfoEXT*)(local_pDisplayEventInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -18229,6 +18555,10 @@
     stream->write((uint64_t*)&cgen_var_1339, 1 * 8);
     marshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
     unmarshal_VkRefreshCycleDurationGOOGLE(stream, (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
+    if (pDisplayTimingProperties)
+    {
+        transform_fromhost_VkRefreshCycleDurationGOOGLE(mImpl->resources(), (VkRefreshCycleDurationGOOGLE*)(pDisplayTimingProperties));
+    }
     VkResult vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
     stream->read(&vkGetRefreshCycleDurationGOOGLE_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -18331,6 +18661,13 @@
             unmarshal_VkPastPresentationTimingGOOGLE(stream, (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
         }
     }
+    if (pPresentationTimings)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pPresentationTimingCount)); ++i)
+        {
+            transform_fromhost_VkPastPresentationTimingGOOGLE(mImpl->resources(), (VkPastPresentationTimingGOOGLE*)(pPresentationTimings + i));
+        }
+    }
     VkResult vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
     stream->read(&vkGetPastPresentationTimingGOOGLE_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -18382,7 +18719,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((discardRectangleCount)); ++i)
         {
-            transform_VkRect2D(mImpl->resources(), (VkRect2D*)(local_pDiscardRectangles + i));
+            transform_tohost_VkRect2D(mImpl->resources(), (VkRect2D*)(local_pDiscardRectangles + i));
         }
     }
     countingStream->rewind();
@@ -18454,7 +18791,7 @@
     {
         for (uint32_t i = 0; i < (uint32_t)((swapchainCount)); ++i)
         {
-            transform_VkHdrMetadataEXT(mImpl->resources(), (VkHdrMetadataEXT*)(local_pMetadata + i));
+            transform_tohost_VkHdrMetadataEXT(mImpl->resources(), (VkHdrMetadataEXT*)(local_pMetadata + i));
         }
     }
     countingStream->rewind();
@@ -18529,11 +18866,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkIOSSurfaceCreateInfoMVK(mImpl->resources(), (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
+        transform_tohost_VkIOSSurfaceCreateInfoMVK(mImpl->resources(), (VkIOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -18616,11 +18953,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkMacOSSurfaceCreateInfoMVK(mImpl->resources(), (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
+        transform_tohost_VkMacOSSurfaceCreateInfoMVK(mImpl->resources(), (VkMacOSSurfaceCreateInfoMVK*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -18697,7 +19034,7 @@
     }
     if (local_pNameInfo)
     {
-        transform_VkDebugUtilsObjectNameInfoEXT(mImpl->resources(), (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
+        transform_tohost_VkDebugUtilsObjectNameInfoEXT(mImpl->resources(), (VkDebugUtilsObjectNameInfoEXT*)(local_pNameInfo));
     }
     countingStream->rewind();
     {
@@ -18743,7 +19080,7 @@
     }
     if (local_pTagInfo)
     {
-        transform_VkDebugUtilsObjectTagInfoEXT(mImpl->resources(), (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
+        transform_tohost_VkDebugUtilsObjectTagInfoEXT(mImpl->resources(), (VkDebugUtilsObjectTagInfoEXT*)(local_pTagInfo));
     }
     countingStream->rewind();
     {
@@ -18789,7 +19126,7 @@
     }
     if (local_pLabelInfo)
     {
-        transform_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     countingStream->rewind();
     {
@@ -18855,7 +19192,7 @@
     }
     if (local_pLabelInfo)
     {
-        transform_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     countingStream->rewind();
     {
@@ -18895,7 +19232,7 @@
     }
     if (local_pLabelInfo)
     {
-        transform_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     countingStream->rewind();
     {
@@ -18961,7 +19298,7 @@
     }
     if (local_pLabelInfo)
     {
-        transform_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
+        transform_tohost_VkDebugUtilsLabelEXT(mImpl->resources(), (VkDebugUtilsLabelEXT*)(local_pLabelInfo));
     }
     countingStream->rewind();
     {
@@ -19011,11 +19348,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkDebugUtilsMessengerCreateInfoEXT(mImpl->resources(), (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
+        transform_tohost_VkDebugUtilsMessengerCreateInfoEXT(mImpl->resources(), (VkDebugUtilsMessengerCreateInfoEXT*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -19092,7 +19429,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -19157,7 +19494,7 @@
     }
     if (local_pCallbackData)
     {
-        transform_VkDebugUtilsMessengerCallbackDataEXT(mImpl->resources(), (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
+        transform_tohost_VkDebugUtilsMessengerCallbackDataEXT(mImpl->resources(), (VkDebugUtilsMessengerCallbackDataEXT*)(local_pCallbackData));
     }
     countingStream->rewind();
     {
@@ -19220,6 +19557,10 @@
     stream->write((AHardwareBuffer*)local_buffer, sizeof(AHardwareBuffer));
     marshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
     unmarshal_VkAndroidHardwareBufferPropertiesANDROID(stream, (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
+    if (pProperties)
+    {
+        transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(mImpl->resources(), (VkAndroidHardwareBufferPropertiesANDROID*)(pProperties));
+    }
     VkResult vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
     stream->read(&vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -19249,7 +19590,7 @@
     }
     if (local_pInfo)
     {
-        transform_VkMemoryGetAndroidHardwareBufferInfoANDROID(mImpl->resources(), (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
+        transform_tohost_VkMemoryGetAndroidHardwareBufferInfoANDROID(mImpl->resources(), (VkMemoryGetAndroidHardwareBufferInfoANDROID*)(local_pInfo));
     }
     countingStream->rewind();
     {
@@ -19310,7 +19651,7 @@
     }
     if (local_pSampleLocationsInfo)
     {
-        transform_VkSampleLocationsInfoEXT(mImpl->resources(), (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
+        transform_tohost_VkSampleLocationsInfoEXT(mImpl->resources(), (VkSampleLocationsInfoEXT*)(local_pSampleLocationsInfo));
     }
     countingStream->rewind();
     {
@@ -19363,6 +19704,10 @@
     stream->write((VkSampleCountFlagBits*)&local_samples, sizeof(VkSampleCountFlagBits));
     marshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
     unmarshal_VkMultisamplePropertiesEXT(stream, (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
+    if (pMultisampleProperties)
+    {
+        transform_fromhost_VkMultisamplePropertiesEXT(mImpl->resources(), (VkMultisamplePropertiesEXT*)(pMultisampleProperties));
+    }
 }
 
 #endif
@@ -19407,11 +19752,11 @@
     local_pAllocator = nullptr;
     if (local_pCreateInfo)
     {
-        transform_VkValidationCacheCreateInfoEXT(mImpl->resources(), (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
+        transform_tohost_VkValidationCacheCreateInfoEXT(mImpl->resources(), (VkValidationCacheCreateInfoEXT*)(local_pCreateInfo));
     }
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -19488,7 +19833,7 @@
     local_pAllocator = nullptr;
     if (local_pAllocator)
     {
-        transform_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
+        transform_tohost_VkAllocationCallbacks(mImpl->resources(), (VkAllocationCallbacks*)(local_pAllocator));
     }
     countingStream->rewind();
     {
@@ -19751,6 +20096,10 @@
     }
     marshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
     unmarshal_VkMemoryHostPointerPropertiesEXT(stream, (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
+    if (pMemoryHostPointerProperties)
+    {
+        transform_fromhost_VkMemoryHostPointerPropertiesEXT(mImpl->resources(), (VkMemoryHostPointerPropertiesEXT*)(pMemoryHostPointerProperties));
+    }
     VkResult vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
     stream->read(&vkGetMemoryHostPointerPropertiesEXT_VkResult_return, sizeof(VkResult));
     countingStream->clearPool();
@@ -19951,6 +20300,13 @@
             unmarshal_VkCheckpointDataNV(stream, (VkCheckpointDataNV*)(pCheckpointData + i));
         }
     }
+    if (pCheckpointData)
+    {
+        for (uint32_t i = 0; i < (uint32_t)(*(pCheckpointDataCount)); ++i)
+        {
+            transform_fromhost_VkCheckpointDataNV(mImpl->resources(), (VkCheckpointDataNV*)(pCheckpointData + i));
+        }
+    }
 }
 
 #endif
@@ -19970,7 +20326,7 @@
     VkDeviceMemory local_memory;
     local_device = device;
     local_memory = memory;
-    mImpl->resources()->deviceMemoryTransform(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    mImpl->resources()->deviceMemoryTransform_tohost(&local_memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     countingStream->rewind();
     {
         uint64_t cgen_var_1461;
diff --git a/system/vulkan_enc/VkEventHandler.cpp b/system/vulkan_enc/VkEventHandler.cpp
deleted file mode 100644
index 2490f1a..0000000
--- a/system/vulkan_enc/VkEventHandler.cpp
+++ /dev/null
@@ -1,3167 +0,0 @@
-// Copyright (C) 2018 The Android Open Source Project
-// Copyright (C) 2018 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Autogenerated module VkEventHandler
-// (impl) generated by android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/genvk.py -registry android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/vk.xml cereal -o android/android-emugl/host/libs/libOpenglRender/vulkan/cereal
-// Please do not modify directly;
-// re-run android/scripts/generate-vulkan-sources.sh,
-// or directly from Python by defining:
-// VULKAN_REGISTRY_XML_DIR : Directory containing genvk.py and vk.xml
-// CEREAL_OUTPUT_DIR: Where to put the generated sources.
-// python3 $VULKAN_REGISTRY_XML_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
-#include "VkEventHandler.h"
-
-
-#include "VkEncoder.h"
-
-
-namespace goldfish_vk {
-
-
-VkEventHandler::VkEventHandler() { }
-VkEventHandler::~VkEventHandler() { }
-#ifdef VK_VERSION_1_0
-VkResult VkEventHandler::on_vkCreateInstance(
-    void*,
-    VkResult,
-    const VkInstanceCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkInstance*)
-{
-    VkResult on_vkCreateInstance_VkResult_return = (VkResult)0;
-    return on_vkCreateInstance_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyInstance(
-    void*,
-    VkInstance,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkEnumeratePhysicalDevices(
-    void*,
-    VkResult,
-    VkInstance,
-    uint32_t*,
-    VkPhysicalDevice*)
-{
-    VkResult on_vkEnumeratePhysicalDevices_VkResult_return = (VkResult)0;
-    return on_vkEnumeratePhysicalDevices_VkResult_return;
-}
-void VkEventHandler::on_vkGetPhysicalDeviceFeatures(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceFeatures*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceFormatProperties(
-    void*,
-    VkPhysicalDevice,
-    VkFormat,
-    VkFormatProperties*)
-{
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceImageFormatProperties(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkFormat,
-    VkImageType,
-    VkImageTiling,
-    VkImageUsageFlags,
-    VkImageCreateFlags,
-    VkImageFormatProperties*)
-{
-    VkResult on_vkGetPhysicalDeviceImageFormatProperties_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceImageFormatProperties_VkResult_return;
-}
-void VkEventHandler::on_vkGetPhysicalDeviceProperties(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceProperties*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceQueueFamilyProperties(
-    void*,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkQueueFamilyProperties*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceMemoryProperties(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceMemoryProperties*)
-{
-}
-PFN_vkVoidFunction VkEventHandler::on_vkGetInstanceProcAddr(
-    void*,
-    PFN_vkVoidFunction,
-    VkInstance,
-    const char*)
-{
-    PFN_vkVoidFunction on_vkGetInstanceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
-    return on_vkGetInstanceProcAddr_PFN_vkVoidFunction_return;
-}
-PFN_vkVoidFunction VkEventHandler::on_vkGetDeviceProcAddr(
-    void*,
-    PFN_vkVoidFunction,
-    VkDevice,
-    const char*)
-{
-    PFN_vkVoidFunction on_vkGetDeviceProcAddr_PFN_vkVoidFunction_return = (PFN_vkVoidFunction)0;
-    return on_vkGetDeviceProcAddr_PFN_vkVoidFunction_return;
-}
-VkResult VkEventHandler::on_vkCreateDevice(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const VkDeviceCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkDevice*)
-{
-    VkResult on_vkCreateDevice_VkResult_return = (VkResult)0;
-    return on_vkCreateDevice_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDevice(
-    void*,
-    VkDevice,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkEnumerateInstanceExtensionProperties(
-    void*,
-    VkResult,
-    const char*,
-    uint32_t*,
-    VkExtensionProperties*)
-{
-    VkResult on_vkEnumerateInstanceExtensionProperties_VkResult_return = (VkResult)0;
-    return on_vkEnumerateInstanceExtensionProperties_VkResult_return;
-}
-VkResult VkEventHandler::on_vkEnumerateDeviceExtensionProperties(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const char*,
-    uint32_t*,
-    VkExtensionProperties*)
-{
-    VkResult on_vkEnumerateDeviceExtensionProperties_VkResult_return = (VkResult)0;
-    return on_vkEnumerateDeviceExtensionProperties_VkResult_return;
-}
-VkResult VkEventHandler::on_vkEnumerateInstanceLayerProperties(
-    void*,
-    VkResult,
-    uint32_t*,
-    VkLayerProperties*)
-{
-    VkResult on_vkEnumerateInstanceLayerProperties_VkResult_return = (VkResult)0;
-    return on_vkEnumerateInstanceLayerProperties_VkResult_return;
-}
-VkResult VkEventHandler::on_vkEnumerateDeviceLayerProperties(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkLayerProperties*)
-{
-    VkResult on_vkEnumerateDeviceLayerProperties_VkResult_return = (VkResult)0;
-    return on_vkEnumerateDeviceLayerProperties_VkResult_return;
-}
-void VkEventHandler::on_vkGetDeviceQueue(
-    void*,
-    VkDevice,
-    uint32_t,
-    uint32_t,
-    VkQueue*)
-{
-}
-VkResult VkEventHandler::on_vkQueueSubmit(
-    void*,
-    VkResult,
-    VkQueue,
-    uint32_t,
-    const VkSubmitInfo*,
-    VkFence)
-{
-    VkResult on_vkQueueSubmit_VkResult_return = (VkResult)0;
-    return on_vkQueueSubmit_VkResult_return;
-}
-VkResult VkEventHandler::on_vkQueueWaitIdle(
-    void*,
-    VkResult,
-    VkQueue)
-{
-    VkResult on_vkQueueWaitIdle_VkResult_return = (VkResult)0;
-    return on_vkQueueWaitIdle_VkResult_return;
-}
-VkResult VkEventHandler::on_vkDeviceWaitIdle(
-    void*,
-    VkResult,
-    VkDevice)
-{
-    VkResult on_vkDeviceWaitIdle_VkResult_return = (VkResult)0;
-    return on_vkDeviceWaitIdle_VkResult_return;
-}
-VkResult VkEventHandler::on_vkAllocateMemory(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkMemoryAllocateInfo*,
-    const VkAllocationCallbacks*,
-    VkDeviceMemory*)
-{
-    VkResult on_vkAllocateMemory_VkResult_return = (VkResult)0;
-    return on_vkAllocateMemory_VkResult_return;
-}
-void VkEventHandler::on_vkFreeMemory(
-    void*,
-    VkDevice,
-    VkDeviceMemory,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkMapMemory(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDeviceMemory,
-    VkDeviceSize,
-    VkDeviceSize,
-    VkMemoryMapFlags,
-    void**)
-{
-    VkResult on_vkMapMemory_VkResult_return = (VkResult)0;
-    return on_vkMapMemory_VkResult_return;
-}
-void VkEventHandler::on_vkUnmapMemory(
-    void*,
-    VkDevice,
-    VkDeviceMemory)
-{
-}
-VkResult VkEventHandler::on_vkFlushMappedMemoryRanges(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkMappedMemoryRange*)
-{
-    VkResult on_vkFlushMappedMemoryRanges_VkResult_return = (VkResult)0;
-    return on_vkFlushMappedMemoryRanges_VkResult_return;
-}
-VkResult VkEventHandler::on_vkInvalidateMappedMemoryRanges(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkMappedMemoryRange*)
-{
-    VkResult on_vkInvalidateMappedMemoryRanges_VkResult_return = (VkResult)0;
-    return on_vkInvalidateMappedMemoryRanges_VkResult_return;
-}
-void VkEventHandler::on_vkGetDeviceMemoryCommitment(
-    void*,
-    VkDevice,
-    VkDeviceMemory,
-    VkDeviceSize*)
-{
-}
-VkResult VkEventHandler::on_vkBindBufferMemory(
-    void*,
-    VkResult,
-    VkDevice,
-    VkBuffer,
-    VkDeviceMemory,
-    VkDeviceSize)
-{
-    VkResult on_vkBindBufferMemory_VkResult_return = (VkResult)0;
-    return on_vkBindBufferMemory_VkResult_return;
-}
-VkResult VkEventHandler::on_vkBindImageMemory(
-    void*,
-    VkResult,
-    VkDevice,
-    VkImage,
-    VkDeviceMemory,
-    VkDeviceSize)
-{
-    VkResult on_vkBindImageMemory_VkResult_return = (VkResult)0;
-    return on_vkBindImageMemory_VkResult_return;
-}
-void VkEventHandler::on_vkGetBufferMemoryRequirements(
-    void*,
-    VkDevice,
-    VkBuffer,
-    VkMemoryRequirements*)
-{
-}
-void VkEventHandler::on_vkGetImageMemoryRequirements(
-    void*,
-    VkDevice,
-    VkImage,
-    VkMemoryRequirements*)
-{
-}
-void VkEventHandler::on_vkGetImageSparseMemoryRequirements(
-    void*,
-    VkDevice,
-    VkImage,
-    uint32_t*,
-    VkSparseImageMemoryRequirements*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceSparseImageFormatProperties(
-    void*,
-    VkPhysicalDevice,
-    VkFormat,
-    VkImageType,
-    VkSampleCountFlagBits,
-    VkImageUsageFlags,
-    VkImageTiling,
-    uint32_t*,
-    VkSparseImageFormatProperties*)
-{
-}
-VkResult VkEventHandler::on_vkQueueBindSparse(
-    void*,
-    VkResult,
-    VkQueue,
-    uint32_t,
-    const VkBindSparseInfo*,
-    VkFence)
-{
-    VkResult on_vkQueueBindSparse_VkResult_return = (VkResult)0;
-    return on_vkQueueBindSparse_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateFence(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkFenceCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkFence*)
-{
-    VkResult on_vkCreateFence_VkResult_return = (VkResult)0;
-    return on_vkCreateFence_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyFence(
-    void*,
-    VkDevice,
-    VkFence,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkResetFences(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkFence*)
-{
-    VkResult on_vkResetFences_VkResult_return = (VkResult)0;
-    return on_vkResetFences_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetFenceStatus(
-    void*,
-    VkResult,
-    VkDevice,
-    VkFence)
-{
-    VkResult on_vkGetFenceStatus_VkResult_return = (VkResult)0;
-    return on_vkGetFenceStatus_VkResult_return;
-}
-VkResult VkEventHandler::on_vkWaitForFences(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkFence*,
-    VkBool32,
-    uint64_t)
-{
-    VkResult on_vkWaitForFences_VkResult_return = (VkResult)0;
-    return on_vkWaitForFences_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateSemaphore(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSemaphoreCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkSemaphore*)
-{
-    VkResult on_vkCreateSemaphore_VkResult_return = (VkResult)0;
-    return on_vkCreateSemaphore_VkResult_return;
-}
-void VkEventHandler::on_vkDestroySemaphore(
-    void*,
-    VkDevice,
-    VkSemaphore,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateEvent(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkEventCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkEvent*)
-{
-    VkResult on_vkCreateEvent_VkResult_return = (VkResult)0;
-    return on_vkCreateEvent_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyEvent(
-    void*,
-    VkDevice,
-    VkEvent,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkGetEventStatus(
-    void*,
-    VkResult,
-    VkDevice,
-    VkEvent)
-{
-    VkResult on_vkGetEventStatus_VkResult_return = (VkResult)0;
-    return on_vkGetEventStatus_VkResult_return;
-}
-VkResult VkEventHandler::on_vkSetEvent(
-    void*,
-    VkResult,
-    VkDevice,
-    VkEvent)
-{
-    VkResult on_vkSetEvent_VkResult_return = (VkResult)0;
-    return on_vkSetEvent_VkResult_return;
-}
-VkResult VkEventHandler::on_vkResetEvent(
-    void*,
-    VkResult,
-    VkDevice,
-    VkEvent)
-{
-    VkResult on_vkResetEvent_VkResult_return = (VkResult)0;
-    return on_vkResetEvent_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateQueryPool(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkQueryPoolCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkQueryPool*)
-{
-    VkResult on_vkCreateQueryPool_VkResult_return = (VkResult)0;
-    return on_vkCreateQueryPool_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyQueryPool(
-    void*,
-    VkDevice,
-    VkQueryPool,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkGetQueryPoolResults(
-    void*,
-    VkResult,
-    VkDevice,
-    VkQueryPool,
-    uint32_t,
-    uint32_t,
-    size_t,
-    void*,
-    VkDeviceSize,
-    VkQueryResultFlags)
-{
-    VkResult on_vkGetQueryPoolResults_VkResult_return = (VkResult)0;
-    return on_vkGetQueryPoolResults_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateBuffer(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkBufferCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkBuffer*)
-{
-    VkResult on_vkCreateBuffer_VkResult_return = (VkResult)0;
-    return on_vkCreateBuffer_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyBuffer(
-    void*,
-    VkDevice,
-    VkBuffer,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateBufferView(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkBufferViewCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkBufferView*)
-{
-    VkResult on_vkCreateBufferView_VkResult_return = (VkResult)0;
-    return on_vkCreateBufferView_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyBufferView(
-    void*,
-    VkDevice,
-    VkBufferView,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateImage(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkImageCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkImage*)
-{
-    VkResult on_vkCreateImage_VkResult_return = (VkResult)0;
-    return on_vkCreateImage_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyImage(
-    void*,
-    VkDevice,
-    VkImage,
-    const VkAllocationCallbacks*)
-{
-}
-void VkEventHandler::on_vkGetImageSubresourceLayout(
-    void*,
-    VkDevice,
-    VkImage,
-    const VkImageSubresource*,
-    VkSubresourceLayout*)
-{
-}
-VkResult VkEventHandler::on_vkCreateImageView(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkImageViewCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkImageView*)
-{
-    VkResult on_vkCreateImageView_VkResult_return = (VkResult)0;
-    return on_vkCreateImageView_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyImageView(
-    void*,
-    VkDevice,
-    VkImageView,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateShaderModule(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkShaderModuleCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkShaderModule*)
-{
-    VkResult on_vkCreateShaderModule_VkResult_return = (VkResult)0;
-    return on_vkCreateShaderModule_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyShaderModule(
-    void*,
-    VkDevice,
-    VkShaderModule,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreatePipelineCache(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkPipelineCacheCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkPipelineCache*)
-{
-    VkResult on_vkCreatePipelineCache_VkResult_return = (VkResult)0;
-    return on_vkCreatePipelineCache_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyPipelineCache(
-    void*,
-    VkDevice,
-    VkPipelineCache,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkGetPipelineCacheData(
-    void*,
-    VkResult,
-    VkDevice,
-    VkPipelineCache,
-    size_t*,
-    void*)
-{
-    VkResult on_vkGetPipelineCacheData_VkResult_return = (VkResult)0;
-    return on_vkGetPipelineCacheData_VkResult_return;
-}
-VkResult VkEventHandler::on_vkMergePipelineCaches(
-    void*,
-    VkResult,
-    VkDevice,
-    VkPipelineCache,
-    uint32_t,
-    const VkPipelineCache*)
-{
-    VkResult on_vkMergePipelineCaches_VkResult_return = (VkResult)0;
-    return on_vkMergePipelineCaches_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateGraphicsPipelines(
-    void*,
-    VkResult,
-    VkDevice,
-    VkPipelineCache,
-    uint32_t,
-    const VkGraphicsPipelineCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkPipeline*)
-{
-    VkResult on_vkCreateGraphicsPipelines_VkResult_return = (VkResult)0;
-    return on_vkCreateGraphicsPipelines_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateComputePipelines(
-    void*,
-    VkResult,
-    VkDevice,
-    VkPipelineCache,
-    uint32_t,
-    const VkComputePipelineCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkPipeline*)
-{
-    VkResult on_vkCreateComputePipelines_VkResult_return = (VkResult)0;
-    return on_vkCreateComputePipelines_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyPipeline(
-    void*,
-    VkDevice,
-    VkPipeline,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreatePipelineLayout(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkPipelineLayoutCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkPipelineLayout*)
-{
-    VkResult on_vkCreatePipelineLayout_VkResult_return = (VkResult)0;
-    return on_vkCreatePipelineLayout_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyPipelineLayout(
-    void*,
-    VkDevice,
-    VkPipelineLayout,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateSampler(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSamplerCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkSampler*)
-{
-    VkResult on_vkCreateSampler_VkResult_return = (VkResult)0;
-    return on_vkCreateSampler_VkResult_return;
-}
-void VkEventHandler::on_vkDestroySampler(
-    void*,
-    VkDevice,
-    VkSampler,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateDescriptorSetLayout(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDescriptorSetLayoutCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkDescriptorSetLayout*)
-{
-    VkResult on_vkCreateDescriptorSetLayout_VkResult_return = (VkResult)0;
-    return on_vkCreateDescriptorSetLayout_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDescriptorSetLayout(
-    void*,
-    VkDevice,
-    VkDescriptorSetLayout,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateDescriptorPool(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDescriptorPoolCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkDescriptorPool*)
-{
-    VkResult on_vkCreateDescriptorPool_VkResult_return = (VkResult)0;
-    return on_vkCreateDescriptorPool_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDescriptorPool(
-    void*,
-    VkDevice,
-    VkDescriptorPool,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkResetDescriptorPool(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDescriptorPool,
-    VkDescriptorPoolResetFlags)
-{
-    VkResult on_vkResetDescriptorPool_VkResult_return = (VkResult)0;
-    return on_vkResetDescriptorPool_VkResult_return;
-}
-VkResult VkEventHandler::on_vkAllocateDescriptorSets(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDescriptorSetAllocateInfo*,
-    VkDescriptorSet*)
-{
-    VkResult on_vkAllocateDescriptorSets_VkResult_return = (VkResult)0;
-    return on_vkAllocateDescriptorSets_VkResult_return;
-}
-VkResult VkEventHandler::on_vkFreeDescriptorSets(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDescriptorPool,
-    uint32_t,
-    const VkDescriptorSet*)
-{
-    VkResult on_vkFreeDescriptorSets_VkResult_return = (VkResult)0;
-    return on_vkFreeDescriptorSets_VkResult_return;
-}
-void VkEventHandler::on_vkUpdateDescriptorSets(
-    void*,
-    VkDevice,
-    uint32_t,
-    const VkWriteDescriptorSet*,
-    uint32_t,
-    const VkCopyDescriptorSet*)
-{
-}
-VkResult VkEventHandler::on_vkCreateFramebuffer(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkFramebufferCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkFramebuffer*)
-{
-    VkResult on_vkCreateFramebuffer_VkResult_return = (VkResult)0;
-    return on_vkCreateFramebuffer_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyFramebuffer(
-    void*,
-    VkDevice,
-    VkFramebuffer,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateRenderPass(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkRenderPassCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkRenderPass*)
-{
-    VkResult on_vkCreateRenderPass_VkResult_return = (VkResult)0;
-    return on_vkCreateRenderPass_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyRenderPass(
-    void*,
-    VkDevice,
-    VkRenderPass,
-    const VkAllocationCallbacks*)
-{
-}
-void VkEventHandler::on_vkGetRenderAreaGranularity(
-    void*,
-    VkDevice,
-    VkRenderPass,
-    VkExtent2D*)
-{
-}
-VkResult VkEventHandler::on_vkCreateCommandPool(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkCommandPoolCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkCommandPool*)
-{
-    VkResult on_vkCreateCommandPool_VkResult_return = (VkResult)0;
-    return on_vkCreateCommandPool_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyCommandPool(
-    void*,
-    VkDevice,
-    VkCommandPool,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkResetCommandPool(
-    void*,
-    VkResult,
-    VkDevice,
-    VkCommandPool,
-    VkCommandPoolResetFlags)
-{
-    VkResult on_vkResetCommandPool_VkResult_return = (VkResult)0;
-    return on_vkResetCommandPool_VkResult_return;
-}
-VkResult VkEventHandler::on_vkAllocateCommandBuffers(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkCommandBufferAllocateInfo*,
-    VkCommandBuffer*)
-{
-    VkResult on_vkAllocateCommandBuffers_VkResult_return = (VkResult)0;
-    return on_vkAllocateCommandBuffers_VkResult_return;
-}
-void VkEventHandler::on_vkFreeCommandBuffers(
-    void*,
-    VkDevice,
-    VkCommandPool,
-    uint32_t,
-    const VkCommandBuffer*)
-{
-}
-VkResult VkEventHandler::on_vkBeginCommandBuffer(
-    void*,
-    VkResult,
-    VkCommandBuffer,
-    const VkCommandBufferBeginInfo*)
-{
-    VkResult on_vkBeginCommandBuffer_VkResult_return = (VkResult)0;
-    return on_vkBeginCommandBuffer_VkResult_return;
-}
-VkResult VkEventHandler::on_vkEndCommandBuffer(
-    void*,
-    VkResult,
-    VkCommandBuffer)
-{
-    VkResult on_vkEndCommandBuffer_VkResult_return = (VkResult)0;
-    return on_vkEndCommandBuffer_VkResult_return;
-}
-VkResult VkEventHandler::on_vkResetCommandBuffer(
-    void*,
-    VkResult,
-    VkCommandBuffer,
-    VkCommandBufferResetFlags)
-{
-    VkResult on_vkResetCommandBuffer_VkResult_return = (VkResult)0;
-    return on_vkResetCommandBuffer_VkResult_return;
-}
-void VkEventHandler::on_vkCmdBindPipeline(
-    void*,
-    VkCommandBuffer,
-    VkPipelineBindPoint,
-    VkPipeline)
-{
-}
-void VkEventHandler::on_vkCmdSetViewport(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    const VkViewport*)
-{
-}
-void VkEventHandler::on_vkCmdSetScissor(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    const VkRect2D*)
-{
-}
-void VkEventHandler::on_vkCmdSetLineWidth(
-    void*,
-    VkCommandBuffer,
-    float)
-{
-}
-void VkEventHandler::on_vkCmdSetDepthBias(
-    void*,
-    VkCommandBuffer,
-    float,
-    float,
-    float)
-{
-}
-void VkEventHandler::on_vkCmdSetBlendConstants(
-    void*,
-    VkCommandBuffer,
-    const float)
-{
-}
-void VkEventHandler::on_vkCmdSetDepthBounds(
-    void*,
-    VkCommandBuffer,
-    float,
-    float)
-{
-}
-void VkEventHandler::on_vkCmdSetStencilCompareMask(
-    void*,
-    VkCommandBuffer,
-    VkStencilFaceFlags,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdSetStencilWriteMask(
-    void*,
-    VkCommandBuffer,
-    VkStencilFaceFlags,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdSetStencilReference(
-    void*,
-    VkCommandBuffer,
-    VkStencilFaceFlags,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdBindDescriptorSets(
-    void*,
-    VkCommandBuffer,
-    VkPipelineBindPoint,
-    VkPipelineLayout,
-    uint32_t,
-    uint32_t,
-    const VkDescriptorSet*,
-    uint32_t,
-    const uint32_t*)
-{
-}
-void VkEventHandler::on_vkCmdBindIndexBuffer(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkIndexType)
-{
-}
-void VkEventHandler::on_vkCmdBindVertexBuffers(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    const VkBuffer*,
-    const VkDeviceSize*)
-{
-}
-void VkEventHandler::on_vkCmdDraw(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDrawIndexed(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    int32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDrawIndirect(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDrawIndexedIndirect(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDispatch(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDispatchIndirect(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize)
-{
-}
-void VkEventHandler::on_vkCmdCopyBuffer(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkBuffer,
-    uint32_t,
-    const VkBufferCopy*)
-{
-}
-void VkEventHandler::on_vkCmdCopyImage(
-    void*,
-    VkCommandBuffer,
-    VkImage,
-    VkImageLayout,
-    VkImage,
-    VkImageLayout,
-    uint32_t,
-    const VkImageCopy*)
-{
-}
-void VkEventHandler::on_vkCmdBlitImage(
-    void*,
-    VkCommandBuffer,
-    VkImage,
-    VkImageLayout,
-    VkImage,
-    VkImageLayout,
-    uint32_t,
-    const VkImageBlit*,
-    VkFilter)
-{
-}
-void VkEventHandler::on_vkCmdCopyBufferToImage(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkImage,
-    VkImageLayout,
-    uint32_t,
-    const VkBufferImageCopy*)
-{
-}
-void VkEventHandler::on_vkCmdCopyImageToBuffer(
-    void*,
-    VkCommandBuffer,
-    VkImage,
-    VkImageLayout,
-    VkBuffer,
-    uint32_t,
-    const VkBufferImageCopy*)
-{
-}
-void VkEventHandler::on_vkCmdUpdateBuffer(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkDeviceSize,
-    const void*)
-{
-}
-void VkEventHandler::on_vkCmdFillBuffer(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkDeviceSize,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdClearColorImage(
-    void*,
-    VkCommandBuffer,
-    VkImage,
-    VkImageLayout,
-    const VkClearColorValue*,
-    uint32_t,
-    const VkImageSubresourceRange*)
-{
-}
-void VkEventHandler::on_vkCmdClearDepthStencilImage(
-    void*,
-    VkCommandBuffer,
-    VkImage,
-    VkImageLayout,
-    const VkClearDepthStencilValue*,
-    uint32_t,
-    const VkImageSubresourceRange*)
-{
-}
-void VkEventHandler::on_vkCmdClearAttachments(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    const VkClearAttachment*,
-    uint32_t,
-    const VkClearRect*)
-{
-}
-void VkEventHandler::on_vkCmdResolveImage(
-    void*,
-    VkCommandBuffer,
-    VkImage,
-    VkImageLayout,
-    VkImage,
-    VkImageLayout,
-    uint32_t,
-    const VkImageResolve*)
-{
-}
-void VkEventHandler::on_vkCmdSetEvent(
-    void*,
-    VkCommandBuffer,
-    VkEvent,
-    VkPipelineStageFlags)
-{
-}
-void VkEventHandler::on_vkCmdResetEvent(
-    void*,
-    VkCommandBuffer,
-    VkEvent,
-    VkPipelineStageFlags)
-{
-}
-void VkEventHandler::on_vkCmdWaitEvents(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    const VkEvent*,
-    VkPipelineStageFlags,
-    VkPipelineStageFlags,
-    uint32_t,
-    const VkMemoryBarrier*,
-    uint32_t,
-    const VkBufferMemoryBarrier*,
-    uint32_t,
-    const VkImageMemoryBarrier*)
-{
-}
-void VkEventHandler::on_vkCmdPipelineBarrier(
-    void*,
-    VkCommandBuffer,
-    VkPipelineStageFlags,
-    VkPipelineStageFlags,
-    VkDependencyFlags,
-    uint32_t,
-    const VkMemoryBarrier*,
-    uint32_t,
-    const VkBufferMemoryBarrier*,
-    uint32_t,
-    const VkImageMemoryBarrier*)
-{
-}
-void VkEventHandler::on_vkCmdBeginQuery(
-    void*,
-    VkCommandBuffer,
-    VkQueryPool,
-    uint32_t,
-    VkQueryControlFlags)
-{
-}
-void VkEventHandler::on_vkCmdEndQuery(
-    void*,
-    VkCommandBuffer,
-    VkQueryPool,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdResetQueryPool(
-    void*,
-    VkCommandBuffer,
-    VkQueryPool,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdWriteTimestamp(
-    void*,
-    VkCommandBuffer,
-    VkPipelineStageFlagBits,
-    VkQueryPool,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdCopyQueryPoolResults(
-    void*,
-    VkCommandBuffer,
-    VkQueryPool,
-    uint32_t,
-    uint32_t,
-    VkBuffer,
-    VkDeviceSize,
-    VkDeviceSize,
-    VkQueryResultFlags)
-{
-}
-void VkEventHandler::on_vkCmdPushConstants(
-    void*,
-    VkCommandBuffer,
-    VkPipelineLayout,
-    VkShaderStageFlags,
-    uint32_t,
-    uint32_t,
-    const void*)
-{
-}
-void VkEventHandler::on_vkCmdBeginRenderPass(
-    void*,
-    VkCommandBuffer,
-    const VkRenderPassBeginInfo*,
-    VkSubpassContents)
-{
-}
-void VkEventHandler::on_vkCmdNextSubpass(
-    void*,
-    VkCommandBuffer,
-    VkSubpassContents)
-{
-}
-void VkEventHandler::on_vkCmdEndRenderPass(
-    void*,
-    VkCommandBuffer)
-{
-}
-void VkEventHandler::on_vkCmdExecuteCommands(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    const VkCommandBuffer*)
-{
-}
-#endif
-#ifdef VK_VERSION_1_1
-VkResult VkEventHandler::on_vkEnumerateInstanceVersion(
-    void*,
-    VkResult,
-    uint32_t*)
-{
-    VkResult on_vkEnumerateInstanceVersion_VkResult_return = (VkResult)0;
-    return on_vkEnumerateInstanceVersion_VkResult_return;
-}
-VkResult VkEventHandler::on_vkBindBufferMemory2(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkBindBufferMemoryInfo*)
-{
-    VkResult on_vkBindBufferMemory2_VkResult_return = (VkResult)0;
-    return on_vkBindBufferMemory2_VkResult_return;
-}
-VkResult VkEventHandler::on_vkBindImageMemory2(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkBindImageMemoryInfo*)
-{
-    VkResult on_vkBindImageMemory2_VkResult_return = (VkResult)0;
-    return on_vkBindImageMemory2_VkResult_return;
-}
-void VkEventHandler::on_vkGetDeviceGroupPeerMemoryFeatures(
-    void*,
-    VkDevice,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    VkPeerMemoryFeatureFlags*)
-{
-}
-void VkEventHandler::on_vkCmdSetDeviceMask(
-    void*,
-    VkCommandBuffer,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDispatchBase(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t)
-{
-}
-VkResult VkEventHandler::on_vkEnumeratePhysicalDeviceGroups(
-    void*,
-    VkResult,
-    VkInstance,
-    uint32_t*,
-    VkPhysicalDeviceGroupProperties*)
-{
-    VkResult on_vkEnumeratePhysicalDeviceGroups_VkResult_return = (VkResult)0;
-    return on_vkEnumeratePhysicalDeviceGroups_VkResult_return;
-}
-void VkEventHandler::on_vkGetImageMemoryRequirements2(
-    void*,
-    VkDevice,
-    const VkImageMemoryRequirementsInfo2*,
-    VkMemoryRequirements2*)
-{
-}
-void VkEventHandler::on_vkGetBufferMemoryRequirements2(
-    void*,
-    VkDevice,
-    const VkBufferMemoryRequirementsInfo2*,
-    VkMemoryRequirements2*)
-{
-}
-void VkEventHandler::on_vkGetImageSparseMemoryRequirements2(
-    void*,
-    VkDevice,
-    const VkImageSparseMemoryRequirementsInfo2*,
-    uint32_t*,
-    VkSparseImageMemoryRequirements2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceFeatures2(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceFeatures2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceProperties2(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceProperties2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceFormatProperties2(
-    void*,
-    VkPhysicalDevice,
-    VkFormat,
-    VkFormatProperties2*)
-{
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceImageFormatProperties2(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceImageFormatInfo2*,
-    VkImageFormatProperties2*)
-{
-    VkResult on_vkGetPhysicalDeviceImageFormatProperties2_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceImageFormatProperties2_VkResult_return;
-}
-void VkEventHandler::on_vkGetPhysicalDeviceQueueFamilyProperties2(
-    void*,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkQueueFamilyProperties2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceMemoryProperties2(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceMemoryProperties2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceSparseImageFormatProperties2(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceSparseImageFormatInfo2*,
-    uint32_t*,
-    VkSparseImageFormatProperties2*)
-{
-}
-void VkEventHandler::on_vkTrimCommandPool(
-    void*,
-    VkDevice,
-    VkCommandPool,
-    VkCommandPoolTrimFlags)
-{
-}
-void VkEventHandler::on_vkGetDeviceQueue2(
-    void*,
-    VkDevice,
-    const VkDeviceQueueInfo2*,
-    VkQueue*)
-{
-}
-VkResult VkEventHandler::on_vkCreateSamplerYcbcrConversion(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSamplerYcbcrConversionCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkSamplerYcbcrConversion*)
-{
-    VkResult on_vkCreateSamplerYcbcrConversion_VkResult_return = (VkResult)0;
-    return on_vkCreateSamplerYcbcrConversion_VkResult_return;
-}
-void VkEventHandler::on_vkDestroySamplerYcbcrConversion(
-    void*,
-    VkDevice,
-    VkSamplerYcbcrConversion,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateDescriptorUpdateTemplate(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDescriptorUpdateTemplateCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkDescriptorUpdateTemplate*)
-{
-    VkResult on_vkCreateDescriptorUpdateTemplate_VkResult_return = (VkResult)0;
-    return on_vkCreateDescriptorUpdateTemplate_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDescriptorUpdateTemplate(
-    void*,
-    VkDevice,
-    VkDescriptorUpdateTemplate,
-    const VkAllocationCallbacks*)
-{
-}
-void VkEventHandler::on_vkUpdateDescriptorSetWithTemplate(
-    void*,
-    VkDevice,
-    VkDescriptorSet,
-    VkDescriptorUpdateTemplate,
-    const void*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceExternalBufferProperties(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceExternalBufferInfo*,
-    VkExternalBufferProperties*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceExternalFenceProperties(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceExternalFenceInfo*,
-    VkExternalFenceProperties*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceExternalSemaphoreProperties(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceExternalSemaphoreInfo*,
-    VkExternalSemaphoreProperties*)
-{
-}
-void VkEventHandler::on_vkGetDescriptorSetLayoutSupport(
-    void*,
-    VkDevice,
-    const VkDescriptorSetLayoutCreateInfo*,
-    VkDescriptorSetLayoutSupport*)
-{
-}
-#endif
-#ifdef VK_KHR_surface
-void VkEventHandler::on_vkDestroySurfaceKHR(
-    void*,
-    VkInstance,
-    VkSurfaceKHR,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceSupportKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t,
-    VkSurfaceKHR,
-    VkBool32*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfaceSupportKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkSurfaceKHR,
-    VkSurfaceCapabilitiesKHR*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceFormatsKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkSurfaceKHR,
-    uint32_t*,
-    VkSurfaceFormatKHR*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfaceFormatsKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfacePresentModesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkSurfaceKHR,
-    uint32_t*,
-    VkPresentModeKHR*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfacePresentModesKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_swapchain
-VkResult VkEventHandler::on_vkCreateSwapchainKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSwapchainCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSwapchainKHR*)
-{
-    VkResult on_vkCreateSwapchainKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateSwapchainKHR_VkResult_return;
-}
-void VkEventHandler::on_vkDestroySwapchainKHR(
-    void*,
-    VkDevice,
-    VkSwapchainKHR,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkGetSwapchainImagesKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSwapchainKHR,
-    uint32_t*,
-    VkImage*)
-{
-    VkResult on_vkGetSwapchainImagesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetSwapchainImagesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkAcquireNextImageKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSwapchainKHR,
-    uint64_t,
-    VkSemaphore,
-    VkFence,
-    uint32_t*)
-{
-    VkResult on_vkAcquireNextImageKHR_VkResult_return = (VkResult)0;
-    return on_vkAcquireNextImageKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkQueuePresentKHR(
-    void*,
-    VkResult,
-    VkQueue,
-    const VkPresentInfoKHR*)
-{
-    VkResult on_vkQueuePresentKHR_VkResult_return = (VkResult)0;
-    return on_vkQueuePresentKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDeviceGroupPresentCapabilitiesKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDeviceGroupPresentCapabilitiesKHR*)
-{
-    VkResult on_vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetDeviceGroupPresentCapabilitiesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDeviceGroupSurfacePresentModesKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSurfaceKHR,
-    VkDeviceGroupPresentModeFlagsKHR*)
-{
-    VkResult on_vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetDeviceGroupSurfacePresentModesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDevicePresentRectanglesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkSurfaceKHR,
-    uint32_t*,
-    VkRect2D*)
-{
-    VkResult on_vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDevicePresentRectanglesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkAcquireNextImage2KHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkAcquireNextImageInfoKHR*,
-    uint32_t*)
-{
-    VkResult on_vkAcquireNextImage2KHR_VkResult_return = (VkResult)0;
-    return on_vkAcquireNextImage2KHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_display
-VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayPropertiesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkDisplayPropertiesKHR*)
-{
-    VkResult on_vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceDisplayPropertiesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkDisplayPlanePropertiesKHR*)
-{
-    VkResult on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDisplayPlaneSupportedDisplaysKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t,
-    uint32_t*,
-    VkDisplayKHR*)
-{
-    VkResult on_vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return = (VkResult)0;
-    return on_vkGetDisplayPlaneSupportedDisplaysKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDisplayModePropertiesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkDisplayKHR,
-    uint32_t*,
-    VkDisplayModePropertiesKHR*)
-{
-    VkResult on_vkGetDisplayModePropertiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetDisplayModePropertiesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateDisplayModeKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkDisplayKHR,
-    const VkDisplayModeCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkDisplayModeKHR*)
-{
-    VkResult on_vkCreateDisplayModeKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateDisplayModeKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDisplayPlaneCapabilitiesKHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkDisplayModeKHR,
-    uint32_t,
-    VkDisplayPlaneCapabilitiesKHR*)
-{
-    VkResult on_vkGetDisplayPlaneCapabilitiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetDisplayPlaneCapabilitiesKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkCreateDisplayPlaneSurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkDisplaySurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateDisplayPlaneSurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateDisplayPlaneSurfaceKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_display_swapchain
-VkResult VkEventHandler::on_vkCreateSharedSwapchainsKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkSwapchainCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSwapchainKHR*)
-{
-    VkResult on_vkCreateSharedSwapchainsKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateSharedSwapchainsKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_xlib_surface
-VkResult VkEventHandler::on_vkCreateXlibSurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkXlibSurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateXlibSurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateXlibSurfaceKHR_VkResult_return;
-}
-VkBool32 VkEventHandler::on_vkGetPhysicalDeviceXlibPresentationSupportKHR(
-    void*,
-    VkBool32,
-    VkPhysicalDevice,
-    uint32_t,
-    Display*,
-    VisualID)
-{
-    VkBool32 on_vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return = (VkBool32)0;
-    return on_vkGetPhysicalDeviceXlibPresentationSupportKHR_VkBool32_return;
-}
-#endif
-#ifdef VK_KHR_xcb_surface
-VkResult VkEventHandler::on_vkCreateXcbSurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkXcbSurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateXcbSurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateXcbSurfaceKHR_VkResult_return;
-}
-VkBool32 VkEventHandler::on_vkGetPhysicalDeviceXcbPresentationSupportKHR(
-    void*,
-    VkBool32,
-    VkPhysicalDevice,
-    uint32_t,
-    xcb_connection_t*,
-    xcb_visualid_t)
-{
-    VkBool32 on_vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return = (VkBool32)0;
-    return on_vkGetPhysicalDeviceXcbPresentationSupportKHR_VkBool32_return;
-}
-#endif
-#ifdef VK_KHR_wayland_surface
-VkResult VkEventHandler::on_vkCreateWaylandSurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkWaylandSurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateWaylandSurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateWaylandSurfaceKHR_VkResult_return;
-}
-VkBool32 VkEventHandler::on_vkGetPhysicalDeviceWaylandPresentationSupportKHR(
-    void*,
-    VkBool32,
-    VkPhysicalDevice,
-    uint32_t,
-    wl_display*)
-{
-    VkBool32 on_vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return = (VkBool32)0;
-    return on_vkGetPhysicalDeviceWaylandPresentationSupportKHR_VkBool32_return;
-}
-#endif
-#ifdef VK_KHR_mir_surface
-VkResult VkEventHandler::on_vkCreateMirSurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkMirSurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateMirSurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateMirSurfaceKHR_VkResult_return;
-}
-VkBool32 VkEventHandler::on_vkGetPhysicalDeviceMirPresentationSupportKHR(
-    void*,
-    VkBool32,
-    VkPhysicalDevice,
-    uint32_t,
-    MirConnection*)
-{
-    VkBool32 on_vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return = (VkBool32)0;
-    return on_vkGetPhysicalDeviceMirPresentationSupportKHR_VkBool32_return;
-}
-#endif
-#ifdef VK_KHR_android_surface
-VkResult VkEventHandler::on_vkCreateAndroidSurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkAndroidSurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateAndroidSurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateAndroidSurfaceKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_win32_surface
-VkResult VkEventHandler::on_vkCreateWin32SurfaceKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkWin32SurfaceCreateInfoKHR*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateWin32SurfaceKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateWin32SurfaceKHR_VkResult_return;
-}
-VkBool32 VkEventHandler::on_vkGetPhysicalDeviceWin32PresentationSupportKHR(
-    void*,
-    VkBool32,
-    VkPhysicalDevice,
-    uint32_t)
-{
-    VkBool32 on_vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return = (VkBool32)0;
-    return on_vkGetPhysicalDeviceWin32PresentationSupportKHR_VkBool32_return;
-}
-#endif
-#ifdef VK_KHR_sampler_mirror_clamp_to_edge
-#endif
-#ifdef VK_KHR_multiview
-#endif
-#ifdef VK_KHR_get_physical_device_properties2
-void VkEventHandler::on_vkGetPhysicalDeviceFeatures2KHR(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceFeatures2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceProperties2KHR(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceProperties2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceFormatProperties2KHR(
-    void*,
-    VkPhysicalDevice,
-    VkFormat,
-    VkFormatProperties2*)
-{
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceImageFormatProperties2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceImageFormatInfo2*,
-    VkImageFormatProperties2*)
-{
-    VkResult on_vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceImageFormatProperties2KHR_VkResult_return;
-}
-void VkEventHandler::on_vkGetPhysicalDeviceQueueFamilyProperties2KHR(
-    void*,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkQueueFamilyProperties2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceMemoryProperties2KHR(
-    void*,
-    VkPhysicalDevice,
-    VkPhysicalDeviceMemoryProperties2*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceSparseImageFormatInfo2*,
-    uint32_t*,
-    VkSparseImageFormatProperties2*)
-{
-}
-#endif
-#ifdef VK_KHR_device_group
-void VkEventHandler::on_vkGetDeviceGroupPeerMemoryFeaturesKHR(
-    void*,
-    VkDevice,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    VkPeerMemoryFeatureFlags*)
-{
-}
-void VkEventHandler::on_vkCmdSetDeviceMaskKHR(
-    void*,
-    VkCommandBuffer,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDispatchBaseKHR(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t,
-    uint32_t)
-{
-}
-#endif
-#ifdef VK_KHR_shader_draw_parameters
-#endif
-#ifdef VK_KHR_maintenance1
-void VkEventHandler::on_vkTrimCommandPoolKHR(
-    void*,
-    VkDevice,
-    VkCommandPool,
-    VkCommandPoolTrimFlags)
-{
-}
-#endif
-#ifdef VK_KHR_device_group_creation
-VkResult VkEventHandler::on_vkEnumeratePhysicalDeviceGroupsKHR(
-    void*,
-    VkResult,
-    VkInstance,
-    uint32_t*,
-    VkPhysicalDeviceGroupProperties*)
-{
-    VkResult on_vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return = (VkResult)0;
-    return on_vkEnumeratePhysicalDeviceGroupsKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_external_memory_capabilities
-void VkEventHandler::on_vkGetPhysicalDeviceExternalBufferPropertiesKHR(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceExternalBufferInfo*,
-    VkExternalBufferProperties*)
-{
-}
-#endif
-#ifdef VK_KHR_external_memory
-#endif
-#ifdef VK_KHR_external_memory_win32
-VkResult VkEventHandler::on_vkGetMemoryWin32HandleKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkMemoryGetWin32HandleInfoKHR*,
-    HANDLE*)
-{
-    VkResult on_vkGetMemoryWin32HandleKHR_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryWin32HandleKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetMemoryWin32HandlePropertiesKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkExternalMemoryHandleTypeFlagBits,
-    HANDLE,
-    VkMemoryWin32HandlePropertiesKHR*)
-{
-    VkResult on_vkGetMemoryWin32HandlePropertiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryWin32HandlePropertiesKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_external_memory_fd
-VkResult VkEventHandler::on_vkGetMemoryFdKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkMemoryGetFdInfoKHR*,
-    int*)
-{
-    VkResult on_vkGetMemoryFdKHR_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryFdKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetMemoryFdPropertiesKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkExternalMemoryHandleTypeFlagBits,
-    int,
-    VkMemoryFdPropertiesKHR*)
-{
-    VkResult on_vkGetMemoryFdPropertiesKHR_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryFdPropertiesKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_win32_keyed_mutex
-#endif
-#ifdef VK_KHR_external_semaphore_capabilities
-void VkEventHandler::on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceExternalSemaphoreInfo*,
-    VkExternalSemaphoreProperties*)
-{
-}
-#endif
-#ifdef VK_KHR_external_semaphore
-#endif
-#ifdef VK_KHR_external_semaphore_win32
-VkResult VkEventHandler::on_vkImportSemaphoreWin32HandleKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkImportSemaphoreWin32HandleInfoKHR*)
-{
-    VkResult on_vkImportSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
-    return on_vkImportSemaphoreWin32HandleKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetSemaphoreWin32HandleKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSemaphoreGetWin32HandleInfoKHR*,
-    HANDLE*)
-{
-    VkResult on_vkGetSemaphoreWin32HandleKHR_VkResult_return = (VkResult)0;
-    return on_vkGetSemaphoreWin32HandleKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_external_semaphore_fd
-VkResult VkEventHandler::on_vkImportSemaphoreFdKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkImportSemaphoreFdInfoKHR*)
-{
-    VkResult on_vkImportSemaphoreFdKHR_VkResult_return = (VkResult)0;
-    return on_vkImportSemaphoreFdKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetSemaphoreFdKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSemaphoreGetFdInfoKHR*,
-    int*)
-{
-    VkResult on_vkGetSemaphoreFdKHR_VkResult_return = (VkResult)0;
-    return on_vkGetSemaphoreFdKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_push_descriptor
-void VkEventHandler::on_vkCmdPushDescriptorSetKHR(
-    void*,
-    VkCommandBuffer,
-    VkPipelineBindPoint,
-    VkPipelineLayout,
-    uint32_t,
-    uint32_t,
-    const VkWriteDescriptorSet*)
-{
-}
-void VkEventHandler::on_vkCmdPushDescriptorSetWithTemplateKHR(
-    void*,
-    VkCommandBuffer,
-    VkDescriptorUpdateTemplate,
-    VkPipelineLayout,
-    uint32_t,
-    const void*)
-{
-}
-#endif
-#ifdef VK_KHR_16bit_storage
-#endif
-#ifdef VK_KHR_incremental_present
-#endif
-#ifdef VK_KHR_descriptor_update_template
-VkResult VkEventHandler::on_vkCreateDescriptorUpdateTemplateKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDescriptorUpdateTemplateCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkDescriptorUpdateTemplate*)
-{
-    VkResult on_vkCreateDescriptorUpdateTemplateKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateDescriptorUpdateTemplateKHR_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDescriptorUpdateTemplateKHR(
-    void*,
-    VkDevice,
-    VkDescriptorUpdateTemplate,
-    const VkAllocationCallbacks*)
-{
-}
-void VkEventHandler::on_vkUpdateDescriptorSetWithTemplateKHR(
-    void*,
-    VkDevice,
-    VkDescriptorSet,
-    VkDescriptorUpdateTemplate,
-    const void*)
-{
-}
-#endif
-#ifdef VK_KHR_create_renderpass2
-VkResult VkEventHandler::on_vkCreateRenderPass2KHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkRenderPassCreateInfo2KHR*,
-    const VkAllocationCallbacks*,
-    VkRenderPass*)
-{
-    VkResult on_vkCreateRenderPass2KHR_VkResult_return = (VkResult)0;
-    return on_vkCreateRenderPass2KHR_VkResult_return;
-}
-void VkEventHandler::on_vkCmdBeginRenderPass2KHR(
-    void*,
-    VkCommandBuffer,
-    const VkRenderPassBeginInfo*,
-    const VkSubpassBeginInfoKHR*)
-{
-}
-void VkEventHandler::on_vkCmdNextSubpass2KHR(
-    void*,
-    VkCommandBuffer,
-    const VkSubpassBeginInfoKHR*,
-    const VkSubpassEndInfoKHR*)
-{
-}
-void VkEventHandler::on_vkCmdEndRenderPass2KHR(
-    void*,
-    VkCommandBuffer,
-    const VkSubpassEndInfoKHR*)
-{
-}
-#endif
-#ifdef VK_KHR_shared_presentable_image
-VkResult VkEventHandler::on_vkGetSwapchainStatusKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSwapchainKHR)
-{
-    VkResult on_vkGetSwapchainStatusKHR_VkResult_return = (VkResult)0;
-    return on_vkGetSwapchainStatusKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_external_fence_capabilities
-void VkEventHandler::on_vkGetPhysicalDeviceExternalFencePropertiesKHR(
-    void*,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceExternalFenceInfo*,
-    VkExternalFenceProperties*)
-{
-}
-#endif
-#ifdef VK_KHR_external_fence
-#endif
-#ifdef VK_KHR_external_fence_win32
-VkResult VkEventHandler::on_vkImportFenceWin32HandleKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkImportFenceWin32HandleInfoKHR*)
-{
-    VkResult on_vkImportFenceWin32HandleKHR_VkResult_return = (VkResult)0;
-    return on_vkImportFenceWin32HandleKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetFenceWin32HandleKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkFenceGetWin32HandleInfoKHR*,
-    HANDLE*)
-{
-    VkResult on_vkGetFenceWin32HandleKHR_VkResult_return = (VkResult)0;
-    return on_vkGetFenceWin32HandleKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_external_fence_fd
-VkResult VkEventHandler::on_vkImportFenceFdKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkImportFenceFdInfoKHR*)
-{
-    VkResult on_vkImportFenceFdKHR_VkResult_return = (VkResult)0;
-    return on_vkImportFenceFdKHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetFenceFdKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkFenceGetFdInfoKHR*,
-    int*)
-{
-    VkResult on_vkGetFenceFdKHR_VkResult_return = (VkResult)0;
-    return on_vkGetFenceFdKHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_maintenance2
-#endif
-#ifdef VK_KHR_get_surface_capabilities2
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceCapabilities2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceSurfaceInfo2KHR*,
-    VkSurfaceCapabilities2KHR*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfaceCapabilities2KHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceFormats2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const VkPhysicalDeviceSurfaceInfo2KHR*,
-    uint32_t*,
-    VkSurfaceFormat2KHR*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfaceFormats2KHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_variable_pointers
-#endif
-#ifdef VK_KHR_get_display_properties2
-VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayProperties2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkDisplayProperties2KHR*)
-{
-    VkResult on_vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceDisplayProperties2KHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    uint32_t*,
-    VkDisplayPlaneProperties2KHR*)
-{
-    VkResult on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDisplayModeProperties2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkDisplayKHR,
-    uint32_t*,
-    VkDisplayModeProperties2KHR*)
-{
-    VkResult on_vkGetDisplayModeProperties2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetDisplayModeProperties2KHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetDisplayPlaneCapabilities2KHR(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    const VkDisplayPlaneInfo2KHR*,
-    VkDisplayPlaneCapabilities2KHR*)
-{
-    VkResult on_vkGetDisplayPlaneCapabilities2KHR_VkResult_return = (VkResult)0;
-    return on_vkGetDisplayPlaneCapabilities2KHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_dedicated_allocation
-#endif
-#ifdef VK_KHR_storage_buffer_storage_class
-#endif
-#ifdef VK_KHR_relaxed_block_layout
-#endif
-#ifdef VK_KHR_get_memory_requirements2
-void VkEventHandler::on_vkGetImageMemoryRequirements2KHR(
-    void*,
-    VkDevice,
-    const VkImageMemoryRequirementsInfo2*,
-    VkMemoryRequirements2*)
-{
-}
-void VkEventHandler::on_vkGetBufferMemoryRequirements2KHR(
-    void*,
-    VkDevice,
-    const VkBufferMemoryRequirementsInfo2*,
-    VkMemoryRequirements2*)
-{
-}
-void VkEventHandler::on_vkGetImageSparseMemoryRequirements2KHR(
-    void*,
-    VkDevice,
-    const VkImageSparseMemoryRequirementsInfo2*,
-    uint32_t*,
-    VkSparseImageMemoryRequirements2*)
-{
-}
-#endif
-#ifdef VK_KHR_image_format_list
-#endif
-#ifdef VK_KHR_sampler_ycbcr_conversion
-VkResult VkEventHandler::on_vkCreateSamplerYcbcrConversionKHR(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkSamplerYcbcrConversionCreateInfo*,
-    const VkAllocationCallbacks*,
-    VkSamplerYcbcrConversion*)
-{
-    VkResult on_vkCreateSamplerYcbcrConversionKHR_VkResult_return = (VkResult)0;
-    return on_vkCreateSamplerYcbcrConversionKHR_VkResult_return;
-}
-void VkEventHandler::on_vkDestroySamplerYcbcrConversionKHR(
-    void*,
-    VkDevice,
-    VkSamplerYcbcrConversion,
-    const VkAllocationCallbacks*)
-{
-}
-#endif
-#ifdef VK_KHR_bind_memory2
-VkResult VkEventHandler::on_vkBindBufferMemory2KHR(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkBindBufferMemoryInfo*)
-{
-    VkResult on_vkBindBufferMemory2KHR_VkResult_return = (VkResult)0;
-    return on_vkBindBufferMemory2KHR_VkResult_return;
-}
-VkResult VkEventHandler::on_vkBindImageMemory2KHR(
-    void*,
-    VkResult,
-    VkDevice,
-    uint32_t,
-    const VkBindImageMemoryInfo*)
-{
-    VkResult on_vkBindImageMemory2KHR_VkResult_return = (VkResult)0;
-    return on_vkBindImageMemory2KHR_VkResult_return;
-}
-#endif
-#ifdef VK_KHR_maintenance3
-void VkEventHandler::on_vkGetDescriptorSetLayoutSupportKHR(
-    void*,
-    VkDevice,
-    const VkDescriptorSetLayoutCreateInfo*,
-    VkDescriptorSetLayoutSupport*)
-{
-}
-#endif
-#ifdef VK_KHR_draw_indirect_count
-void VkEventHandler::on_vkCmdDrawIndirectCountKHR(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDrawIndexedIndirectCountKHR(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t,
-    uint32_t)
-{
-}
-#endif
-#ifdef VK_KHR_8bit_storage
-#endif
-#ifdef VK_ANDROID_native_buffer
-VkResult VkEventHandler::on_vkGetSwapchainGrallocUsageANDROID(
-    void*,
-    VkResult,
-    VkDevice,
-    VkFormat,
-    VkImageUsageFlags,
-    int*)
-{
-    VkResult on_vkGetSwapchainGrallocUsageANDROID_VkResult_return = (VkResult)0;
-    return on_vkGetSwapchainGrallocUsageANDROID_VkResult_return;
-}
-VkResult VkEventHandler::on_vkAcquireImageANDROID(
-    void*,
-    VkResult,
-    VkDevice,
-    VkImage,
-    int,
-    VkSemaphore,
-    VkFence)
-{
-    VkResult on_vkAcquireImageANDROID_VkResult_return = (VkResult)0;
-    return on_vkAcquireImageANDROID_VkResult_return;
-}
-VkResult VkEventHandler::on_vkQueueSignalReleaseImageANDROID(
-    void*,
-    VkResult,
-    VkQueue,
-    uint32_t,
-    const VkSemaphore*,
-    VkImage,
-    int*)
-{
-    VkResult on_vkQueueSignalReleaseImageANDROID_VkResult_return = (VkResult)0;
-    return on_vkQueueSignalReleaseImageANDROID_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_debug_report
-VkResult VkEventHandler::on_vkCreateDebugReportCallbackEXT(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkDebugReportCallbackCreateInfoEXT*,
-    const VkAllocationCallbacks*,
-    VkDebugReportCallbackEXT*)
-{
-    VkResult on_vkCreateDebugReportCallbackEXT_VkResult_return = (VkResult)0;
-    return on_vkCreateDebugReportCallbackEXT_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDebugReportCallbackEXT(
-    void*,
-    VkInstance,
-    VkDebugReportCallbackEXT,
-    const VkAllocationCallbacks*)
-{
-}
-void VkEventHandler::on_vkDebugReportMessageEXT(
-    void*,
-    VkInstance,
-    VkDebugReportFlagsEXT,
-    VkDebugReportObjectTypeEXT,
-    uint64_t,
-    size_t,
-    int32_t,
-    const char*,
-    const char*)
-{
-}
-#endif
-#ifdef VK_NV_glsl_shader
-#endif
-#ifdef VK_EXT_depth_range_unrestricted
-#endif
-#ifdef VK_IMG_filter_cubic
-#endif
-#ifdef VK_AMD_rasterization_order
-#endif
-#ifdef VK_AMD_shader_trinary_minmax
-#endif
-#ifdef VK_AMD_shader_explicit_vertex_parameter
-#endif
-#ifdef VK_EXT_debug_marker
-VkResult VkEventHandler::on_vkDebugMarkerSetObjectTagEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDebugMarkerObjectTagInfoEXT*)
-{
-    VkResult on_vkDebugMarkerSetObjectTagEXT_VkResult_return = (VkResult)0;
-    return on_vkDebugMarkerSetObjectTagEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkDebugMarkerSetObjectNameEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDebugMarkerObjectNameInfoEXT*)
-{
-    VkResult on_vkDebugMarkerSetObjectNameEXT_VkResult_return = (VkResult)0;
-    return on_vkDebugMarkerSetObjectNameEXT_VkResult_return;
-}
-void VkEventHandler::on_vkCmdDebugMarkerBeginEXT(
-    void*,
-    VkCommandBuffer,
-    const VkDebugMarkerMarkerInfoEXT*)
-{
-}
-void VkEventHandler::on_vkCmdDebugMarkerEndEXT(
-    void*,
-    VkCommandBuffer)
-{
-}
-void VkEventHandler::on_vkCmdDebugMarkerInsertEXT(
-    void*,
-    VkCommandBuffer,
-    const VkDebugMarkerMarkerInfoEXT*)
-{
-}
-#endif
-#ifdef VK_AMD_gcn_shader
-#endif
-#ifdef VK_NV_dedicated_allocation
-#endif
-#ifdef VK_AMD_draw_indirect_count
-void VkEventHandler::on_vkCmdDrawIndirectCountAMD(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t,
-    uint32_t)
-{
-}
-void VkEventHandler::on_vkCmdDrawIndexedIndirectCountAMD(
-    void*,
-    VkCommandBuffer,
-    VkBuffer,
-    VkDeviceSize,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t,
-    uint32_t)
-{
-}
-#endif
-#ifdef VK_AMD_negative_viewport_height
-#endif
-#ifdef VK_AMD_gpu_shader_half_float
-#endif
-#ifdef VK_AMD_shader_ballot
-#endif
-#ifdef VK_AMD_texture_gather_bias_lod
-#endif
-#ifdef VK_AMD_shader_info
-VkResult VkEventHandler::on_vkGetShaderInfoAMD(
-    void*,
-    VkResult,
-    VkDevice,
-    VkPipeline,
-    VkShaderStageFlagBits,
-    VkShaderInfoTypeAMD,
-    size_t*,
-    void*)
-{
-    VkResult on_vkGetShaderInfoAMD_VkResult_return = (VkResult)0;
-    return on_vkGetShaderInfoAMD_VkResult_return;
-}
-#endif
-#ifdef VK_AMD_shader_image_load_store_lod
-#endif
-#ifdef VK_IMG_format_pvrtc
-#endif
-#ifdef VK_NV_external_memory_capabilities
-VkResult VkEventHandler::on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkFormat,
-    VkImageType,
-    VkImageTiling,
-    VkImageUsageFlags,
-    VkImageCreateFlags,
-    VkExternalMemoryHandleTypeFlagsNV,
-    VkExternalImageFormatPropertiesNV*)
-{
-    VkResult on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV_VkResult_return;
-}
-#endif
-#ifdef VK_NV_external_memory
-#endif
-#ifdef VK_NV_external_memory_win32
-VkResult VkEventHandler::on_vkGetMemoryWin32HandleNV(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDeviceMemory,
-    VkExternalMemoryHandleTypeFlagsNV,
-    HANDLE*)
-{
-    VkResult on_vkGetMemoryWin32HandleNV_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryWin32HandleNV_VkResult_return;
-}
-#endif
-#ifdef VK_NV_win32_keyed_mutex
-#endif
-#ifdef VK_EXT_validation_flags
-#endif
-#ifdef VK_NN_vi_surface
-VkResult VkEventHandler::on_vkCreateViSurfaceNN(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkViSurfaceCreateInfoNN*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateViSurfaceNN_VkResult_return = (VkResult)0;
-    return on_vkCreateViSurfaceNN_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_shader_subgroup_ballot
-#endif
-#ifdef VK_EXT_shader_subgroup_vote
-#endif
-#ifdef VK_EXT_conditional_rendering
-void VkEventHandler::on_vkCmdBeginConditionalRenderingEXT(
-    void*,
-    VkCommandBuffer,
-    const VkConditionalRenderingBeginInfoEXT*)
-{
-}
-void VkEventHandler::on_vkCmdEndConditionalRenderingEXT(
-    void*,
-    VkCommandBuffer)
-{
-}
-#endif
-#ifdef VK_NVX_device_generated_commands
-void VkEventHandler::on_vkCmdProcessCommandsNVX(
-    void*,
-    VkCommandBuffer,
-    const VkCmdProcessCommandsInfoNVX*)
-{
-}
-void VkEventHandler::on_vkCmdReserveSpaceForCommandsNVX(
-    void*,
-    VkCommandBuffer,
-    const VkCmdReserveSpaceForCommandsInfoNVX*)
-{
-}
-VkResult VkEventHandler::on_vkCreateIndirectCommandsLayoutNVX(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkIndirectCommandsLayoutCreateInfoNVX*,
-    const VkAllocationCallbacks*,
-    VkIndirectCommandsLayoutNVX*)
-{
-    VkResult on_vkCreateIndirectCommandsLayoutNVX_VkResult_return = (VkResult)0;
-    return on_vkCreateIndirectCommandsLayoutNVX_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyIndirectCommandsLayoutNVX(
-    void*,
-    VkDevice,
-    VkIndirectCommandsLayoutNVX,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkCreateObjectTableNVX(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkObjectTableCreateInfoNVX*,
-    const VkAllocationCallbacks*,
-    VkObjectTableNVX*)
-{
-    VkResult on_vkCreateObjectTableNVX_VkResult_return = (VkResult)0;
-    return on_vkCreateObjectTableNVX_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyObjectTableNVX(
-    void*,
-    VkDevice,
-    VkObjectTableNVX,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkRegisterObjectsNVX(
-    void*,
-    VkResult,
-    VkDevice,
-    VkObjectTableNVX,
-    uint32_t,
-    const VkObjectTableEntryNVX* const*,
-    const uint32_t*)
-{
-    VkResult on_vkRegisterObjectsNVX_VkResult_return = (VkResult)0;
-    return on_vkRegisterObjectsNVX_VkResult_return;
-}
-VkResult VkEventHandler::on_vkUnregisterObjectsNVX(
-    void*,
-    VkResult,
-    VkDevice,
-    VkObjectTableNVX,
-    uint32_t,
-    const VkObjectEntryTypeNVX*,
-    const uint32_t*)
-{
-    VkResult on_vkUnregisterObjectsNVX_VkResult_return = (VkResult)0;
-    return on_vkUnregisterObjectsNVX_VkResult_return;
-}
-void VkEventHandler::on_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
-    void*,
-    VkPhysicalDevice,
-    VkDeviceGeneratedCommandsFeaturesNVX*,
-    VkDeviceGeneratedCommandsLimitsNVX*)
-{
-}
-#endif
-#ifdef VK_NV_clip_space_w_scaling
-void VkEventHandler::on_vkCmdSetViewportWScalingNV(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    const VkViewportWScalingNV*)
-{
-}
-#endif
-#ifdef VK_EXT_direct_mode_display
-VkResult VkEventHandler::on_vkReleaseDisplayEXT(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkDisplayKHR)
-{
-    VkResult on_vkReleaseDisplayEXT_VkResult_return = (VkResult)0;
-    return on_vkReleaseDisplayEXT_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_acquire_xlib_display
-VkResult VkEventHandler::on_vkAcquireXlibDisplayEXT(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    Display*,
-    VkDisplayKHR)
-{
-    VkResult on_vkAcquireXlibDisplayEXT_VkResult_return = (VkResult)0;
-    return on_vkAcquireXlibDisplayEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetRandROutputDisplayEXT(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    Display*,
-    RROutput,
-    VkDisplayKHR*)
-{
-    VkResult on_vkGetRandROutputDisplayEXT_VkResult_return = (VkResult)0;
-    return on_vkGetRandROutputDisplayEXT_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_display_surface_counter
-VkResult VkEventHandler::on_vkGetPhysicalDeviceSurfaceCapabilities2EXT(
-    void*,
-    VkResult,
-    VkPhysicalDevice,
-    VkSurfaceKHR,
-    VkSurfaceCapabilities2EXT*)
-{
-    VkResult on_vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return = (VkResult)0;
-    return on_vkGetPhysicalDeviceSurfaceCapabilities2EXT_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_display_control
-VkResult VkEventHandler::on_vkDisplayPowerControlEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDisplayKHR,
-    const VkDisplayPowerInfoEXT*)
-{
-    VkResult on_vkDisplayPowerControlEXT_VkResult_return = (VkResult)0;
-    return on_vkDisplayPowerControlEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkRegisterDeviceEventEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDeviceEventInfoEXT*,
-    const VkAllocationCallbacks*,
-    VkFence*)
-{
-    VkResult on_vkRegisterDeviceEventEXT_VkResult_return = (VkResult)0;
-    return on_vkRegisterDeviceEventEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkRegisterDisplayEventEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDisplayKHR,
-    const VkDisplayEventInfoEXT*,
-    const VkAllocationCallbacks*,
-    VkFence*)
-{
-    VkResult on_vkRegisterDisplayEventEXT_VkResult_return = (VkResult)0;
-    return on_vkRegisterDisplayEventEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetSwapchainCounterEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSwapchainKHR,
-    VkSurfaceCounterFlagBitsEXT,
-    uint64_t*)
-{
-    VkResult on_vkGetSwapchainCounterEXT_VkResult_return = (VkResult)0;
-    return on_vkGetSwapchainCounterEXT_VkResult_return;
-}
-#endif
-#ifdef VK_GOOGLE_display_timing
-VkResult VkEventHandler::on_vkGetRefreshCycleDurationGOOGLE(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSwapchainKHR,
-    VkRefreshCycleDurationGOOGLE*)
-{
-    VkResult on_vkGetRefreshCycleDurationGOOGLE_VkResult_return = (VkResult)0;
-    return on_vkGetRefreshCycleDurationGOOGLE_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetPastPresentationTimingGOOGLE(
-    void*,
-    VkResult,
-    VkDevice,
-    VkSwapchainKHR,
-    uint32_t*,
-    VkPastPresentationTimingGOOGLE*)
-{
-    VkResult on_vkGetPastPresentationTimingGOOGLE_VkResult_return = (VkResult)0;
-    return on_vkGetPastPresentationTimingGOOGLE_VkResult_return;
-}
-#endif
-#ifdef VK_NV_sample_mask_override_coverage
-#endif
-#ifdef VK_NV_geometry_shader_passthrough
-#endif
-#ifdef VK_NV_viewport_array2
-#endif
-#ifdef VK_NVX_multiview_per_view_attributes
-#endif
-#ifdef VK_NV_viewport_swizzle
-#endif
-#ifdef VK_EXT_discard_rectangles
-void VkEventHandler::on_vkCmdSetDiscardRectangleEXT(
-    void*,
-    VkCommandBuffer,
-    uint32_t,
-    uint32_t,
-    const VkRect2D*)
-{
-}
-#endif
-#ifdef VK_EXT_conservative_rasterization
-#endif
-#ifdef VK_EXT_swapchain_colorspace
-#endif
-#ifdef VK_EXT_hdr_metadata
-void VkEventHandler::on_vkSetHdrMetadataEXT(
-    void*,
-    VkDevice,
-    uint32_t,
-    const VkSwapchainKHR*,
-    const VkHdrMetadataEXT*)
-{
-}
-#endif
-#ifdef VK_MVK_ios_surface
-VkResult VkEventHandler::on_vkCreateIOSSurfaceMVK(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkIOSSurfaceCreateInfoMVK*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateIOSSurfaceMVK_VkResult_return = (VkResult)0;
-    return on_vkCreateIOSSurfaceMVK_VkResult_return;
-}
-#endif
-#ifdef VK_MVK_macos_surface
-VkResult VkEventHandler::on_vkCreateMacOSSurfaceMVK(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkMacOSSurfaceCreateInfoMVK*,
-    const VkAllocationCallbacks*,
-    VkSurfaceKHR*)
-{
-    VkResult on_vkCreateMacOSSurfaceMVK_VkResult_return = (VkResult)0;
-    return on_vkCreateMacOSSurfaceMVK_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_external_memory_dma_buf
-#endif
-#ifdef VK_EXT_queue_family_foreign
-#endif
-#ifdef VK_EXT_debug_utils
-VkResult VkEventHandler::on_vkSetDebugUtilsObjectNameEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDebugUtilsObjectNameInfoEXT*)
-{
-    VkResult on_vkSetDebugUtilsObjectNameEXT_VkResult_return = (VkResult)0;
-    return on_vkSetDebugUtilsObjectNameEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkSetDebugUtilsObjectTagEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkDebugUtilsObjectTagInfoEXT*)
-{
-    VkResult on_vkSetDebugUtilsObjectTagEXT_VkResult_return = (VkResult)0;
-    return on_vkSetDebugUtilsObjectTagEXT_VkResult_return;
-}
-void VkEventHandler::on_vkQueueBeginDebugUtilsLabelEXT(
-    void*,
-    VkQueue,
-    const VkDebugUtilsLabelEXT*)
-{
-}
-void VkEventHandler::on_vkQueueEndDebugUtilsLabelEXT(
-    void*,
-    VkQueue)
-{
-}
-void VkEventHandler::on_vkQueueInsertDebugUtilsLabelEXT(
-    void*,
-    VkQueue,
-    const VkDebugUtilsLabelEXT*)
-{
-}
-void VkEventHandler::on_vkCmdBeginDebugUtilsLabelEXT(
-    void*,
-    VkCommandBuffer,
-    const VkDebugUtilsLabelEXT*)
-{
-}
-void VkEventHandler::on_vkCmdEndDebugUtilsLabelEXT(
-    void*,
-    VkCommandBuffer)
-{
-}
-void VkEventHandler::on_vkCmdInsertDebugUtilsLabelEXT(
-    void*,
-    VkCommandBuffer,
-    const VkDebugUtilsLabelEXT*)
-{
-}
-VkResult VkEventHandler::on_vkCreateDebugUtilsMessengerEXT(
-    void*,
-    VkResult,
-    VkInstance,
-    const VkDebugUtilsMessengerCreateInfoEXT*,
-    const VkAllocationCallbacks*,
-    VkDebugUtilsMessengerEXT*)
-{
-    VkResult on_vkCreateDebugUtilsMessengerEXT_VkResult_return = (VkResult)0;
-    return on_vkCreateDebugUtilsMessengerEXT_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyDebugUtilsMessengerEXT(
-    void*,
-    VkInstance,
-    VkDebugUtilsMessengerEXT,
-    const VkAllocationCallbacks*)
-{
-}
-void VkEventHandler::on_vkSubmitDebugUtilsMessageEXT(
-    void*,
-    VkInstance,
-    VkDebugUtilsMessageSeverityFlagBitsEXT,
-    VkDebugUtilsMessageTypeFlagsEXT,
-    const VkDebugUtilsMessengerCallbackDataEXT*)
-{
-}
-#endif
-#ifdef VK_ANDROID_external_memory_android_hardware_buffer
-VkResult VkEventHandler::on_vkGetAndroidHardwareBufferPropertiesANDROID(
-    void*,
-    VkResult,
-    VkDevice,
-    const AHardwareBuffer*,
-    VkAndroidHardwareBufferPropertiesANDROID*)
-{
-    VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return = (VkResult)0;
-    return on_vkGetAndroidHardwareBufferPropertiesANDROID_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetMemoryAndroidHardwareBufferANDROID(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkMemoryGetAndroidHardwareBufferInfoANDROID*,
-    AHardwareBuffer**)
-{
-    VkResult on_vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryAndroidHardwareBufferANDROID_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_sampler_filter_minmax
-#endif
-#ifdef VK_AMD_gpu_shader_int16
-#endif
-#ifdef VK_AMD_mixed_attachment_samples
-#endif
-#ifdef VK_AMD_shader_fragment_mask
-#endif
-#ifdef VK_EXT_shader_stencil_export
-#endif
-#ifdef VK_EXT_sample_locations
-void VkEventHandler::on_vkCmdSetSampleLocationsEXT(
-    void*,
-    VkCommandBuffer,
-    const VkSampleLocationsInfoEXT*)
-{
-}
-void VkEventHandler::on_vkGetPhysicalDeviceMultisamplePropertiesEXT(
-    void*,
-    VkPhysicalDevice,
-    VkSampleCountFlagBits,
-    VkMultisamplePropertiesEXT*)
-{
-}
-#endif
-#ifdef VK_EXT_blend_operation_advanced
-#endif
-#ifdef VK_NV_fragment_coverage_to_color
-#endif
-#ifdef VK_NV_framebuffer_mixed_samples
-#endif
-#ifdef VK_NV_fill_rectangle
-#endif
-#ifdef VK_EXT_post_depth_coverage
-#endif
-#ifdef VK_EXT_validation_cache
-VkResult VkEventHandler::on_vkCreateValidationCacheEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    const VkValidationCacheCreateInfoEXT*,
-    const VkAllocationCallbacks*,
-    VkValidationCacheEXT*)
-{
-    VkResult on_vkCreateValidationCacheEXT_VkResult_return = (VkResult)0;
-    return on_vkCreateValidationCacheEXT_VkResult_return;
-}
-void VkEventHandler::on_vkDestroyValidationCacheEXT(
-    void*,
-    VkDevice,
-    VkValidationCacheEXT,
-    const VkAllocationCallbacks*)
-{
-}
-VkResult VkEventHandler::on_vkMergeValidationCachesEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    VkValidationCacheEXT,
-    uint32_t,
-    const VkValidationCacheEXT*)
-{
-    VkResult on_vkMergeValidationCachesEXT_VkResult_return = (VkResult)0;
-    return on_vkMergeValidationCachesEXT_VkResult_return;
-}
-VkResult VkEventHandler::on_vkGetValidationCacheDataEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    VkValidationCacheEXT,
-    size_t*,
-    void*)
-{
-    VkResult on_vkGetValidationCacheDataEXT_VkResult_return = (VkResult)0;
-    return on_vkGetValidationCacheDataEXT_VkResult_return;
-}
-#endif
-#ifdef VK_EXT_descriptor_indexing
-#endif
-#ifdef VK_EXT_shader_viewport_index_layer
-#endif
-#ifdef VK_EXT_global_priority
-#endif
-#ifdef VK_EXT_external_memory_host
-VkResult VkEventHandler::on_vkGetMemoryHostPointerPropertiesEXT(
-    void*,
-    VkResult,
-    VkDevice,
-    VkExternalMemoryHandleTypeFlagBits,
-    const void*,
-    VkMemoryHostPointerPropertiesEXT*)
-{
-    VkResult on_vkGetMemoryHostPointerPropertiesEXT_VkResult_return = (VkResult)0;
-    return on_vkGetMemoryHostPointerPropertiesEXT_VkResult_return;
-}
-#endif
-#ifdef VK_AMD_buffer_marker
-void VkEventHandler::on_vkCmdWriteBufferMarkerAMD(
-    void*,
-    VkCommandBuffer,
-    VkPipelineStageFlagBits,
-    VkBuffer,
-    VkDeviceSize,
-    uint32_t)
-{
-}
-#endif
-#ifdef VK_AMD_shader_core_properties
-#endif
-#ifdef VK_EXT_vertex_attribute_divisor
-#endif
-#ifdef VK_NV_shader_subgroup_partitioned
-#endif
-#ifdef VK_NV_device_diagnostic_checkpoints
-void VkEventHandler::on_vkCmdSetCheckpointNV(
-    void*,
-    VkCommandBuffer,
-    const void*)
-{
-}
-void VkEventHandler::on_vkGetQueueCheckpointDataNV(
-    void*,
-    VkQueue,
-    uint32_t*,
-    VkCheckpointDataNV*)
-{
-}
-#endif
-#ifdef VK_GOOGLE_address_space
-VkResult VkEventHandler::on_vkMapMemoryIntoAddressSpaceGOOGLE(
-    void*,
-    VkResult,
-    VkDevice,
-    VkDeviceMemory,
-    uint64_t*)
-{
-    VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return = (VkResult)0;
-    return on_vkMapMemoryIntoAddressSpaceGOOGLE_VkResult_return;
-}
-#endif
-
-} // namespace goldfish_vk
diff --git a/system/vulkan_enc/VkEventHandler.h b/system/vulkan_enc/VkEventHandler.h
deleted file mode 100644
index 49f6d7e..0000000
--- a/system/vulkan_enc/VkEventHandler.h
+++ /dev/null
@@ -1,2226 +0,0 @@
-// Copyright (C) 2018 The Android Open Source Project
-// Copyright (C) 2018 Google Inc.
-//
-// Licensed under the Apache License, Version 2.0 (the "License");
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-//
-// http://www.apache.org/licenses/LICENSE-2.0
-//
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
-
-// Autogenerated module VkEventHandler
-// (header) generated by android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/genvk.py -registry android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/vk.xml cereal -o android/android-emugl/host/libs/libOpenglRender/vulkan/cereal
-// Please do not modify directly;
-// re-run android/scripts/generate-vulkan-sources.sh,
-// or directly from Python by defining:
-// VULKAN_REGISTRY_XML_DIR : Directory containing genvk.py and vk.xml
-// CEREAL_OUTPUT_DIR: Where to put the generated sources.
-// python3 $VULKAN_REGISTRY_XML_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
-
-#pragma once
-
-#include <vulkan/vulkan.h>
-
-
-#include "goldfish_vk_private_defs.h"
-
-
-namespace goldfish_vk {
-
-
-class VkEncoder;
-class VkEventHandler {
-public:
-    VkEventHandler();
-    virtual ~VkEventHandler();
-#ifdef VK_VERSION_1_0
-    virtual VkResult on_vkCreateInstance(
-    void* context,
-        VkResult input_result,
-        const VkInstanceCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkInstance* pInstance);
-    virtual void on_vkDestroyInstance(
-    void* context,
-        VkInstance instance,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkEnumeratePhysicalDevices(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        uint32_t* pPhysicalDeviceCount,
-        VkPhysicalDevice* pPhysicalDevices);
-    virtual void on_vkGetPhysicalDeviceFeatures(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceFeatures* pFeatures);
-    virtual void on_vkGetPhysicalDeviceFormatProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkFormat format,
-        VkFormatProperties* pFormatProperties);
-    virtual VkResult on_vkGetPhysicalDeviceImageFormatProperties(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkFormat format,
-        VkImageType type,
-        VkImageTiling tiling,
-        VkImageUsageFlags usage,
-        VkImageCreateFlags flags,
-        VkImageFormatProperties* pImageFormatProperties);
-    virtual void on_vkGetPhysicalDeviceProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties* pProperties);
-    virtual void on_vkGetPhysicalDeviceQueueFamilyProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pQueueFamilyPropertyCount,
-        VkQueueFamilyProperties* pQueueFamilyProperties);
-    virtual void on_vkGetPhysicalDeviceMemoryProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceMemoryProperties* pMemoryProperties);
-    virtual PFN_vkVoidFunction on_vkGetInstanceProcAddr(
-    void* context,
-        PFN_vkVoidFunction input_result,
-        VkInstance instance,
-        const char* pName);
-    virtual PFN_vkVoidFunction on_vkGetDeviceProcAddr(
-    void* context,
-        PFN_vkVoidFunction input_result,
-        VkDevice device,
-        const char* pName);
-    virtual VkResult on_vkCreateDevice(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkDeviceCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDevice* pDevice);
-    virtual void on_vkDestroyDevice(
-    void* context,
-        VkDevice device,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkEnumerateInstanceExtensionProperties(
-    void* context,
-        VkResult input_result,
-        const char* pLayerName,
-        uint32_t* pPropertyCount,
-        VkExtensionProperties* pProperties);
-    virtual VkResult on_vkEnumerateDeviceExtensionProperties(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const char* pLayerName,
-        uint32_t* pPropertyCount,
-        VkExtensionProperties* pProperties);
-    virtual VkResult on_vkEnumerateInstanceLayerProperties(
-    void* context,
-        VkResult input_result,
-        uint32_t* pPropertyCount,
-        VkLayerProperties* pProperties);
-    virtual VkResult on_vkEnumerateDeviceLayerProperties(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pPropertyCount,
-        VkLayerProperties* pProperties);
-    virtual void on_vkGetDeviceQueue(
-    void* context,
-        VkDevice device,
-        uint32_t queueFamilyIndex,
-        uint32_t queueIndex,
-        VkQueue* pQueue);
-    virtual VkResult on_vkQueueSubmit(
-    void* context,
-        VkResult input_result,
-        VkQueue queue,
-        uint32_t submitCount,
-        const VkSubmitInfo* pSubmits,
-        VkFence fence);
-    virtual VkResult on_vkQueueWaitIdle(
-    void* context,
-        VkResult input_result,
-        VkQueue queue);
-    virtual VkResult on_vkDeviceWaitIdle(
-    void* context,
-        VkResult input_result,
-        VkDevice device);
-    virtual VkResult on_vkAllocateMemory(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkMemoryAllocateInfo* pAllocateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDeviceMemory* pMemory);
-    virtual void on_vkFreeMemory(
-    void* context,
-        VkDevice device,
-        VkDeviceMemory memory,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkMapMemory(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceMemory memory,
-        VkDeviceSize offset,
-        VkDeviceSize size,
-        VkMemoryMapFlags flags,
-        void** ppData);
-    virtual void on_vkUnmapMemory(
-    void* context,
-        VkDevice device,
-        VkDeviceMemory memory);
-    virtual VkResult on_vkFlushMappedMemoryRanges(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t memoryRangeCount,
-        const VkMappedMemoryRange* pMemoryRanges);
-    virtual VkResult on_vkInvalidateMappedMemoryRanges(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t memoryRangeCount,
-        const VkMappedMemoryRange* pMemoryRanges);
-    virtual void on_vkGetDeviceMemoryCommitment(
-    void* context,
-        VkDevice device,
-        VkDeviceMemory memory,
-        VkDeviceSize* pCommittedMemoryInBytes);
-    virtual VkResult on_vkBindBufferMemory(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkBuffer buffer,
-        VkDeviceMemory memory,
-        VkDeviceSize memoryOffset);
-    virtual VkResult on_vkBindImageMemory(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkImage image,
-        VkDeviceMemory memory,
-        VkDeviceSize memoryOffset);
-    virtual void on_vkGetBufferMemoryRequirements(
-    void* context,
-        VkDevice device,
-        VkBuffer buffer,
-        VkMemoryRequirements* pMemoryRequirements);
-    virtual void on_vkGetImageMemoryRequirements(
-    void* context,
-        VkDevice device,
-        VkImage image,
-        VkMemoryRequirements* pMemoryRequirements);
-    virtual void on_vkGetImageSparseMemoryRequirements(
-    void* context,
-        VkDevice device,
-        VkImage image,
-        uint32_t* pSparseMemoryRequirementCount,
-        VkSparseImageMemoryRequirements* pSparseMemoryRequirements);
-    virtual void on_vkGetPhysicalDeviceSparseImageFormatProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkFormat format,
-        VkImageType type,
-        VkSampleCountFlagBits samples,
-        VkImageUsageFlags usage,
-        VkImageTiling tiling,
-        uint32_t* pPropertyCount,
-        VkSparseImageFormatProperties* pProperties);
-    virtual VkResult on_vkQueueBindSparse(
-    void* context,
-        VkResult input_result,
-        VkQueue queue,
-        uint32_t bindInfoCount,
-        const VkBindSparseInfo* pBindInfo,
-        VkFence fence);
-    virtual VkResult on_vkCreateFence(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkFenceCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkFence* pFence);
-    virtual void on_vkDestroyFence(
-    void* context,
-        VkDevice device,
-        VkFence fence,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkResetFences(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t fenceCount,
-        const VkFence* pFences);
-    virtual VkResult on_vkGetFenceStatus(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkFence fence);
-    virtual VkResult on_vkWaitForFences(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t fenceCount,
-        const VkFence* pFences,
-        VkBool32 waitAll,
-        uint64_t timeout);
-    virtual VkResult on_vkCreateSemaphore(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSemaphoreCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSemaphore* pSemaphore);
-    virtual void on_vkDestroySemaphore(
-    void* context,
-        VkDevice device,
-        VkSemaphore semaphore,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateEvent(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkEventCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkEvent* pEvent);
-    virtual void on_vkDestroyEvent(
-    void* context,
-        VkDevice device,
-        VkEvent event,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkGetEventStatus(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkEvent event);
-    virtual VkResult on_vkSetEvent(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkEvent event);
-    virtual VkResult on_vkResetEvent(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkEvent event);
-    virtual VkResult on_vkCreateQueryPool(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkQueryPoolCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkQueryPool* pQueryPool);
-    virtual void on_vkDestroyQueryPool(
-    void* context,
-        VkDevice device,
-        VkQueryPool queryPool,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkGetQueryPoolResults(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkQueryPool queryPool,
-        uint32_t firstQuery,
-        uint32_t queryCount,
-        size_t dataSize,
-        void* pData,
-        VkDeviceSize stride,
-        VkQueryResultFlags flags);
-    virtual VkResult on_vkCreateBuffer(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkBufferCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkBuffer* pBuffer);
-    virtual void on_vkDestroyBuffer(
-    void* context,
-        VkDevice device,
-        VkBuffer buffer,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateBufferView(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkBufferViewCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkBufferView* pView);
-    virtual void on_vkDestroyBufferView(
-    void* context,
-        VkDevice device,
-        VkBufferView bufferView,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateImage(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImageCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkImage* pImage);
-    virtual void on_vkDestroyImage(
-    void* context,
-        VkDevice device,
-        VkImage image,
-        const VkAllocationCallbacks* pAllocator);
-    virtual void on_vkGetImageSubresourceLayout(
-    void* context,
-        VkDevice device,
-        VkImage image,
-        const VkImageSubresource* pSubresource,
-        VkSubresourceLayout* pLayout);
-    virtual VkResult on_vkCreateImageView(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImageViewCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkImageView* pView);
-    virtual void on_vkDestroyImageView(
-    void* context,
-        VkDevice device,
-        VkImageView imageView,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateShaderModule(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkShaderModuleCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkShaderModule* pShaderModule);
-    virtual void on_vkDestroyShaderModule(
-    void* context,
-        VkDevice device,
-        VkShaderModule shaderModule,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreatePipelineCache(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkPipelineCacheCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkPipelineCache* pPipelineCache);
-    virtual void on_vkDestroyPipelineCache(
-    void* context,
-        VkDevice device,
-        VkPipelineCache pipelineCache,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkGetPipelineCacheData(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkPipelineCache pipelineCache,
-        size_t* pDataSize,
-        void* pData);
-    virtual VkResult on_vkMergePipelineCaches(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkPipelineCache dstCache,
-        uint32_t srcCacheCount,
-        const VkPipelineCache* pSrcCaches);
-    virtual VkResult on_vkCreateGraphicsPipelines(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkPipelineCache pipelineCache,
-        uint32_t createInfoCount,
-        const VkGraphicsPipelineCreateInfo* pCreateInfos,
-        const VkAllocationCallbacks* pAllocator,
-        VkPipeline* pPipelines);
-    virtual VkResult on_vkCreateComputePipelines(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkPipelineCache pipelineCache,
-        uint32_t createInfoCount,
-        const VkComputePipelineCreateInfo* pCreateInfos,
-        const VkAllocationCallbacks* pAllocator,
-        VkPipeline* pPipelines);
-    virtual void on_vkDestroyPipeline(
-    void* context,
-        VkDevice device,
-        VkPipeline pipeline,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreatePipelineLayout(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkPipelineLayoutCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkPipelineLayout* pPipelineLayout);
-    virtual void on_vkDestroyPipelineLayout(
-    void* context,
-        VkDevice device,
-        VkPipelineLayout pipelineLayout,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateSampler(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSamplerCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSampler* pSampler);
-    virtual void on_vkDestroySampler(
-    void* context,
-        VkDevice device,
-        VkSampler sampler,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateDescriptorSetLayout(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDescriptorSetLayout* pSetLayout);
-    virtual void on_vkDestroyDescriptorSetLayout(
-    void* context,
-        VkDevice device,
-        VkDescriptorSetLayout descriptorSetLayout,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateDescriptorPool(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorPoolCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDescriptorPool* pDescriptorPool);
-    virtual void on_vkDestroyDescriptorPool(
-    void* context,
-        VkDevice device,
-        VkDescriptorPool descriptorPool,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkResetDescriptorPool(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDescriptorPool descriptorPool,
-        VkDescriptorPoolResetFlags flags);
-    virtual VkResult on_vkAllocateDescriptorSets(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorSetAllocateInfo* pAllocateInfo,
-        VkDescriptorSet* pDescriptorSets);
-    virtual VkResult on_vkFreeDescriptorSets(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDescriptorPool descriptorPool,
-        uint32_t descriptorSetCount,
-        const VkDescriptorSet* pDescriptorSets);
-    virtual void on_vkUpdateDescriptorSets(
-    void* context,
-        VkDevice device,
-        uint32_t descriptorWriteCount,
-        const VkWriteDescriptorSet* pDescriptorWrites,
-        uint32_t descriptorCopyCount,
-        const VkCopyDescriptorSet* pDescriptorCopies);
-    virtual VkResult on_vkCreateFramebuffer(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkFramebufferCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkFramebuffer* pFramebuffer);
-    virtual void on_vkDestroyFramebuffer(
-    void* context,
-        VkDevice device,
-        VkFramebuffer framebuffer,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateRenderPass(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkRenderPassCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkRenderPass* pRenderPass);
-    virtual void on_vkDestroyRenderPass(
-    void* context,
-        VkDevice device,
-        VkRenderPass renderPass,
-        const VkAllocationCallbacks* pAllocator);
-    virtual void on_vkGetRenderAreaGranularity(
-    void* context,
-        VkDevice device,
-        VkRenderPass renderPass,
-        VkExtent2D* pGranularity);
-    virtual VkResult on_vkCreateCommandPool(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkCommandPoolCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkCommandPool* pCommandPool);
-    virtual void on_vkDestroyCommandPool(
-    void* context,
-        VkDevice device,
-        VkCommandPool commandPool,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkResetCommandPool(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkCommandPool commandPool,
-        VkCommandPoolResetFlags flags);
-    virtual VkResult on_vkAllocateCommandBuffers(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkCommandBufferAllocateInfo* pAllocateInfo,
-        VkCommandBuffer* pCommandBuffers);
-    virtual void on_vkFreeCommandBuffers(
-    void* context,
-        VkDevice device,
-        VkCommandPool commandPool,
-        uint32_t commandBufferCount,
-        const VkCommandBuffer* pCommandBuffers);
-    virtual VkResult on_vkBeginCommandBuffer(
-    void* context,
-        VkResult input_result,
-        VkCommandBuffer commandBuffer,
-        const VkCommandBufferBeginInfo* pBeginInfo);
-    virtual VkResult on_vkEndCommandBuffer(
-    void* context,
-        VkResult input_result,
-        VkCommandBuffer commandBuffer);
-    virtual VkResult on_vkResetCommandBuffer(
-    void* context,
-        VkResult input_result,
-        VkCommandBuffer commandBuffer,
-        VkCommandBufferResetFlags flags);
-    virtual void on_vkCmdBindPipeline(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineBindPoint pipelineBindPoint,
-        VkPipeline pipeline);
-    virtual void on_vkCmdSetViewport(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t firstViewport,
-        uint32_t viewportCount,
-        const VkViewport* pViewports);
-    virtual void on_vkCmdSetScissor(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t firstScissor,
-        uint32_t scissorCount,
-        const VkRect2D* pScissors);
-    virtual void on_vkCmdSetLineWidth(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        float lineWidth);
-    virtual void on_vkCmdSetDepthBias(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        float depthBiasConstantFactor,
-        float depthBiasClamp,
-        float depthBiasSlopeFactor);
-    virtual void on_vkCmdSetBlendConstants(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const float blendConstants);
-    virtual void on_vkCmdSetDepthBounds(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        float minDepthBounds,
-        float maxDepthBounds);
-    virtual void on_vkCmdSetStencilCompareMask(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkStencilFaceFlags faceMask,
-        uint32_t compareMask);
-    virtual void on_vkCmdSetStencilWriteMask(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkStencilFaceFlags faceMask,
-        uint32_t writeMask);
-    virtual void on_vkCmdSetStencilReference(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkStencilFaceFlags faceMask,
-        uint32_t reference);
-    virtual void on_vkCmdBindDescriptorSets(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineBindPoint pipelineBindPoint,
-        VkPipelineLayout layout,
-        uint32_t firstSet,
-        uint32_t descriptorSetCount,
-        const VkDescriptorSet* pDescriptorSets,
-        uint32_t dynamicOffsetCount,
-        const uint32_t* pDynamicOffsets);
-    virtual void on_vkCmdBindIndexBuffer(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        VkIndexType indexType);
-    virtual void on_vkCmdBindVertexBuffers(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t firstBinding,
-        uint32_t bindingCount,
-        const VkBuffer* pBuffers,
-        const VkDeviceSize* pOffsets);
-    virtual void on_vkCmdDraw(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t vertexCount,
-        uint32_t instanceCount,
-        uint32_t firstVertex,
-        uint32_t firstInstance);
-    virtual void on_vkCmdDrawIndexed(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t indexCount,
-        uint32_t instanceCount,
-        uint32_t firstIndex,
-        int32_t vertexOffset,
-        uint32_t firstInstance);
-    virtual void on_vkCmdDrawIndirect(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        uint32_t drawCount,
-        uint32_t stride);
-    virtual void on_vkCmdDrawIndexedIndirect(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        uint32_t drawCount,
-        uint32_t stride);
-    virtual void on_vkCmdDispatch(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t groupCountX,
-        uint32_t groupCountY,
-        uint32_t groupCountZ);
-    virtual void on_vkCmdDispatchIndirect(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset);
-    virtual void on_vkCmdCopyBuffer(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer srcBuffer,
-        VkBuffer dstBuffer,
-        uint32_t regionCount,
-        const VkBufferCopy* pRegions);
-    virtual void on_vkCmdCopyImage(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkImage srcImage,
-        VkImageLayout srcImageLayout,
-        VkImage dstImage,
-        VkImageLayout dstImageLayout,
-        uint32_t regionCount,
-        const VkImageCopy* pRegions);
-    virtual void on_vkCmdBlitImage(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkImage srcImage,
-        VkImageLayout srcImageLayout,
-        VkImage dstImage,
-        VkImageLayout dstImageLayout,
-        uint32_t regionCount,
-        const VkImageBlit* pRegions,
-        VkFilter filter);
-    virtual void on_vkCmdCopyBufferToImage(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer srcBuffer,
-        VkImage dstImage,
-        VkImageLayout dstImageLayout,
-        uint32_t regionCount,
-        const VkBufferImageCopy* pRegions);
-    virtual void on_vkCmdCopyImageToBuffer(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkImage srcImage,
-        VkImageLayout srcImageLayout,
-        VkBuffer dstBuffer,
-        uint32_t regionCount,
-        const VkBufferImageCopy* pRegions);
-    virtual void on_vkCmdUpdateBuffer(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer dstBuffer,
-        VkDeviceSize dstOffset,
-        VkDeviceSize dataSize,
-        const void* pData);
-    virtual void on_vkCmdFillBuffer(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer dstBuffer,
-        VkDeviceSize dstOffset,
-        VkDeviceSize size,
-        uint32_t data);
-    virtual void on_vkCmdClearColorImage(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkImage image,
-        VkImageLayout imageLayout,
-        const VkClearColorValue* pColor,
-        uint32_t rangeCount,
-        const VkImageSubresourceRange* pRanges);
-    virtual void on_vkCmdClearDepthStencilImage(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkImage image,
-        VkImageLayout imageLayout,
-        const VkClearDepthStencilValue* pDepthStencil,
-        uint32_t rangeCount,
-        const VkImageSubresourceRange* pRanges);
-    virtual void on_vkCmdClearAttachments(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t attachmentCount,
-        const VkClearAttachment* pAttachments,
-        uint32_t rectCount,
-        const VkClearRect* pRects);
-    virtual void on_vkCmdResolveImage(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkImage srcImage,
-        VkImageLayout srcImageLayout,
-        VkImage dstImage,
-        VkImageLayout dstImageLayout,
-        uint32_t regionCount,
-        const VkImageResolve* pRegions);
-    virtual void on_vkCmdSetEvent(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkEvent event,
-        VkPipelineStageFlags stageMask);
-    virtual void on_vkCmdResetEvent(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkEvent event,
-        VkPipelineStageFlags stageMask);
-    virtual void on_vkCmdWaitEvents(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t eventCount,
-        const VkEvent* pEvents,
-        VkPipelineStageFlags srcStageMask,
-        VkPipelineStageFlags dstStageMask,
-        uint32_t memoryBarrierCount,
-        const VkMemoryBarrier* pMemoryBarriers,
-        uint32_t bufferMemoryBarrierCount,
-        const VkBufferMemoryBarrier* pBufferMemoryBarriers,
-        uint32_t imageMemoryBarrierCount,
-        const VkImageMemoryBarrier* pImageMemoryBarriers);
-    virtual void on_vkCmdPipelineBarrier(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineStageFlags srcStageMask,
-        VkPipelineStageFlags dstStageMask,
-        VkDependencyFlags dependencyFlags,
-        uint32_t memoryBarrierCount,
-        const VkMemoryBarrier* pMemoryBarriers,
-        uint32_t bufferMemoryBarrierCount,
-        const VkBufferMemoryBarrier* pBufferMemoryBarriers,
-        uint32_t imageMemoryBarrierCount,
-        const VkImageMemoryBarrier* pImageMemoryBarriers);
-    virtual void on_vkCmdBeginQuery(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkQueryPool queryPool,
-        uint32_t query,
-        VkQueryControlFlags flags);
-    virtual void on_vkCmdEndQuery(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkQueryPool queryPool,
-        uint32_t query);
-    virtual void on_vkCmdResetQueryPool(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkQueryPool queryPool,
-        uint32_t firstQuery,
-        uint32_t queryCount);
-    virtual void on_vkCmdWriteTimestamp(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineStageFlagBits pipelineStage,
-        VkQueryPool queryPool,
-        uint32_t query);
-    virtual void on_vkCmdCopyQueryPoolResults(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkQueryPool queryPool,
-        uint32_t firstQuery,
-        uint32_t queryCount,
-        VkBuffer dstBuffer,
-        VkDeviceSize dstOffset,
-        VkDeviceSize stride,
-        VkQueryResultFlags flags);
-    virtual void on_vkCmdPushConstants(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineLayout layout,
-        VkShaderStageFlags stageFlags,
-        uint32_t offset,
-        uint32_t size,
-        const void* pValues);
-    virtual void on_vkCmdBeginRenderPass(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkRenderPassBeginInfo* pRenderPassBegin,
-        VkSubpassContents contents);
-    virtual void on_vkCmdNextSubpass(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkSubpassContents contents);
-    virtual void on_vkCmdEndRenderPass(
-    void* context,
-        VkCommandBuffer commandBuffer);
-    virtual void on_vkCmdExecuteCommands(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t commandBufferCount,
-        const VkCommandBuffer* pCommandBuffers);
-#endif
-#ifdef VK_VERSION_1_1
-    virtual VkResult on_vkEnumerateInstanceVersion(
-    void* context,
-        VkResult input_result,
-        uint32_t* pApiVersion);
-    virtual VkResult on_vkBindBufferMemory2(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t bindInfoCount,
-        const VkBindBufferMemoryInfo* pBindInfos);
-    virtual VkResult on_vkBindImageMemory2(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t bindInfoCount,
-        const VkBindImageMemoryInfo* pBindInfos);
-    virtual void on_vkGetDeviceGroupPeerMemoryFeatures(
-    void* context,
-        VkDevice device,
-        uint32_t heapIndex,
-        uint32_t localDeviceIndex,
-        uint32_t remoteDeviceIndex,
-        VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
-    virtual void on_vkCmdSetDeviceMask(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t deviceMask);
-    virtual void on_vkCmdDispatchBase(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t baseGroupX,
-        uint32_t baseGroupY,
-        uint32_t baseGroupZ,
-        uint32_t groupCountX,
-        uint32_t groupCountY,
-        uint32_t groupCountZ);
-    virtual VkResult on_vkEnumeratePhysicalDeviceGroups(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        uint32_t* pPhysicalDeviceGroupCount,
-        VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
-    virtual void on_vkGetImageMemoryRequirements2(
-    void* context,
-        VkDevice device,
-        const VkImageMemoryRequirementsInfo2* pInfo,
-        VkMemoryRequirements2* pMemoryRequirements);
-    virtual void on_vkGetBufferMemoryRequirements2(
-    void* context,
-        VkDevice device,
-        const VkBufferMemoryRequirementsInfo2* pInfo,
-        VkMemoryRequirements2* pMemoryRequirements);
-    virtual void on_vkGetImageSparseMemoryRequirements2(
-    void* context,
-        VkDevice device,
-        const VkImageSparseMemoryRequirementsInfo2* pInfo,
-        uint32_t* pSparseMemoryRequirementCount,
-        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
-    virtual void on_vkGetPhysicalDeviceFeatures2(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceFeatures2* pFeatures);
-    virtual void on_vkGetPhysicalDeviceProperties2(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties2* pProperties);
-    virtual void on_vkGetPhysicalDeviceFormatProperties2(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkFormat format,
-        VkFormatProperties2* pFormatProperties);
-    virtual VkResult on_vkGetPhysicalDeviceImageFormatProperties2(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
-        VkImageFormatProperties2* pImageFormatProperties);
-    virtual void on_vkGetPhysicalDeviceQueueFamilyProperties2(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pQueueFamilyPropertyCount,
-        VkQueueFamilyProperties2* pQueueFamilyProperties);
-    virtual void on_vkGetPhysicalDeviceMemoryProperties2(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
-    virtual void on_vkGetPhysicalDeviceSparseImageFormatProperties2(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
-        uint32_t* pPropertyCount,
-        VkSparseImageFormatProperties2* pProperties);
-    virtual void on_vkTrimCommandPool(
-    void* context,
-        VkDevice device,
-        VkCommandPool commandPool,
-        VkCommandPoolTrimFlags flags);
-    virtual void on_vkGetDeviceQueue2(
-    void* context,
-        VkDevice device,
-        const VkDeviceQueueInfo2* pQueueInfo,
-        VkQueue* pQueue);
-    virtual VkResult on_vkCreateSamplerYcbcrConversion(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSamplerYcbcrConversion* pYcbcrConversion);
-    virtual void on_vkDestroySamplerYcbcrConversion(
-    void* context,
-        VkDevice device,
-        VkSamplerYcbcrConversion ycbcrConversion,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateDescriptorUpdateTemplate(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
-    virtual void on_vkDestroyDescriptorUpdateTemplate(
-    void* context,
-        VkDevice device,
-        VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-        const VkAllocationCallbacks* pAllocator);
-    virtual void on_vkUpdateDescriptorSetWithTemplate(
-    void* context,
-        VkDevice device,
-        VkDescriptorSet descriptorSet,
-        VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-        const void* pData);
-    virtual void on_vkGetPhysicalDeviceExternalBufferProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
-        VkExternalBufferProperties* pExternalBufferProperties);
-    virtual void on_vkGetPhysicalDeviceExternalFenceProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
-        VkExternalFenceProperties* pExternalFenceProperties);
-    virtual void on_vkGetPhysicalDeviceExternalSemaphoreProperties(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
-        VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
-    virtual void on_vkGetDescriptorSetLayoutSupport(
-    void* context,
-        VkDevice device,
-        const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
-        VkDescriptorSetLayoutSupport* pSupport);
-#endif
-#ifdef VK_KHR_surface
-    virtual void on_vkDestroySurfaceKHR(
-    void* context,
-        VkInstance instance,
-        VkSurfaceKHR surface,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkGetPhysicalDeviceSurfaceSupportKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t queueFamilyIndex,
-        VkSurfaceKHR surface,
-        VkBool32* pSupported);
-    virtual VkResult on_vkGetPhysicalDeviceSurfaceCapabilitiesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkSurfaceKHR surface,
-        VkSurfaceCapabilitiesKHR* pSurfaceCapabilities);
-    virtual VkResult on_vkGetPhysicalDeviceSurfaceFormatsKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkSurfaceKHR surface,
-        uint32_t* pSurfaceFormatCount,
-        VkSurfaceFormatKHR* pSurfaceFormats);
-    virtual VkResult on_vkGetPhysicalDeviceSurfacePresentModesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkSurfaceKHR surface,
-        uint32_t* pPresentModeCount,
-        VkPresentModeKHR* pPresentModes);
-#endif
-#ifdef VK_KHR_swapchain
-    virtual VkResult on_vkCreateSwapchainKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSwapchainCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSwapchainKHR* pSwapchain);
-    virtual void on_vkDestroySwapchainKHR(
-    void* context,
-        VkDevice device,
-        VkSwapchainKHR swapchain,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkGetSwapchainImagesKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSwapchainKHR swapchain,
-        uint32_t* pSwapchainImageCount,
-        VkImage* pSwapchainImages);
-    virtual VkResult on_vkAcquireNextImageKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSwapchainKHR swapchain,
-        uint64_t timeout,
-        VkSemaphore semaphore,
-        VkFence fence,
-        uint32_t* pImageIndex);
-    virtual VkResult on_vkQueuePresentKHR(
-    void* context,
-        VkResult input_result,
-        VkQueue queue,
-        const VkPresentInfoKHR* pPresentInfo);
-    virtual VkResult on_vkGetDeviceGroupPresentCapabilitiesKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceGroupPresentCapabilitiesKHR* pDeviceGroupPresentCapabilities);
-    virtual VkResult on_vkGetDeviceGroupSurfacePresentModesKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSurfaceKHR surface,
-        VkDeviceGroupPresentModeFlagsKHR* pModes);
-    virtual VkResult on_vkGetPhysicalDevicePresentRectanglesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkSurfaceKHR surface,
-        uint32_t* pRectCount,
-        VkRect2D* pRects);
-    virtual VkResult on_vkAcquireNextImage2KHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkAcquireNextImageInfoKHR* pAcquireInfo,
-        uint32_t* pImageIndex);
-#endif
-#ifdef VK_KHR_display
-    virtual VkResult on_vkGetPhysicalDeviceDisplayPropertiesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pPropertyCount,
-        VkDisplayPropertiesKHR* pProperties);
-    virtual VkResult on_vkGetPhysicalDeviceDisplayPlanePropertiesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pPropertyCount,
-        VkDisplayPlanePropertiesKHR* pProperties);
-    virtual VkResult on_vkGetDisplayPlaneSupportedDisplaysKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t planeIndex,
-        uint32_t* pDisplayCount,
-        VkDisplayKHR* pDisplays);
-    virtual VkResult on_vkGetDisplayModePropertiesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkDisplayKHR display,
-        uint32_t* pPropertyCount,
-        VkDisplayModePropertiesKHR* pProperties);
-    virtual VkResult on_vkCreateDisplayModeKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkDisplayKHR display,
-        const VkDisplayModeCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDisplayModeKHR* pMode);
-    virtual VkResult on_vkGetDisplayPlaneCapabilitiesKHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkDisplayModeKHR mode,
-        uint32_t planeIndex,
-        VkDisplayPlaneCapabilitiesKHR* pCapabilities);
-    virtual VkResult on_vkCreateDisplayPlaneSurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkDisplaySurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-#endif
-#ifdef VK_KHR_display_swapchain
-    virtual VkResult on_vkCreateSharedSwapchainsKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t swapchainCount,
-        const VkSwapchainCreateInfoKHR* pCreateInfos,
-        const VkAllocationCallbacks* pAllocator,
-        VkSwapchainKHR* pSwapchains);
-#endif
-#ifdef VK_KHR_xlib_surface
-    virtual VkResult on_vkCreateXlibSurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkXlibSurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-    virtual VkBool32 on_vkGetPhysicalDeviceXlibPresentationSupportKHR(
-    void* context,
-        VkBool32 input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t queueFamilyIndex,
-        Display* dpy,
-        VisualID visualID);
-#endif
-#ifdef VK_KHR_xcb_surface
-    virtual VkResult on_vkCreateXcbSurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkXcbSurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-    virtual VkBool32 on_vkGetPhysicalDeviceXcbPresentationSupportKHR(
-    void* context,
-        VkBool32 input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t queueFamilyIndex,
-        xcb_connection_t* connection,
-        xcb_visualid_t visual_id);
-#endif
-#ifdef VK_KHR_wayland_surface
-    virtual VkResult on_vkCreateWaylandSurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkWaylandSurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-    virtual VkBool32 on_vkGetPhysicalDeviceWaylandPresentationSupportKHR(
-    void* context,
-        VkBool32 input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t queueFamilyIndex,
-        wl_display* display);
-#endif
-#ifdef VK_KHR_mir_surface
-    virtual VkResult on_vkCreateMirSurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkMirSurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-    virtual VkBool32 on_vkGetPhysicalDeviceMirPresentationSupportKHR(
-    void* context,
-        VkBool32 input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t queueFamilyIndex,
-        MirConnection* connection);
-#endif
-#ifdef VK_KHR_android_surface
-    virtual VkResult on_vkCreateAndroidSurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkAndroidSurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-#endif
-#ifdef VK_KHR_win32_surface
-    virtual VkResult on_vkCreateWin32SurfaceKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkWin32SurfaceCreateInfoKHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-    virtual VkBool32 on_vkGetPhysicalDeviceWin32PresentationSupportKHR(
-    void* context,
-        VkBool32 input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t queueFamilyIndex);
-#endif
-#ifdef VK_KHR_sampler_mirror_clamp_to_edge
-#endif
-#ifdef VK_KHR_multiview
-#endif
-#ifdef VK_KHR_get_physical_device_properties2
-    virtual void on_vkGetPhysicalDeviceFeatures2KHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceFeatures2* pFeatures);
-    virtual void on_vkGetPhysicalDeviceProperties2KHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceProperties2* pProperties);
-    virtual void on_vkGetPhysicalDeviceFormatProperties2KHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkFormat format,
-        VkFormatProperties2* pFormatProperties);
-    virtual VkResult on_vkGetPhysicalDeviceImageFormatProperties2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceImageFormatInfo2* pImageFormatInfo,
-        VkImageFormatProperties2* pImageFormatProperties);
-    virtual void on_vkGetPhysicalDeviceQueueFamilyProperties2KHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pQueueFamilyPropertyCount,
-        VkQueueFamilyProperties2* pQueueFamilyProperties);
-    virtual void on_vkGetPhysicalDeviceMemoryProperties2KHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkPhysicalDeviceMemoryProperties2* pMemoryProperties);
-    virtual void on_vkGetPhysicalDeviceSparseImageFormatProperties2KHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceSparseImageFormatInfo2* pFormatInfo,
-        uint32_t* pPropertyCount,
-        VkSparseImageFormatProperties2* pProperties);
-#endif
-#ifdef VK_KHR_device_group
-    virtual void on_vkGetDeviceGroupPeerMemoryFeaturesKHR(
-    void* context,
-        VkDevice device,
-        uint32_t heapIndex,
-        uint32_t localDeviceIndex,
-        uint32_t remoteDeviceIndex,
-        VkPeerMemoryFeatureFlags* pPeerMemoryFeatures);
-    virtual void on_vkCmdSetDeviceMaskKHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t deviceMask);
-    virtual void on_vkCmdDispatchBaseKHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t baseGroupX,
-        uint32_t baseGroupY,
-        uint32_t baseGroupZ,
-        uint32_t groupCountX,
-        uint32_t groupCountY,
-        uint32_t groupCountZ);
-#endif
-#ifdef VK_KHR_shader_draw_parameters
-#endif
-#ifdef VK_KHR_maintenance1
-    virtual void on_vkTrimCommandPoolKHR(
-    void* context,
-        VkDevice device,
-        VkCommandPool commandPool,
-        VkCommandPoolTrimFlags flags);
-#endif
-#ifdef VK_KHR_device_group_creation
-    virtual VkResult on_vkEnumeratePhysicalDeviceGroupsKHR(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        uint32_t* pPhysicalDeviceGroupCount,
-        VkPhysicalDeviceGroupProperties* pPhysicalDeviceGroupProperties);
-#endif
-#ifdef VK_KHR_external_memory_capabilities
-    virtual void on_vkGetPhysicalDeviceExternalBufferPropertiesKHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceExternalBufferInfo* pExternalBufferInfo,
-        VkExternalBufferProperties* pExternalBufferProperties);
-#endif
-#ifdef VK_KHR_external_memory
-#endif
-#ifdef VK_KHR_external_memory_win32
-    virtual VkResult on_vkGetMemoryWin32HandleKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkMemoryGetWin32HandleInfoKHR* pGetWin32HandleInfo,
-        HANDLE* pHandle);
-    virtual VkResult on_vkGetMemoryWin32HandlePropertiesKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkExternalMemoryHandleTypeFlagBits handleType,
-        HANDLE handle,
-        VkMemoryWin32HandlePropertiesKHR* pMemoryWin32HandleProperties);
-#endif
-#ifdef VK_KHR_external_memory_fd
-    virtual VkResult on_vkGetMemoryFdKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkMemoryGetFdInfoKHR* pGetFdInfo,
-        int* pFd);
-    virtual VkResult on_vkGetMemoryFdPropertiesKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkExternalMemoryHandleTypeFlagBits handleType,
-        int fd,
-        VkMemoryFdPropertiesKHR* pMemoryFdProperties);
-#endif
-#ifdef VK_KHR_win32_keyed_mutex
-#endif
-#ifdef VK_KHR_external_semaphore_capabilities
-    virtual void on_vkGetPhysicalDeviceExternalSemaphorePropertiesKHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceExternalSemaphoreInfo* pExternalSemaphoreInfo,
-        VkExternalSemaphoreProperties* pExternalSemaphoreProperties);
-#endif
-#ifdef VK_KHR_external_semaphore
-#endif
-#ifdef VK_KHR_external_semaphore_win32
-    virtual VkResult on_vkImportSemaphoreWin32HandleKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImportSemaphoreWin32HandleInfoKHR* pImportSemaphoreWin32HandleInfo);
-    virtual VkResult on_vkGetSemaphoreWin32HandleKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSemaphoreGetWin32HandleInfoKHR* pGetWin32HandleInfo,
-        HANDLE* pHandle);
-#endif
-#ifdef VK_KHR_external_semaphore_fd
-    virtual VkResult on_vkImportSemaphoreFdKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImportSemaphoreFdInfoKHR* pImportSemaphoreFdInfo);
-    virtual VkResult on_vkGetSemaphoreFdKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSemaphoreGetFdInfoKHR* pGetFdInfo,
-        int* pFd);
-#endif
-#ifdef VK_KHR_push_descriptor
-    virtual void on_vkCmdPushDescriptorSetKHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineBindPoint pipelineBindPoint,
-        VkPipelineLayout layout,
-        uint32_t set,
-        uint32_t descriptorWriteCount,
-        const VkWriteDescriptorSet* pDescriptorWrites);
-    virtual void on_vkCmdPushDescriptorSetWithTemplateKHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-        VkPipelineLayout layout,
-        uint32_t set,
-        const void* pData);
-#endif
-#ifdef VK_KHR_16bit_storage
-#endif
-#ifdef VK_KHR_incremental_present
-#endif
-#ifdef VK_KHR_descriptor_update_template
-    virtual VkResult on_vkCreateDescriptorUpdateTemplateKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDescriptorUpdateTemplateCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDescriptorUpdateTemplate* pDescriptorUpdateTemplate);
-    virtual void on_vkDestroyDescriptorUpdateTemplateKHR(
-    void* context,
-        VkDevice device,
-        VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-        const VkAllocationCallbacks* pAllocator);
-    virtual void on_vkUpdateDescriptorSetWithTemplateKHR(
-    void* context,
-        VkDevice device,
-        VkDescriptorSet descriptorSet,
-        VkDescriptorUpdateTemplate descriptorUpdateTemplate,
-        const void* pData);
-#endif
-#ifdef VK_KHR_create_renderpass2
-    virtual VkResult on_vkCreateRenderPass2KHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkRenderPassCreateInfo2KHR* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkRenderPass* pRenderPass);
-    virtual void on_vkCmdBeginRenderPass2KHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkRenderPassBeginInfo* pRenderPassBegin,
-        const VkSubpassBeginInfoKHR* pSubpassBeginInfo);
-    virtual void on_vkCmdNextSubpass2KHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkSubpassBeginInfoKHR* pSubpassBeginInfo,
-        const VkSubpassEndInfoKHR* pSubpassEndInfo);
-    virtual void on_vkCmdEndRenderPass2KHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkSubpassEndInfoKHR* pSubpassEndInfo);
-#endif
-#ifdef VK_KHR_shared_presentable_image
-    virtual VkResult on_vkGetSwapchainStatusKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSwapchainKHR swapchain);
-#endif
-#ifdef VK_KHR_external_fence_capabilities
-    virtual void on_vkGetPhysicalDeviceExternalFencePropertiesKHR(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceExternalFenceInfo* pExternalFenceInfo,
-        VkExternalFenceProperties* pExternalFenceProperties);
-#endif
-#ifdef VK_KHR_external_fence
-#endif
-#ifdef VK_KHR_external_fence_win32
-    virtual VkResult on_vkImportFenceWin32HandleKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImportFenceWin32HandleInfoKHR* pImportFenceWin32HandleInfo);
-    virtual VkResult on_vkGetFenceWin32HandleKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkFenceGetWin32HandleInfoKHR* pGetWin32HandleInfo,
-        HANDLE* pHandle);
-#endif
-#ifdef VK_KHR_external_fence_fd
-    virtual VkResult on_vkImportFenceFdKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkImportFenceFdInfoKHR* pImportFenceFdInfo);
-    virtual VkResult on_vkGetFenceFdKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkFenceGetFdInfoKHR* pGetFdInfo,
-        int* pFd);
-#endif
-#ifdef VK_KHR_maintenance2
-#endif
-#ifdef VK_KHR_get_surface_capabilities2
-    virtual VkResult on_vkGetPhysicalDeviceSurfaceCapabilities2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
-        VkSurfaceCapabilities2KHR* pSurfaceCapabilities);
-    virtual VkResult on_vkGetPhysicalDeviceSurfaceFormats2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkPhysicalDeviceSurfaceInfo2KHR* pSurfaceInfo,
-        uint32_t* pSurfaceFormatCount,
-        VkSurfaceFormat2KHR* pSurfaceFormats);
-#endif
-#ifdef VK_KHR_variable_pointers
-#endif
-#ifdef VK_KHR_get_display_properties2
-    virtual VkResult on_vkGetPhysicalDeviceDisplayProperties2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pPropertyCount,
-        VkDisplayProperties2KHR* pProperties);
-    virtual VkResult on_vkGetPhysicalDeviceDisplayPlaneProperties2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        uint32_t* pPropertyCount,
-        VkDisplayPlaneProperties2KHR* pProperties);
-    virtual VkResult on_vkGetDisplayModeProperties2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkDisplayKHR display,
-        uint32_t* pPropertyCount,
-        VkDisplayModeProperties2KHR* pProperties);
-    virtual VkResult on_vkGetDisplayPlaneCapabilities2KHR(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        const VkDisplayPlaneInfo2KHR* pDisplayPlaneInfo,
-        VkDisplayPlaneCapabilities2KHR* pCapabilities);
-#endif
-#ifdef VK_KHR_dedicated_allocation
-#endif
-#ifdef VK_KHR_storage_buffer_storage_class
-#endif
-#ifdef VK_KHR_relaxed_block_layout
-#endif
-#ifdef VK_KHR_get_memory_requirements2
-    virtual void on_vkGetImageMemoryRequirements2KHR(
-    void* context,
-        VkDevice device,
-        const VkImageMemoryRequirementsInfo2* pInfo,
-        VkMemoryRequirements2* pMemoryRequirements);
-    virtual void on_vkGetBufferMemoryRequirements2KHR(
-    void* context,
-        VkDevice device,
-        const VkBufferMemoryRequirementsInfo2* pInfo,
-        VkMemoryRequirements2* pMemoryRequirements);
-    virtual void on_vkGetImageSparseMemoryRequirements2KHR(
-    void* context,
-        VkDevice device,
-        const VkImageSparseMemoryRequirementsInfo2* pInfo,
-        uint32_t* pSparseMemoryRequirementCount,
-        VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
-#endif
-#ifdef VK_KHR_image_format_list
-#endif
-#ifdef VK_KHR_sampler_ycbcr_conversion
-    virtual VkResult on_vkCreateSamplerYcbcrConversionKHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkSamplerYcbcrConversionCreateInfo* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSamplerYcbcrConversion* pYcbcrConversion);
-    virtual void on_vkDestroySamplerYcbcrConversionKHR(
-    void* context,
-        VkDevice device,
-        VkSamplerYcbcrConversion ycbcrConversion,
-        const VkAllocationCallbacks* pAllocator);
-#endif
-#ifdef VK_KHR_bind_memory2
-    virtual VkResult on_vkBindBufferMemory2KHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t bindInfoCount,
-        const VkBindBufferMemoryInfo* pBindInfos);
-    virtual VkResult on_vkBindImageMemory2KHR(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        uint32_t bindInfoCount,
-        const VkBindImageMemoryInfo* pBindInfos);
-#endif
-#ifdef VK_KHR_maintenance3
-    virtual void on_vkGetDescriptorSetLayoutSupportKHR(
-    void* context,
-        VkDevice device,
-        const VkDescriptorSetLayoutCreateInfo* pCreateInfo,
-        VkDescriptorSetLayoutSupport* pSupport);
-#endif
-#ifdef VK_KHR_draw_indirect_count
-    virtual void on_vkCmdDrawIndirectCountKHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        VkBuffer countBuffer,
-        VkDeviceSize countBufferOffset,
-        uint32_t maxDrawCount,
-        uint32_t stride);
-    virtual void on_vkCmdDrawIndexedIndirectCountKHR(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        VkBuffer countBuffer,
-        VkDeviceSize countBufferOffset,
-        uint32_t maxDrawCount,
-        uint32_t stride);
-#endif
-#ifdef VK_KHR_8bit_storage
-#endif
-#ifdef VK_ANDROID_native_buffer
-    virtual VkResult on_vkGetSwapchainGrallocUsageANDROID(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkFormat format,
-        VkImageUsageFlags imageUsage,
-        int* grallocUsage);
-    virtual VkResult on_vkAcquireImageANDROID(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkImage image,
-        int nativeFenceFd,
-        VkSemaphore semaphore,
-        VkFence fence);
-    virtual VkResult on_vkQueueSignalReleaseImageANDROID(
-    void* context,
-        VkResult input_result,
-        VkQueue queue,
-        uint32_t waitSemaphoreCount,
-        const VkSemaphore* pWaitSemaphores,
-        VkImage image,
-        int* pNativeFenceFd);
-#endif
-#ifdef VK_EXT_debug_report
-    virtual VkResult on_vkCreateDebugReportCallbackEXT(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkDebugReportCallbackCreateInfoEXT* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDebugReportCallbackEXT* pCallback);
-    virtual void on_vkDestroyDebugReportCallbackEXT(
-    void* context,
-        VkInstance instance,
-        VkDebugReportCallbackEXT callback,
-        const VkAllocationCallbacks* pAllocator);
-    virtual void on_vkDebugReportMessageEXT(
-    void* context,
-        VkInstance instance,
-        VkDebugReportFlagsEXT flags,
-        VkDebugReportObjectTypeEXT objectType,
-        uint64_t object,
-        size_t location,
-        int32_t messageCode,
-        const char* pLayerPrefix,
-        const char* pMessage);
-#endif
-#ifdef VK_NV_glsl_shader
-#endif
-#ifdef VK_EXT_depth_range_unrestricted
-#endif
-#ifdef VK_IMG_filter_cubic
-#endif
-#ifdef VK_AMD_rasterization_order
-#endif
-#ifdef VK_AMD_shader_trinary_minmax
-#endif
-#ifdef VK_AMD_shader_explicit_vertex_parameter
-#endif
-#ifdef VK_EXT_debug_marker
-    virtual VkResult on_vkDebugMarkerSetObjectTagEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDebugMarkerObjectTagInfoEXT* pTagInfo);
-    virtual VkResult on_vkDebugMarkerSetObjectNameEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDebugMarkerObjectNameInfoEXT* pNameInfo);
-    virtual void on_vkCmdDebugMarkerBeginEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-    virtual void on_vkCmdDebugMarkerEndEXT(
-    void* context,
-        VkCommandBuffer commandBuffer);
-    virtual void on_vkCmdDebugMarkerInsertEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkDebugMarkerMarkerInfoEXT* pMarkerInfo);
-#endif
-#ifdef VK_AMD_gcn_shader
-#endif
-#ifdef VK_NV_dedicated_allocation
-#endif
-#ifdef VK_AMD_draw_indirect_count
-    virtual void on_vkCmdDrawIndirectCountAMD(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        VkBuffer countBuffer,
-        VkDeviceSize countBufferOffset,
-        uint32_t maxDrawCount,
-        uint32_t stride);
-    virtual void on_vkCmdDrawIndexedIndirectCountAMD(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkBuffer buffer,
-        VkDeviceSize offset,
-        VkBuffer countBuffer,
-        VkDeviceSize countBufferOffset,
-        uint32_t maxDrawCount,
-        uint32_t stride);
-#endif
-#ifdef VK_AMD_negative_viewport_height
-#endif
-#ifdef VK_AMD_gpu_shader_half_float
-#endif
-#ifdef VK_AMD_shader_ballot
-#endif
-#ifdef VK_AMD_texture_gather_bias_lod
-#endif
-#ifdef VK_AMD_shader_info
-    virtual VkResult on_vkGetShaderInfoAMD(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkPipeline pipeline,
-        VkShaderStageFlagBits shaderStage,
-        VkShaderInfoTypeAMD infoType,
-        size_t* pInfoSize,
-        void* pInfo);
-#endif
-#ifdef VK_AMD_shader_image_load_store_lod
-#endif
-#ifdef VK_IMG_format_pvrtc
-#endif
-#ifdef VK_NV_external_memory_capabilities
-    virtual VkResult on_vkGetPhysicalDeviceExternalImageFormatPropertiesNV(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkFormat format,
-        VkImageType type,
-        VkImageTiling tiling,
-        VkImageUsageFlags usage,
-        VkImageCreateFlags flags,
-        VkExternalMemoryHandleTypeFlagsNV externalHandleType,
-        VkExternalImageFormatPropertiesNV* pExternalImageFormatProperties);
-#endif
-#ifdef VK_NV_external_memory
-#endif
-#ifdef VK_NV_external_memory_win32
-    virtual VkResult on_vkGetMemoryWin32HandleNV(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceMemory memory,
-        VkExternalMemoryHandleTypeFlagsNV handleType,
-        HANDLE* pHandle);
-#endif
-#ifdef VK_NV_win32_keyed_mutex
-#endif
-#ifdef VK_EXT_validation_flags
-#endif
-#ifdef VK_NN_vi_surface
-    virtual VkResult on_vkCreateViSurfaceNN(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkViSurfaceCreateInfoNN* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-#endif
-#ifdef VK_EXT_shader_subgroup_ballot
-#endif
-#ifdef VK_EXT_shader_subgroup_vote
-#endif
-#ifdef VK_EXT_conditional_rendering
-    virtual void on_vkCmdBeginConditionalRenderingEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkConditionalRenderingBeginInfoEXT* pConditionalRenderingBegin);
-    virtual void on_vkCmdEndConditionalRenderingEXT(
-    void* context,
-        VkCommandBuffer commandBuffer);
-#endif
-#ifdef VK_NVX_device_generated_commands
-    virtual void on_vkCmdProcessCommandsNVX(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkCmdProcessCommandsInfoNVX* pProcessCommandsInfo);
-    virtual void on_vkCmdReserveSpaceForCommandsNVX(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkCmdReserveSpaceForCommandsInfoNVX* pReserveSpaceInfo);
-    virtual VkResult on_vkCreateIndirectCommandsLayoutNVX(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkIndirectCommandsLayoutCreateInfoNVX* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkIndirectCommandsLayoutNVX* pIndirectCommandsLayout);
-    virtual void on_vkDestroyIndirectCommandsLayoutNVX(
-    void* context,
-        VkDevice device,
-        VkIndirectCommandsLayoutNVX indirectCommandsLayout,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkCreateObjectTableNVX(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkObjectTableCreateInfoNVX* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkObjectTableNVX* pObjectTable);
-    virtual void on_vkDestroyObjectTableNVX(
-    void* context,
-        VkDevice device,
-        VkObjectTableNVX objectTable,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkRegisterObjectsNVX(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkObjectTableNVX objectTable,
-        uint32_t objectCount,
-        const VkObjectTableEntryNVX* const* ppObjectTableEntries,
-        const uint32_t* pObjectIndices);
-    virtual VkResult on_vkUnregisterObjectsNVX(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkObjectTableNVX objectTable,
-        uint32_t objectCount,
-        const VkObjectEntryTypeNVX* pObjectEntryTypes,
-        const uint32_t* pObjectIndices);
-    virtual void on_vkGetPhysicalDeviceGeneratedCommandsPropertiesNVX(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkDeviceGeneratedCommandsFeaturesNVX* pFeatures,
-        VkDeviceGeneratedCommandsLimitsNVX* pLimits);
-#endif
-#ifdef VK_NV_clip_space_w_scaling
-    virtual void on_vkCmdSetViewportWScalingNV(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t firstViewport,
-        uint32_t viewportCount,
-        const VkViewportWScalingNV* pViewportWScalings);
-#endif
-#ifdef VK_EXT_direct_mode_display
-    virtual VkResult on_vkReleaseDisplayEXT(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkDisplayKHR display);
-#endif
-#ifdef VK_EXT_acquire_xlib_display
-    virtual VkResult on_vkAcquireXlibDisplayEXT(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        Display* dpy,
-        VkDisplayKHR display);
-    virtual VkResult on_vkGetRandROutputDisplayEXT(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        Display* dpy,
-        RROutput rrOutput,
-        VkDisplayKHR* pDisplay);
-#endif
-#ifdef VK_EXT_display_surface_counter
-    virtual VkResult on_vkGetPhysicalDeviceSurfaceCapabilities2EXT(
-    void* context,
-        VkResult input_result,
-        VkPhysicalDevice physicalDevice,
-        VkSurfaceKHR surface,
-        VkSurfaceCapabilities2EXT* pSurfaceCapabilities);
-#endif
-#ifdef VK_EXT_display_control
-    virtual VkResult on_vkDisplayPowerControlEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDisplayKHR display,
-        const VkDisplayPowerInfoEXT* pDisplayPowerInfo);
-    virtual VkResult on_vkRegisterDeviceEventEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDeviceEventInfoEXT* pDeviceEventInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkFence* pFence);
-    virtual VkResult on_vkRegisterDisplayEventEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDisplayKHR display,
-        const VkDisplayEventInfoEXT* pDisplayEventInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkFence* pFence);
-    virtual VkResult on_vkGetSwapchainCounterEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSwapchainKHR swapchain,
-        VkSurfaceCounterFlagBitsEXT counter,
-        uint64_t* pCounterValue);
-#endif
-#ifdef VK_GOOGLE_display_timing
-    virtual VkResult on_vkGetRefreshCycleDurationGOOGLE(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSwapchainKHR swapchain,
-        VkRefreshCycleDurationGOOGLE* pDisplayTimingProperties);
-    virtual VkResult on_vkGetPastPresentationTimingGOOGLE(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkSwapchainKHR swapchain,
-        uint32_t* pPresentationTimingCount,
-        VkPastPresentationTimingGOOGLE* pPresentationTimings);
-#endif
-#ifdef VK_NV_sample_mask_override_coverage
-#endif
-#ifdef VK_NV_geometry_shader_passthrough
-#endif
-#ifdef VK_NV_viewport_array2
-#endif
-#ifdef VK_NVX_multiview_per_view_attributes
-#endif
-#ifdef VK_NV_viewport_swizzle
-#endif
-#ifdef VK_EXT_discard_rectangles
-    virtual void on_vkCmdSetDiscardRectangleEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        uint32_t firstDiscardRectangle,
-        uint32_t discardRectangleCount,
-        const VkRect2D* pDiscardRectangles);
-#endif
-#ifdef VK_EXT_conservative_rasterization
-#endif
-#ifdef VK_EXT_swapchain_colorspace
-#endif
-#ifdef VK_EXT_hdr_metadata
-    virtual void on_vkSetHdrMetadataEXT(
-    void* context,
-        VkDevice device,
-        uint32_t swapchainCount,
-        const VkSwapchainKHR* pSwapchains,
-        const VkHdrMetadataEXT* pMetadata);
-#endif
-#ifdef VK_MVK_ios_surface
-    virtual VkResult on_vkCreateIOSSurfaceMVK(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkIOSSurfaceCreateInfoMVK* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-#endif
-#ifdef VK_MVK_macos_surface
-    virtual VkResult on_vkCreateMacOSSurfaceMVK(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkMacOSSurfaceCreateInfoMVK* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkSurfaceKHR* pSurface);
-#endif
-#ifdef VK_EXT_external_memory_dma_buf
-#endif
-#ifdef VK_EXT_queue_family_foreign
-#endif
-#ifdef VK_EXT_debug_utils
-    virtual VkResult on_vkSetDebugUtilsObjectNameEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDebugUtilsObjectNameInfoEXT* pNameInfo);
-    virtual VkResult on_vkSetDebugUtilsObjectTagEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkDebugUtilsObjectTagInfoEXT* pTagInfo);
-    virtual void on_vkQueueBeginDebugUtilsLabelEXT(
-    void* context,
-        VkQueue queue,
-        const VkDebugUtilsLabelEXT* pLabelInfo);
-    virtual void on_vkQueueEndDebugUtilsLabelEXT(
-    void* context,
-        VkQueue queue);
-    virtual void on_vkQueueInsertDebugUtilsLabelEXT(
-    void* context,
-        VkQueue queue,
-        const VkDebugUtilsLabelEXT* pLabelInfo);
-    virtual void on_vkCmdBeginDebugUtilsLabelEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkDebugUtilsLabelEXT* pLabelInfo);
-    virtual void on_vkCmdEndDebugUtilsLabelEXT(
-    void* context,
-        VkCommandBuffer commandBuffer);
-    virtual void on_vkCmdInsertDebugUtilsLabelEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkDebugUtilsLabelEXT* pLabelInfo);
-    virtual VkResult on_vkCreateDebugUtilsMessengerEXT(
-    void* context,
-        VkResult input_result,
-        VkInstance instance,
-        const VkDebugUtilsMessengerCreateInfoEXT* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkDebugUtilsMessengerEXT* pMessenger);
-    virtual void on_vkDestroyDebugUtilsMessengerEXT(
-    void* context,
-        VkInstance instance,
-        VkDebugUtilsMessengerEXT messenger,
-        const VkAllocationCallbacks* pAllocator);
-    virtual void on_vkSubmitDebugUtilsMessageEXT(
-    void* context,
-        VkInstance instance,
-        VkDebugUtilsMessageSeverityFlagBitsEXT messageSeverity,
-        VkDebugUtilsMessageTypeFlagsEXT messageTypes,
-        const VkDebugUtilsMessengerCallbackDataEXT* pCallbackData);
-#endif
-#ifdef VK_ANDROID_external_memory_android_hardware_buffer
-    virtual VkResult on_vkGetAndroidHardwareBufferPropertiesANDROID(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const AHardwareBuffer* buffer,
-        VkAndroidHardwareBufferPropertiesANDROID* pProperties);
-    virtual VkResult on_vkGetMemoryAndroidHardwareBufferANDROID(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkMemoryGetAndroidHardwareBufferInfoANDROID* pInfo,
-        AHardwareBuffer** pBuffer);
-#endif
-#ifdef VK_EXT_sampler_filter_minmax
-#endif
-#ifdef VK_AMD_gpu_shader_int16
-#endif
-#ifdef VK_AMD_mixed_attachment_samples
-#endif
-#ifdef VK_AMD_shader_fragment_mask
-#endif
-#ifdef VK_EXT_shader_stencil_export
-#endif
-#ifdef VK_EXT_sample_locations
-    virtual void on_vkCmdSetSampleLocationsEXT(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const VkSampleLocationsInfoEXT* pSampleLocationsInfo);
-    virtual void on_vkGetPhysicalDeviceMultisamplePropertiesEXT(
-    void* context,
-        VkPhysicalDevice physicalDevice,
-        VkSampleCountFlagBits samples,
-        VkMultisamplePropertiesEXT* pMultisampleProperties);
-#endif
-#ifdef VK_EXT_blend_operation_advanced
-#endif
-#ifdef VK_NV_fragment_coverage_to_color
-#endif
-#ifdef VK_NV_framebuffer_mixed_samples
-#endif
-#ifdef VK_NV_fill_rectangle
-#endif
-#ifdef VK_EXT_post_depth_coverage
-#endif
-#ifdef VK_EXT_validation_cache
-    virtual VkResult on_vkCreateValidationCacheEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        const VkValidationCacheCreateInfoEXT* pCreateInfo,
-        const VkAllocationCallbacks* pAllocator,
-        VkValidationCacheEXT* pValidationCache);
-    virtual void on_vkDestroyValidationCacheEXT(
-    void* context,
-        VkDevice device,
-        VkValidationCacheEXT validationCache,
-        const VkAllocationCallbacks* pAllocator);
-    virtual VkResult on_vkMergeValidationCachesEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkValidationCacheEXT dstCache,
-        uint32_t srcCacheCount,
-        const VkValidationCacheEXT* pSrcCaches);
-    virtual VkResult on_vkGetValidationCacheDataEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkValidationCacheEXT validationCache,
-        size_t* pDataSize,
-        void* pData);
-#endif
-#ifdef VK_EXT_descriptor_indexing
-#endif
-#ifdef VK_EXT_shader_viewport_index_layer
-#endif
-#ifdef VK_EXT_global_priority
-#endif
-#ifdef VK_EXT_external_memory_host
-    virtual VkResult on_vkGetMemoryHostPointerPropertiesEXT(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkExternalMemoryHandleTypeFlagBits handleType,
-        const void* pHostPointer,
-        VkMemoryHostPointerPropertiesEXT* pMemoryHostPointerProperties);
-#endif
-#ifdef VK_AMD_buffer_marker
-    virtual void on_vkCmdWriteBufferMarkerAMD(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        VkPipelineStageFlagBits pipelineStage,
-        VkBuffer dstBuffer,
-        VkDeviceSize dstOffset,
-        uint32_t marker);
-#endif
-#ifdef VK_AMD_shader_core_properties
-#endif
-#ifdef VK_EXT_vertex_attribute_divisor
-#endif
-#ifdef VK_NV_shader_subgroup_partitioned
-#endif
-#ifdef VK_NV_device_diagnostic_checkpoints
-    virtual void on_vkCmdSetCheckpointNV(
-    void* context,
-        VkCommandBuffer commandBuffer,
-        const void* pCheckpointMarker);
-    virtual void on_vkGetQueueCheckpointDataNV(
-    void* context,
-        VkQueue queue,
-        uint32_t* pCheckpointDataCount,
-        VkCheckpointDataNV* pCheckpointData);
-#endif
-#ifdef VK_GOOGLE_address_space
-    virtual VkResult on_vkMapMemoryIntoAddressSpaceGOOGLE(
-    void* context,
-        VkResult input_result,
-        VkDevice device,
-        VkDeviceMemory memory,
-        uint64_t* pAddress);
-#endif
-
-};
-
-} // namespace goldfish_vk
diff --git a/system/vulkan_enc/goldfish_vk_transform.cpp b/system/vulkan_enc/goldfish_vk_transform.cpp
index 37efa94..adffc51 100644
--- a/system/vulkan_enc/goldfish_vk_transform.cpp
+++ b/system/vulkan_enc/goldfish_vk_transform.cpp
@@ -31,12 +31,16 @@
 
 namespace goldfish_vk {
 
-void transform_extension_struct(
+void transform_tohost_extension_struct(
+    ResourceTracker* resourceTracker,
+    void* structExtension_out);
+
+void transform_fromhost_extension_struct(
     ResourceTracker* resourceTracker,
     void* structExtension_out);
 
 #ifdef VK_VERSION_1_0
-void transform_VkApplicationInfo(
+void transform_tohost_VkApplicationInfo(
     ResourceTracker* resourceTracker,
     VkApplicationInfo* toTransform)
 {
@@ -44,11 +48,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkInstanceCreateInfo(
+void transform_fromhost_VkApplicationInfo(
+    ResourceTracker* resourceTracker,
+    VkApplicationInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkInstanceCreateInfo(
     ResourceTracker* resourceTracker,
     VkInstanceCreateInfo* toTransform)
 {
@@ -56,15 +72,31 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pApplicationInfo)
     {
-        transform_VkApplicationInfo(resourceTracker, (VkApplicationInfo*)(toTransform->pApplicationInfo));
+        transform_tohost_VkApplicationInfo(resourceTracker, (VkApplicationInfo*)(toTransform->pApplicationInfo));
     }
 }
 
-void transform_VkAllocationCallbacks(
+void transform_fromhost_VkInstanceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkInstanceCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pApplicationInfo)
+    {
+        transform_fromhost_VkApplicationInfo(resourceTracker, (VkApplicationInfo*)(toTransform->pApplicationInfo));
+    }
+}
+
+void transform_tohost_VkAllocationCallbacks(
     ResourceTracker* resourceTracker,
     VkAllocationCallbacks* toTransform)
 {
@@ -72,7 +104,15 @@
     (void)toTransform;
 }
 
-void transform_VkPhysicalDeviceFeatures(
+void transform_fromhost_VkAllocationCallbacks(
+    ResourceTracker* resourceTracker,
+    VkAllocationCallbacks* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPhysicalDeviceFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceFeatures* toTransform)
 {
@@ -80,7 +120,15 @@
     (void)toTransform;
 }
 
-void transform_VkFormatProperties(
+void transform_fromhost_VkPhysicalDeviceFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkFormatProperties(
     ResourceTracker* resourceTracker,
     VkFormatProperties* toTransform)
 {
@@ -88,7 +136,15 @@
     (void)toTransform;
 }
 
-void transform_VkExtent3D(
+void transform_fromhost_VkFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkFormatProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkExtent3D(
     ResourceTracker* resourceTracker,
     VkExtent3D* toTransform)
 {
@@ -96,16 +152,33 @@
     (void)toTransform;
 }
 
-void transform_VkImageFormatProperties(
+void transform_fromhost_VkExtent3D(
+    ResourceTracker* resourceTracker,
+    VkExtent3D* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkImageFormatProperties* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->maxExtent));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->maxExtent));
 }
 
-void transform_VkPhysicalDeviceLimits(
+void transform_fromhost_VkImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkImageFormatProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->maxExtent));
+}
+
+void transform_tohost_VkPhysicalDeviceLimits(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceLimits* toTransform)
 {
@@ -113,7 +186,15 @@
     (void)toTransform;
 }
 
-void transform_VkPhysicalDeviceSparseProperties(
+void transform_fromhost_VkPhysicalDeviceLimits(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceLimits* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPhysicalDeviceSparseProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSparseProperties* toTransform)
 {
@@ -121,26 +202,53 @@
     (void)toTransform;
 }
 
-void transform_VkPhysicalDeviceProperties(
+void transform_fromhost_VkPhysicalDeviceSparseProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSparseProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPhysicalDeviceProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProperties* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkPhysicalDeviceLimits(resourceTracker, (VkPhysicalDeviceLimits*)(&toTransform->limits));
-    transform_VkPhysicalDeviceSparseProperties(resourceTracker, (VkPhysicalDeviceSparseProperties*)(&toTransform->sparseProperties));
+    transform_tohost_VkPhysicalDeviceLimits(resourceTracker, (VkPhysicalDeviceLimits*)(&toTransform->limits));
+    transform_tohost_VkPhysicalDeviceSparseProperties(resourceTracker, (VkPhysicalDeviceSparseProperties*)(&toTransform->sparseProperties));
 }
 
-void transform_VkQueueFamilyProperties(
+void transform_fromhost_VkPhysicalDeviceProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkPhysicalDeviceLimits(resourceTracker, (VkPhysicalDeviceLimits*)(&toTransform->limits));
+    transform_fromhost_VkPhysicalDeviceSparseProperties(resourceTracker, (VkPhysicalDeviceSparseProperties*)(&toTransform->sparseProperties));
+}
+
+void transform_tohost_VkQueueFamilyProperties(
     ResourceTracker* resourceTracker,
     VkQueueFamilyProperties* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->minImageTransferGranularity));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->minImageTransferGranularity));
 }
 
-void transform_VkMemoryType(
+void transform_fromhost_VkQueueFamilyProperties(
+    ResourceTracker* resourceTracker,
+    VkQueueFamilyProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->minImageTransferGranularity));
+}
+
+void transform_tohost_VkMemoryType(
     ResourceTracker* resourceTracker,
     VkMemoryType* toTransform)
 {
@@ -148,7 +256,15 @@
     (void)toTransform;
 }
 
-void transform_VkMemoryHeap(
+void transform_fromhost_VkMemoryType(
+    ResourceTracker* resourceTracker,
+    VkMemoryType* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkMemoryHeap(
     ResourceTracker* resourceTracker,
     VkMemoryHeap* toTransform)
 {
@@ -156,7 +272,15 @@
     (void)toTransform;
 }
 
-void transform_VkPhysicalDeviceMemoryProperties(
+void transform_fromhost_VkMemoryHeap(
+    ResourceTracker* resourceTracker,
+    VkMemoryHeap* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPhysicalDeviceMemoryProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMemoryProperties* toTransform)
 {
@@ -164,15 +288,31 @@
     (void)toTransform;
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
     {
-        transform_VkMemoryType(resourceTracker, (VkMemoryType*)(toTransform->memoryTypes + i));
+        transform_tohost_VkMemoryType(resourceTracker, (VkMemoryType*)(toTransform->memoryTypes + i));
     }
     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
     {
-        transform_VkMemoryHeap(resourceTracker, (VkMemoryHeap*)(toTransform->memoryHeaps + i));
+        transform_tohost_VkMemoryHeap(resourceTracker, (VkMemoryHeap*)(toTransform->memoryHeaps + i));
     }
 }
 
-void transform_VkDeviceQueueCreateInfo(
+void transform_fromhost_VkPhysicalDeviceMemoryProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMemoryProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
+    {
+        transform_fromhost_VkMemoryType(resourceTracker, (VkMemoryType*)(toTransform->memoryTypes + i));
+    }
+    for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
+    {
+        transform_fromhost_VkMemoryHeap(resourceTracker, (VkMemoryHeap*)(toTransform->memoryHeaps + i));
+    }
+}
+
+void transform_tohost_VkDeviceQueueCreateInfo(
     ResourceTracker* resourceTracker,
     VkDeviceQueueCreateInfo* toTransform)
 {
@@ -180,11 +320,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceCreateInfo(
+void transform_fromhost_VkDeviceQueueCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceQueueCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceCreateInfo(
     ResourceTracker* resourceTracker,
     VkDeviceCreateInfo* toTransform)
 {
@@ -192,22 +344,45 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pQueueCreateInfos)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->queueCreateInfoCount; ++i)
         {
-            transform_VkDeviceQueueCreateInfo(resourceTracker, (VkDeviceQueueCreateInfo*)(toTransform->pQueueCreateInfos + i));
+            transform_tohost_VkDeviceQueueCreateInfo(resourceTracker, (VkDeviceQueueCreateInfo*)(toTransform->pQueueCreateInfos + i));
         }
     }
     if (toTransform->pEnabledFeatures)
     {
-        transform_VkPhysicalDeviceFeatures(resourceTracker, (VkPhysicalDeviceFeatures*)(toTransform->pEnabledFeatures));
+        transform_tohost_VkPhysicalDeviceFeatures(resourceTracker, (VkPhysicalDeviceFeatures*)(toTransform->pEnabledFeatures));
     }
 }
 
-void transform_VkExtensionProperties(
+void transform_fromhost_VkDeviceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pQueueCreateInfos)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->queueCreateInfoCount; ++i)
+        {
+            transform_fromhost_VkDeviceQueueCreateInfo(resourceTracker, (VkDeviceQueueCreateInfo*)(toTransform->pQueueCreateInfos + i));
+        }
+    }
+    if (toTransform->pEnabledFeatures)
+    {
+        transform_fromhost_VkPhysicalDeviceFeatures(resourceTracker, (VkPhysicalDeviceFeatures*)(toTransform->pEnabledFeatures));
+    }
+}
+
+void transform_tohost_VkExtensionProperties(
     ResourceTracker* resourceTracker,
     VkExtensionProperties* toTransform)
 {
@@ -215,7 +390,15 @@
     (void)toTransform;
 }
 
-void transform_VkLayerProperties(
+void transform_fromhost_VkExtensionProperties(
+    ResourceTracker* resourceTracker,
+    VkExtensionProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkLayerProperties(
     ResourceTracker* resourceTracker,
     VkLayerProperties* toTransform)
 {
@@ -223,7 +406,15 @@
     (void)toTransform;
 }
 
-void transform_VkSubmitInfo(
+void transform_fromhost_VkLayerProperties(
+    ResourceTracker* resourceTracker,
+    VkLayerProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkSubmitInfo(
     ResourceTracker* resourceTracker,
     VkSubmitInfo* toTransform)
 {
@@ -231,73 +422,147 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryAllocateInfo(
+void transform_fromhost_VkSubmitInfo(
+    ResourceTracker* resourceTracker,
+    VkSubmitInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryAllocateInfo(
     ResourceTracker* resourceTracker,
     VkMemoryAllocateInfo* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeIndex, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeIndex, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMappedMemoryRange(
+void transform_fromhost_VkMemoryAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkMemoryAllocateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeIndex, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMappedMemoryRange(
     ResourceTracker* resourceTracker,
     VkMappedMemoryRange* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, &toTransform->offset, 1, &toTransform->size, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, &toTransform->offset, 1, &toTransform->size, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryRequirements(
+void transform_fromhost_VkMappedMemoryRange(
+    ResourceTracker* resourceTracker,
+    VkMappedMemoryRange* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, &toTransform->offset, 1, &toTransform->size, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryRequirements(
     ResourceTracker* resourceTracker,
     VkMemoryRequirements* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    resourceTracker->deviceMemoryTransform_tohost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
 }
 
-void transform_VkSparseImageFormatProperties(
+void transform_fromhost_VkMemoryRequirements(
+    ResourceTracker* resourceTracker,
+    VkMemoryRequirements* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+}
+
+void transform_tohost_VkSparseImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkSparseImageFormatProperties* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageGranularity));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageGranularity));
 }
 
-void transform_VkSparseImageMemoryRequirements(
+void transform_fromhost_VkSparseImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkSparseImageFormatProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageGranularity));
+}
+
+void transform_tohost_VkSparseImageMemoryRequirements(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryRequirements* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkSparseImageFormatProperties(resourceTracker, (VkSparseImageFormatProperties*)(&toTransform->formatProperties));
+    transform_tohost_VkSparseImageFormatProperties(resourceTracker, (VkSparseImageFormatProperties*)(&toTransform->formatProperties));
 }
 
-void transform_VkSparseMemoryBind(
+void transform_fromhost_VkSparseImageMemoryRequirements(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryRequirements* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkSparseImageFormatProperties(resourceTracker, (VkSparseImageFormatProperties*)(&toTransform->formatProperties));
+}
+
+void transform_tohost_VkSparseMemoryBind(
     ResourceTracker* resourceTracker,
     VkSparseMemoryBind* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
 }
 
-void transform_VkSparseBufferMemoryBindInfo(
+void transform_fromhost_VkSparseMemoryBind(
+    ResourceTracker* resourceTracker,
+    VkSparseMemoryBind* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+}
+
+void transform_tohost_VkSparseBufferMemoryBindInfo(
     ResourceTracker* resourceTracker,
     VkSparseBufferMemoryBindInfo* toTransform)
 {
@@ -307,12 +572,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->bindCount; ++i)
         {
-            transform_VkSparseMemoryBind(resourceTracker, (VkSparseMemoryBind*)(toTransform->pBinds + i));
+            transform_tohost_VkSparseMemoryBind(resourceTracker, (VkSparseMemoryBind*)(toTransform->pBinds + i));
         }
     }
 }
 
-void transform_VkSparseImageOpaqueMemoryBindInfo(
+void transform_fromhost_VkSparseBufferMemoryBindInfo(
+    ResourceTracker* resourceTracker,
+    VkSparseBufferMemoryBindInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pBinds)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->bindCount; ++i)
+        {
+            transform_fromhost_VkSparseMemoryBind(resourceTracker, (VkSparseMemoryBind*)(toTransform->pBinds + i));
+        }
+    }
+}
+
+void transform_tohost_VkSparseImageOpaqueMemoryBindInfo(
     ResourceTracker* resourceTracker,
     VkSparseImageOpaqueMemoryBindInfo* toTransform)
 {
@@ -322,12 +602,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->bindCount; ++i)
         {
-            transform_VkSparseMemoryBind(resourceTracker, (VkSparseMemoryBind*)(toTransform->pBinds + i));
+            transform_tohost_VkSparseMemoryBind(resourceTracker, (VkSparseMemoryBind*)(toTransform->pBinds + i));
         }
     }
 }
 
-void transform_VkImageSubresource(
+void transform_fromhost_VkSparseImageOpaqueMemoryBindInfo(
+    ResourceTracker* resourceTracker,
+    VkSparseImageOpaqueMemoryBindInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pBinds)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->bindCount; ++i)
+        {
+            transform_fromhost_VkSparseMemoryBind(resourceTracker, (VkSparseMemoryBind*)(toTransform->pBinds + i));
+        }
+    }
+}
+
+void transform_tohost_VkImageSubresource(
     ResourceTracker* resourceTracker,
     VkImageSubresource* toTransform)
 {
@@ -335,7 +630,15 @@
     (void)toTransform;
 }
 
-void transform_VkOffset3D(
+void transform_fromhost_VkImageSubresource(
+    ResourceTracker* resourceTracker,
+    VkImageSubresource* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkOffset3D(
     ResourceTracker* resourceTracker,
     VkOffset3D* toTransform)
 {
@@ -343,19 +646,39 @@
     (void)toTransform;
 }
 
-void transform_VkSparseImageMemoryBind(
+void transform_fromhost_VkOffset3D(
+    ResourceTracker* resourceTracker,
+    VkOffset3D* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkSparseImageMemoryBind(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryBind* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
-    transform_VkImageSubresource(resourceTracker, (VkImageSubresource*)(&toTransform->subresource));
-    transform_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->offset));
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    transform_tohost_VkImageSubresource(resourceTracker, (VkImageSubresource*)(&toTransform->subresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->offset));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
 }
 
-void transform_VkSparseImageMemoryBindInfo(
+void transform_fromhost_VkSparseImageMemoryBind(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryBind* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    transform_fromhost_VkImageSubresource(resourceTracker, (VkImageSubresource*)(&toTransform->subresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->offset));
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+}
+
+void transform_tohost_VkSparseImageMemoryBindInfo(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryBindInfo* toTransform)
 {
@@ -365,12 +688,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->bindCount; ++i)
         {
-            transform_VkSparseImageMemoryBind(resourceTracker, (VkSparseImageMemoryBind*)(toTransform->pBinds + i));
+            transform_tohost_VkSparseImageMemoryBind(resourceTracker, (VkSparseImageMemoryBind*)(toTransform->pBinds + i));
         }
     }
 }
 
-void transform_VkBindSparseInfo(
+void transform_fromhost_VkSparseImageMemoryBindInfo(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryBindInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pBinds)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->bindCount; ++i)
+        {
+            transform_fromhost_VkSparseImageMemoryBind(resourceTracker, (VkSparseImageMemoryBind*)(toTransform->pBinds + i));
+        }
+    }
+}
+
+void transform_tohost_VkBindSparseInfo(
     ResourceTracker* resourceTracker,
     VkBindSparseInfo* toTransform)
 {
@@ -378,32 +716,65 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pBufferBinds)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->bufferBindCount; ++i)
         {
-            transform_VkSparseBufferMemoryBindInfo(resourceTracker, (VkSparseBufferMemoryBindInfo*)(toTransform->pBufferBinds + i));
+            transform_tohost_VkSparseBufferMemoryBindInfo(resourceTracker, (VkSparseBufferMemoryBindInfo*)(toTransform->pBufferBinds + i));
         }
     }
     if (toTransform->pImageOpaqueBinds)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->imageOpaqueBindCount; ++i)
         {
-            transform_VkSparseImageOpaqueMemoryBindInfo(resourceTracker, (VkSparseImageOpaqueMemoryBindInfo*)(toTransform->pImageOpaqueBinds + i));
+            transform_tohost_VkSparseImageOpaqueMemoryBindInfo(resourceTracker, (VkSparseImageOpaqueMemoryBindInfo*)(toTransform->pImageOpaqueBinds + i));
         }
     }
     if (toTransform->pImageBinds)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->imageBindCount; ++i)
         {
-            transform_VkSparseImageMemoryBindInfo(resourceTracker, (VkSparseImageMemoryBindInfo*)(toTransform->pImageBinds + i));
+            transform_tohost_VkSparseImageMemoryBindInfo(resourceTracker, (VkSparseImageMemoryBindInfo*)(toTransform->pImageBinds + i));
         }
     }
 }
 
-void transform_VkFenceCreateInfo(
+void transform_fromhost_VkBindSparseInfo(
+    ResourceTracker* resourceTracker,
+    VkBindSparseInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pBufferBinds)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->bufferBindCount; ++i)
+        {
+            transform_fromhost_VkSparseBufferMemoryBindInfo(resourceTracker, (VkSparseBufferMemoryBindInfo*)(toTransform->pBufferBinds + i));
+        }
+    }
+    if (toTransform->pImageOpaqueBinds)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->imageOpaqueBindCount; ++i)
+        {
+            transform_fromhost_VkSparseImageOpaqueMemoryBindInfo(resourceTracker, (VkSparseImageOpaqueMemoryBindInfo*)(toTransform->pImageOpaqueBinds + i));
+        }
+    }
+    if (toTransform->pImageBinds)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->imageBindCount; ++i)
+        {
+            transform_fromhost_VkSparseImageMemoryBindInfo(resourceTracker, (VkSparseImageMemoryBindInfo*)(toTransform->pImageBinds + i));
+        }
+    }
+}
+
+void transform_tohost_VkFenceCreateInfo(
     ResourceTracker* resourceTracker,
     VkFenceCreateInfo* toTransform)
 {
@@ -411,11 +782,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSemaphoreCreateInfo(
+void transform_fromhost_VkFenceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkFenceCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSemaphoreCreateInfo(
     ResourceTracker* resourceTracker,
     VkSemaphoreCreateInfo* toTransform)
 {
@@ -423,11 +806,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkEventCreateInfo(
+void transform_fromhost_VkSemaphoreCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkSemaphoreCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkEventCreateInfo(
     ResourceTracker* resourceTracker,
     VkEventCreateInfo* toTransform)
 {
@@ -435,11 +830,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkQueryPoolCreateInfo(
+void transform_fromhost_VkEventCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkEventCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkQueryPoolCreateInfo(
     ResourceTracker* resourceTracker,
     VkQueryPoolCreateInfo* toTransform)
 {
@@ -447,11 +854,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBufferCreateInfo(
+void transform_fromhost_VkQueryPoolCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkQueryPoolCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBufferCreateInfo(
     ResourceTracker* resourceTracker,
     VkBufferCreateInfo* toTransform)
 {
@@ -459,11 +878,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBufferViewCreateInfo(
+void transform_fromhost_VkBufferCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkBufferCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBufferViewCreateInfo(
     ResourceTracker* resourceTracker,
     VkBufferViewCreateInfo* toTransform)
 {
@@ -471,11 +902,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkImageCreateInfo(
+void transform_fromhost_VkBufferViewCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkBufferViewCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImageCreateInfo(
     ResourceTracker* resourceTracker,
     VkImageCreateInfo* toTransform)
 {
@@ -483,12 +926,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
 }
 
-void transform_VkSubresourceLayout(
+void transform_fromhost_VkImageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkImageCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+}
+
+void transform_tohost_VkSubresourceLayout(
     ResourceTracker* resourceTracker,
     VkSubresourceLayout* toTransform)
 {
@@ -496,7 +952,15 @@
     (void)toTransform;
 }
 
-void transform_VkComponentMapping(
+void transform_fromhost_VkSubresourceLayout(
+    ResourceTracker* resourceTracker,
+    VkSubresourceLayout* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkComponentMapping(
     ResourceTracker* resourceTracker,
     VkComponentMapping* toTransform)
 {
@@ -504,7 +968,15 @@
     (void)toTransform;
 }
 
-void transform_VkImageSubresourceRange(
+void transform_fromhost_VkComponentMapping(
+    ResourceTracker* resourceTracker,
+    VkComponentMapping* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkImageSubresourceRange(
     ResourceTracker* resourceTracker,
     VkImageSubresourceRange* toTransform)
 {
@@ -512,7 +984,15 @@
     (void)toTransform;
 }
 
-void transform_VkImageViewCreateInfo(
+void transform_fromhost_VkImageSubresourceRange(
+    ResourceTracker* resourceTracker,
+    VkImageSubresourceRange* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkImageViewCreateInfo(
     ResourceTracker* resourceTracker,
     VkImageViewCreateInfo* toTransform)
 {
@@ -520,13 +1000,27 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->components));
-    transform_VkImageSubresourceRange(resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
+    transform_tohost_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->components));
+    transform_tohost_VkImageSubresourceRange(resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
 }
 
-void transform_VkShaderModuleCreateInfo(
+void transform_fromhost_VkImageViewCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkImageViewCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->components));
+    transform_fromhost_VkImageSubresourceRange(resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
+}
+
+void transform_tohost_VkShaderModuleCreateInfo(
     ResourceTracker* resourceTracker,
     VkShaderModuleCreateInfo* toTransform)
 {
@@ -534,11 +1028,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineCacheCreateInfo(
+void transform_fromhost_VkShaderModuleCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkShaderModuleCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineCacheCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineCacheCreateInfo* toTransform)
 {
@@ -546,11 +1052,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSpecializationMapEntry(
+void transform_fromhost_VkPipelineCacheCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineCacheCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSpecializationMapEntry(
     ResourceTracker* resourceTracker,
     VkSpecializationMapEntry* toTransform)
 {
@@ -558,7 +1076,15 @@
     (void)toTransform;
 }
 
-void transform_VkSpecializationInfo(
+void transform_fromhost_VkSpecializationMapEntry(
+    ResourceTracker* resourceTracker,
+    VkSpecializationMapEntry* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkSpecializationInfo(
     ResourceTracker* resourceTracker,
     VkSpecializationInfo* toTransform)
 {
@@ -568,12 +1094,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->mapEntryCount; ++i)
         {
-            transform_VkSpecializationMapEntry(resourceTracker, (VkSpecializationMapEntry*)(toTransform->pMapEntries + i));
+            transform_tohost_VkSpecializationMapEntry(resourceTracker, (VkSpecializationMapEntry*)(toTransform->pMapEntries + i));
         }
     }
 }
 
-void transform_VkPipelineShaderStageCreateInfo(
+void transform_fromhost_VkSpecializationInfo(
+    ResourceTracker* resourceTracker,
+    VkSpecializationInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pMapEntries)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->mapEntryCount; ++i)
+        {
+            transform_fromhost_VkSpecializationMapEntry(resourceTracker, (VkSpecializationMapEntry*)(toTransform->pMapEntries + i));
+        }
+    }
+}
+
+void transform_tohost_VkPipelineShaderStageCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineShaderStageCreateInfo* toTransform)
 {
@@ -581,15 +1122,31 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pSpecializationInfo)
     {
-        transform_VkSpecializationInfo(resourceTracker, (VkSpecializationInfo*)(toTransform->pSpecializationInfo));
+        transform_tohost_VkSpecializationInfo(resourceTracker, (VkSpecializationInfo*)(toTransform->pSpecializationInfo));
     }
 }
 
-void transform_VkVertexInputBindingDescription(
+void transform_fromhost_VkPipelineShaderStageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineShaderStageCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pSpecializationInfo)
+    {
+        transform_fromhost_VkSpecializationInfo(resourceTracker, (VkSpecializationInfo*)(toTransform->pSpecializationInfo));
+    }
+}
+
+void transform_tohost_VkVertexInputBindingDescription(
     ResourceTracker* resourceTracker,
     VkVertexInputBindingDescription* toTransform)
 {
@@ -597,7 +1154,15 @@
     (void)toTransform;
 }
 
-void transform_VkVertexInputAttributeDescription(
+void transform_fromhost_VkVertexInputBindingDescription(
+    ResourceTracker* resourceTracker,
+    VkVertexInputBindingDescription* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkVertexInputAttributeDescription(
     ResourceTracker* resourceTracker,
     VkVertexInputAttributeDescription* toTransform)
 {
@@ -605,7 +1170,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineVertexInputStateCreateInfo(
+void transform_fromhost_VkVertexInputAttributeDescription(
+    ResourceTracker* resourceTracker,
+    VkVertexInputAttributeDescription* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineVertexInputStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineVertexInputStateCreateInfo* toTransform)
 {
@@ -613,25 +1186,51 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pVertexBindingDescriptions)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->vertexBindingDescriptionCount; ++i)
         {
-            transform_VkVertexInputBindingDescription(resourceTracker, (VkVertexInputBindingDescription*)(toTransform->pVertexBindingDescriptions + i));
+            transform_tohost_VkVertexInputBindingDescription(resourceTracker, (VkVertexInputBindingDescription*)(toTransform->pVertexBindingDescriptions + i));
         }
     }
     if (toTransform->pVertexAttributeDescriptions)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->vertexAttributeDescriptionCount; ++i)
         {
-            transform_VkVertexInputAttributeDescription(resourceTracker, (VkVertexInputAttributeDescription*)(toTransform->pVertexAttributeDescriptions + i));
+            transform_tohost_VkVertexInputAttributeDescription(resourceTracker, (VkVertexInputAttributeDescription*)(toTransform->pVertexAttributeDescriptions + i));
         }
     }
 }
 
-void transform_VkPipelineInputAssemblyStateCreateInfo(
+void transform_fromhost_VkPipelineVertexInputStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineVertexInputStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pVertexBindingDescriptions)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->vertexBindingDescriptionCount; ++i)
+        {
+            transform_fromhost_VkVertexInputBindingDescription(resourceTracker, (VkVertexInputBindingDescription*)(toTransform->pVertexBindingDescriptions + i));
+        }
+    }
+    if (toTransform->pVertexAttributeDescriptions)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->vertexAttributeDescriptionCount; ++i)
+        {
+            transform_fromhost_VkVertexInputAttributeDescription(resourceTracker, (VkVertexInputAttributeDescription*)(toTransform->pVertexAttributeDescriptions + i));
+        }
+    }
+}
+
+void transform_tohost_VkPipelineInputAssemblyStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineInputAssemblyStateCreateInfo* toTransform)
 {
@@ -639,11 +1238,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineTessellationStateCreateInfo(
+void transform_fromhost_VkPipelineInputAssemblyStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineInputAssemblyStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineTessellationStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineTessellationStateCreateInfo* toTransform)
 {
@@ -651,11 +1262,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkViewport(
+void transform_fromhost_VkPipelineTessellationStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineTessellationStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkViewport(
     ResourceTracker* resourceTracker,
     VkViewport* toTransform)
 {
@@ -663,7 +1286,15 @@
     (void)toTransform;
 }
 
-void transform_VkOffset2D(
+void transform_fromhost_VkViewport(
+    ResourceTracker* resourceTracker,
+    VkViewport* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkOffset2D(
     ResourceTracker* resourceTracker,
     VkOffset2D* toTransform)
 {
@@ -671,7 +1302,15 @@
     (void)toTransform;
 }
 
-void transform_VkExtent2D(
+void transform_fromhost_VkOffset2D(
+    ResourceTracker* resourceTracker,
+    VkOffset2D* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkExtent2D(
     ResourceTracker* resourceTracker,
     VkExtent2D* toTransform)
 {
@@ -679,17 +1318,35 @@
     (void)toTransform;
 }
 
-void transform_VkRect2D(
+void transform_fromhost_VkExtent2D(
+    ResourceTracker* resourceTracker,
+    VkExtent2D* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkRect2D(
     ResourceTracker* resourceTracker,
     VkRect2D* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->offset));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->extent));
+    transform_tohost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->offset));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->extent));
 }
 
-void transform_VkPipelineViewportStateCreateInfo(
+void transform_fromhost_VkRect2D(
+    ResourceTracker* resourceTracker,
+    VkRect2D* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->offset));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->extent));
+}
+
+void transform_tohost_VkPipelineViewportStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineViewportStateCreateInfo* toTransform)
 {
@@ -697,25 +1354,51 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pViewports)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->viewportCount; ++i)
         {
-            transform_VkViewport(resourceTracker, (VkViewport*)(toTransform->pViewports + i));
+            transform_tohost_VkViewport(resourceTracker, (VkViewport*)(toTransform->pViewports + i));
         }
     }
     if (toTransform->pScissors)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->scissorCount; ++i)
         {
-            transform_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pScissors + i));
+            transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pScissors + i));
         }
     }
 }
 
-void transform_VkPipelineRasterizationStateCreateInfo(
+void transform_fromhost_VkPipelineViewportStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineViewportStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pViewports)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->viewportCount; ++i)
+        {
+            transform_fromhost_VkViewport(resourceTracker, (VkViewport*)(toTransform->pViewports + i));
+        }
+    }
+    if (toTransform->pScissors)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->scissorCount; ++i)
+        {
+            transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pScissors + i));
+        }
+    }
+}
+
+void transform_tohost_VkPipelineRasterizationStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineRasterizationStateCreateInfo* toTransform)
 {
@@ -723,11 +1406,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineMultisampleStateCreateInfo(
+void transform_fromhost_VkPipelineRasterizationStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineRasterizationStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineMultisampleStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineMultisampleStateCreateInfo* toTransform)
 {
@@ -735,11 +1430,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkStencilOpState(
+void transform_fromhost_VkPipelineMultisampleStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineMultisampleStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkStencilOpState(
     ResourceTracker* resourceTracker,
     VkStencilOpState* toTransform)
 {
@@ -747,7 +1454,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineDepthStencilStateCreateInfo(
+void transform_fromhost_VkStencilOpState(
+    ResourceTracker* resourceTracker,
+    VkStencilOpState* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineDepthStencilStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineDepthStencilStateCreateInfo* toTransform)
 {
@@ -755,13 +1470,27 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkStencilOpState(resourceTracker, (VkStencilOpState*)(&toTransform->front));
-    transform_VkStencilOpState(resourceTracker, (VkStencilOpState*)(&toTransform->back));
+    transform_tohost_VkStencilOpState(resourceTracker, (VkStencilOpState*)(&toTransform->front));
+    transform_tohost_VkStencilOpState(resourceTracker, (VkStencilOpState*)(&toTransform->back));
 }
 
-void transform_VkPipelineColorBlendAttachmentState(
+void transform_fromhost_VkPipelineDepthStencilStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineDepthStencilStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkStencilOpState(resourceTracker, (VkStencilOpState*)(&toTransform->front));
+    transform_fromhost_VkStencilOpState(resourceTracker, (VkStencilOpState*)(&toTransform->back));
+}
+
+void transform_tohost_VkPipelineColorBlendAttachmentState(
     ResourceTracker* resourceTracker,
     VkPipelineColorBlendAttachmentState* toTransform)
 {
@@ -769,7 +1498,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineColorBlendStateCreateInfo(
+void transform_fromhost_VkPipelineColorBlendAttachmentState(
+    ResourceTracker* resourceTracker,
+    VkPipelineColorBlendAttachmentState* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineColorBlendStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineColorBlendStateCreateInfo* toTransform)
 {
@@ -777,18 +1514,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentCount; ++i)
         {
-            transform_VkPipelineColorBlendAttachmentState(resourceTracker, (VkPipelineColorBlendAttachmentState*)(toTransform->pAttachments + i));
+            transform_tohost_VkPipelineColorBlendAttachmentState(resourceTracker, (VkPipelineColorBlendAttachmentState*)(toTransform->pAttachments + i));
         }
     }
 }
 
-void transform_VkPipelineDynamicStateCreateInfo(
+void transform_fromhost_VkPipelineColorBlendStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineColorBlendStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentCount; ++i)
+        {
+            transform_fromhost_VkPipelineColorBlendAttachmentState(resourceTracker, (VkPipelineColorBlendAttachmentState*)(toTransform->pAttachments + i));
+        }
+    }
+}
+
+void transform_tohost_VkPipelineDynamicStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineDynamicStateCreateInfo* toTransform)
 {
@@ -796,11 +1552,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkGraphicsPipelineCreateInfo(
+void transform_fromhost_VkPipelineDynamicStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineDynamicStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkGraphicsPipelineCreateInfo(
     ResourceTracker* resourceTracker,
     VkGraphicsPipelineCreateInfo* toTransform)
 {
@@ -808,54 +1576,109 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pStages)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->stageCount; ++i)
         {
-            transform_VkPipelineShaderStageCreateInfo(resourceTracker, (VkPipelineShaderStageCreateInfo*)(toTransform->pStages + i));
+            transform_tohost_VkPipelineShaderStageCreateInfo(resourceTracker, (VkPipelineShaderStageCreateInfo*)(toTransform->pStages + i));
         }
     }
     if (toTransform->pVertexInputState)
     {
-        transform_VkPipelineVertexInputStateCreateInfo(resourceTracker, (VkPipelineVertexInputStateCreateInfo*)(toTransform->pVertexInputState));
+        transform_tohost_VkPipelineVertexInputStateCreateInfo(resourceTracker, (VkPipelineVertexInputStateCreateInfo*)(toTransform->pVertexInputState));
     }
     if (toTransform->pInputAssemblyState)
     {
-        transform_VkPipelineInputAssemblyStateCreateInfo(resourceTracker, (VkPipelineInputAssemblyStateCreateInfo*)(toTransform->pInputAssemblyState));
+        transform_tohost_VkPipelineInputAssemblyStateCreateInfo(resourceTracker, (VkPipelineInputAssemblyStateCreateInfo*)(toTransform->pInputAssemblyState));
     }
     if (toTransform->pTessellationState)
     {
-        transform_VkPipelineTessellationStateCreateInfo(resourceTracker, (VkPipelineTessellationStateCreateInfo*)(toTransform->pTessellationState));
+        transform_tohost_VkPipelineTessellationStateCreateInfo(resourceTracker, (VkPipelineTessellationStateCreateInfo*)(toTransform->pTessellationState));
     }
     if (toTransform->pViewportState)
     {
-        transform_VkPipelineViewportStateCreateInfo(resourceTracker, (VkPipelineViewportStateCreateInfo*)(toTransform->pViewportState));
+        transform_tohost_VkPipelineViewportStateCreateInfo(resourceTracker, (VkPipelineViewportStateCreateInfo*)(toTransform->pViewportState));
     }
     if (toTransform->pRasterizationState)
     {
-        transform_VkPipelineRasterizationStateCreateInfo(resourceTracker, (VkPipelineRasterizationStateCreateInfo*)(toTransform->pRasterizationState));
+        transform_tohost_VkPipelineRasterizationStateCreateInfo(resourceTracker, (VkPipelineRasterizationStateCreateInfo*)(toTransform->pRasterizationState));
     }
     if (toTransform->pMultisampleState)
     {
-        transform_VkPipelineMultisampleStateCreateInfo(resourceTracker, (VkPipelineMultisampleStateCreateInfo*)(toTransform->pMultisampleState));
+        transform_tohost_VkPipelineMultisampleStateCreateInfo(resourceTracker, (VkPipelineMultisampleStateCreateInfo*)(toTransform->pMultisampleState));
     }
     if (toTransform->pDepthStencilState)
     {
-        transform_VkPipelineDepthStencilStateCreateInfo(resourceTracker, (VkPipelineDepthStencilStateCreateInfo*)(toTransform->pDepthStencilState));
+        transform_tohost_VkPipelineDepthStencilStateCreateInfo(resourceTracker, (VkPipelineDepthStencilStateCreateInfo*)(toTransform->pDepthStencilState));
     }
     if (toTransform->pColorBlendState)
     {
-        transform_VkPipelineColorBlendStateCreateInfo(resourceTracker, (VkPipelineColorBlendStateCreateInfo*)(toTransform->pColorBlendState));
+        transform_tohost_VkPipelineColorBlendStateCreateInfo(resourceTracker, (VkPipelineColorBlendStateCreateInfo*)(toTransform->pColorBlendState));
     }
     if (toTransform->pDynamicState)
     {
-        transform_VkPipelineDynamicStateCreateInfo(resourceTracker, (VkPipelineDynamicStateCreateInfo*)(toTransform->pDynamicState));
+        transform_tohost_VkPipelineDynamicStateCreateInfo(resourceTracker, (VkPipelineDynamicStateCreateInfo*)(toTransform->pDynamicState));
     }
 }
 
-void transform_VkComputePipelineCreateInfo(
+void transform_fromhost_VkGraphicsPipelineCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkGraphicsPipelineCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pStages)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->stageCount; ++i)
+        {
+            transform_fromhost_VkPipelineShaderStageCreateInfo(resourceTracker, (VkPipelineShaderStageCreateInfo*)(toTransform->pStages + i));
+        }
+    }
+    if (toTransform->pVertexInputState)
+    {
+        transform_fromhost_VkPipelineVertexInputStateCreateInfo(resourceTracker, (VkPipelineVertexInputStateCreateInfo*)(toTransform->pVertexInputState));
+    }
+    if (toTransform->pInputAssemblyState)
+    {
+        transform_fromhost_VkPipelineInputAssemblyStateCreateInfo(resourceTracker, (VkPipelineInputAssemblyStateCreateInfo*)(toTransform->pInputAssemblyState));
+    }
+    if (toTransform->pTessellationState)
+    {
+        transform_fromhost_VkPipelineTessellationStateCreateInfo(resourceTracker, (VkPipelineTessellationStateCreateInfo*)(toTransform->pTessellationState));
+    }
+    if (toTransform->pViewportState)
+    {
+        transform_fromhost_VkPipelineViewportStateCreateInfo(resourceTracker, (VkPipelineViewportStateCreateInfo*)(toTransform->pViewportState));
+    }
+    if (toTransform->pRasterizationState)
+    {
+        transform_fromhost_VkPipelineRasterizationStateCreateInfo(resourceTracker, (VkPipelineRasterizationStateCreateInfo*)(toTransform->pRasterizationState));
+    }
+    if (toTransform->pMultisampleState)
+    {
+        transform_fromhost_VkPipelineMultisampleStateCreateInfo(resourceTracker, (VkPipelineMultisampleStateCreateInfo*)(toTransform->pMultisampleState));
+    }
+    if (toTransform->pDepthStencilState)
+    {
+        transform_fromhost_VkPipelineDepthStencilStateCreateInfo(resourceTracker, (VkPipelineDepthStencilStateCreateInfo*)(toTransform->pDepthStencilState));
+    }
+    if (toTransform->pColorBlendState)
+    {
+        transform_fromhost_VkPipelineColorBlendStateCreateInfo(resourceTracker, (VkPipelineColorBlendStateCreateInfo*)(toTransform->pColorBlendState));
+    }
+    if (toTransform->pDynamicState)
+    {
+        transform_fromhost_VkPipelineDynamicStateCreateInfo(resourceTracker, (VkPipelineDynamicStateCreateInfo*)(toTransform->pDynamicState));
+    }
+}
+
+void transform_tohost_VkComputePipelineCreateInfo(
     ResourceTracker* resourceTracker,
     VkComputePipelineCreateInfo* toTransform)
 {
@@ -863,12 +1686,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkPipelineShaderStageCreateInfo(resourceTracker, (VkPipelineShaderStageCreateInfo*)(&toTransform->stage));
+    transform_tohost_VkPipelineShaderStageCreateInfo(resourceTracker, (VkPipelineShaderStageCreateInfo*)(&toTransform->stage));
 }
 
-void transform_VkPushConstantRange(
+void transform_fromhost_VkComputePipelineCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkComputePipelineCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkPipelineShaderStageCreateInfo(resourceTracker, (VkPipelineShaderStageCreateInfo*)(&toTransform->stage));
+}
+
+void transform_tohost_VkPushConstantRange(
     ResourceTracker* resourceTracker,
     VkPushConstantRange* toTransform)
 {
@@ -876,7 +1712,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineLayoutCreateInfo(
+void transform_fromhost_VkPushConstantRange(
+    ResourceTracker* resourceTracker,
+    VkPushConstantRange* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineLayoutCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineLayoutCreateInfo* toTransform)
 {
@@ -884,18 +1728,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pPushConstantRanges)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->pushConstantRangeCount; ++i)
         {
-            transform_VkPushConstantRange(resourceTracker, (VkPushConstantRange*)(toTransform->pPushConstantRanges + i));
+            transform_tohost_VkPushConstantRange(resourceTracker, (VkPushConstantRange*)(toTransform->pPushConstantRanges + i));
         }
     }
 }
 
-void transform_VkSamplerCreateInfo(
+void transform_fromhost_VkPipelineLayoutCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineLayoutCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pPushConstantRanges)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->pushConstantRangeCount; ++i)
+        {
+            transform_fromhost_VkPushConstantRange(resourceTracker, (VkPushConstantRange*)(toTransform->pPushConstantRanges + i));
+        }
+    }
+}
+
+void transform_tohost_VkSamplerCreateInfo(
     ResourceTracker* resourceTracker,
     VkSamplerCreateInfo* toTransform)
 {
@@ -903,11 +1766,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDescriptorSetLayoutBinding(
+void transform_fromhost_VkSamplerCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkSamplerCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDescriptorSetLayoutBinding(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutBinding* toTransform)
 {
@@ -915,7 +1790,15 @@
     (void)toTransform;
 }
 
-void transform_VkDescriptorSetLayoutCreateInfo(
+void transform_fromhost_VkDescriptorSetLayoutBinding(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutBinding* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDescriptorSetLayoutCreateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutCreateInfo* toTransform)
 {
@@ -923,18 +1806,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pBindings)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->bindingCount; ++i)
         {
-            transform_VkDescriptorSetLayoutBinding(resourceTracker, (VkDescriptorSetLayoutBinding*)(toTransform->pBindings + i));
+            transform_tohost_VkDescriptorSetLayoutBinding(resourceTracker, (VkDescriptorSetLayoutBinding*)(toTransform->pBindings + i));
         }
     }
 }
 
-void transform_VkDescriptorPoolSize(
+void transform_fromhost_VkDescriptorSetLayoutCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pBindings)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->bindingCount; ++i)
+        {
+            transform_fromhost_VkDescriptorSetLayoutBinding(resourceTracker, (VkDescriptorSetLayoutBinding*)(toTransform->pBindings + i));
+        }
+    }
+}
+
+void transform_tohost_VkDescriptorPoolSize(
     ResourceTracker* resourceTracker,
     VkDescriptorPoolSize* toTransform)
 {
@@ -942,7 +1844,15 @@
     (void)toTransform;
 }
 
-void transform_VkDescriptorPoolCreateInfo(
+void transform_fromhost_VkDescriptorPoolSize(
+    ResourceTracker* resourceTracker,
+    VkDescriptorPoolSize* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDescriptorPoolCreateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorPoolCreateInfo* toTransform)
 {
@@ -950,18 +1860,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pPoolSizes)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->poolSizeCount; ++i)
         {
-            transform_VkDescriptorPoolSize(resourceTracker, (VkDescriptorPoolSize*)(toTransform->pPoolSizes + i));
+            transform_tohost_VkDescriptorPoolSize(resourceTracker, (VkDescriptorPoolSize*)(toTransform->pPoolSizes + i));
         }
     }
 }
 
-void transform_VkDescriptorSetAllocateInfo(
+void transform_fromhost_VkDescriptorPoolCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorPoolCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pPoolSizes)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->poolSizeCount; ++i)
+        {
+            transform_fromhost_VkDescriptorPoolSize(resourceTracker, (VkDescriptorPoolSize*)(toTransform->pPoolSizes + i));
+        }
+    }
+}
+
+void transform_tohost_VkDescriptorSetAllocateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorSetAllocateInfo* toTransform)
 {
@@ -969,11 +1898,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDescriptorImageInfo(
+void transform_fromhost_VkDescriptorSetAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetAllocateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDescriptorImageInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorImageInfo* toTransform)
 {
@@ -981,7 +1922,15 @@
     (void)toTransform;
 }
 
-void transform_VkDescriptorBufferInfo(
+void transform_fromhost_VkDescriptorImageInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorImageInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDescriptorBufferInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorBufferInfo* toTransform)
 {
@@ -989,7 +1938,15 @@
     (void)toTransform;
 }
 
-void transform_VkWriteDescriptorSet(
+void transform_fromhost_VkDescriptorBufferInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorBufferInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkWriteDescriptorSet(
     ResourceTracker* resourceTracker,
     VkWriteDescriptorSet* toTransform)
 {
@@ -997,25 +1954,51 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pImageInfo)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->descriptorCount; ++i)
         {
-            transform_VkDescriptorImageInfo(resourceTracker, (VkDescriptorImageInfo*)(toTransform->pImageInfo + i));
+            transform_tohost_VkDescriptorImageInfo(resourceTracker, (VkDescriptorImageInfo*)(toTransform->pImageInfo + i));
         }
     }
     if (toTransform->pBufferInfo)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->descriptorCount; ++i)
         {
-            transform_VkDescriptorBufferInfo(resourceTracker, (VkDescriptorBufferInfo*)(toTransform->pBufferInfo + i));
+            transform_tohost_VkDescriptorBufferInfo(resourceTracker, (VkDescriptorBufferInfo*)(toTransform->pBufferInfo + i));
         }
     }
 }
 
-void transform_VkCopyDescriptorSet(
+void transform_fromhost_VkWriteDescriptorSet(
+    ResourceTracker* resourceTracker,
+    VkWriteDescriptorSet* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pImageInfo)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->descriptorCount; ++i)
+        {
+            transform_fromhost_VkDescriptorImageInfo(resourceTracker, (VkDescriptorImageInfo*)(toTransform->pImageInfo + i));
+        }
+    }
+    if (toTransform->pBufferInfo)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->descriptorCount; ++i)
+        {
+            transform_fromhost_VkDescriptorBufferInfo(resourceTracker, (VkDescriptorBufferInfo*)(toTransform->pBufferInfo + i));
+        }
+    }
+}
+
+void transform_tohost_VkCopyDescriptorSet(
     ResourceTracker* resourceTracker,
     VkCopyDescriptorSet* toTransform)
 {
@@ -1023,11 +2006,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkFramebufferCreateInfo(
+void transform_fromhost_VkCopyDescriptorSet(
+    ResourceTracker* resourceTracker,
+    VkCopyDescriptorSet* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkFramebufferCreateInfo(
     ResourceTracker* resourceTracker,
     VkFramebufferCreateInfo* toTransform)
 {
@@ -1035,11 +2030,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkAttachmentDescription(
+void transform_fromhost_VkFramebufferCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkFramebufferCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkAttachmentDescription(
     ResourceTracker* resourceTracker,
     VkAttachmentDescription* toTransform)
 {
@@ -1047,7 +2054,15 @@
     (void)toTransform;
 }
 
-void transform_VkAttachmentReference(
+void transform_fromhost_VkAttachmentDescription(
+    ResourceTracker* resourceTracker,
+    VkAttachmentDescription* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkAttachmentReference(
     ResourceTracker* resourceTracker,
     VkAttachmentReference* toTransform)
 {
@@ -1055,7 +2070,15 @@
     (void)toTransform;
 }
 
-void transform_VkSubpassDescription(
+void transform_fromhost_VkAttachmentReference(
+    ResourceTracker* resourceTracker,
+    VkAttachmentReference* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkSubpassDescription(
     ResourceTracker* resourceTracker,
     VkSubpassDescription* toTransform)
 {
@@ -1065,30 +2088,63 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->inputAttachmentCount; ++i)
         {
-            transform_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pInputAttachments + i));
+            transform_tohost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pInputAttachments + i));
         }
     }
     if (toTransform->pColorAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
         {
-            transform_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pColorAttachments + i));
+            transform_tohost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pColorAttachments + i));
         }
     }
     if (toTransform->pResolveAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
         {
-            transform_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pResolveAttachments + i));
+            transform_tohost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pResolveAttachments + i));
         }
     }
     if (toTransform->pDepthStencilAttachment)
     {
-        transform_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pDepthStencilAttachment));
+        transform_tohost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pDepthStencilAttachment));
     }
 }
 
-void transform_VkSubpassDependency(
+void transform_fromhost_VkSubpassDescription(
+    ResourceTracker* resourceTracker,
+    VkSubpassDescription* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pInputAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->inputAttachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pInputAttachments + i));
+        }
+    }
+    if (toTransform->pColorAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pColorAttachments + i));
+        }
+    }
+    if (toTransform->pResolveAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pResolveAttachments + i));
+        }
+    }
+    if (toTransform->pDepthStencilAttachment)
+    {
+        transform_fromhost_VkAttachmentReference(resourceTracker, (VkAttachmentReference*)(toTransform->pDepthStencilAttachment));
+    }
+}
+
+void transform_tohost_VkSubpassDependency(
     ResourceTracker* resourceTracker,
     VkSubpassDependency* toTransform)
 {
@@ -1096,7 +2152,15 @@
     (void)toTransform;
 }
 
-void transform_VkRenderPassCreateInfo(
+void transform_fromhost_VkSubpassDependency(
+    ResourceTracker* resourceTracker,
+    VkSubpassDependency* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkRenderPassCreateInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassCreateInfo* toTransform)
 {
@@ -1104,32 +2168,65 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentCount; ++i)
         {
-            transform_VkAttachmentDescription(resourceTracker, (VkAttachmentDescription*)(toTransform->pAttachments + i));
+            transform_tohost_VkAttachmentDescription(resourceTracker, (VkAttachmentDescription*)(toTransform->pAttachments + i));
         }
     }
     if (toTransform->pSubpasses)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->subpassCount; ++i)
         {
-            transform_VkSubpassDescription(resourceTracker, (VkSubpassDescription*)(toTransform->pSubpasses + i));
+            transform_tohost_VkSubpassDescription(resourceTracker, (VkSubpassDescription*)(toTransform->pSubpasses + i));
         }
     }
     if (toTransform->pDependencies)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->dependencyCount; ++i)
         {
-            transform_VkSubpassDependency(resourceTracker, (VkSubpassDependency*)(toTransform->pDependencies + i));
+            transform_tohost_VkSubpassDependency(resourceTracker, (VkSubpassDependency*)(toTransform->pDependencies + i));
         }
     }
 }
 
-void transform_VkCommandPoolCreateInfo(
+void transform_fromhost_VkRenderPassCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentDescription(resourceTracker, (VkAttachmentDescription*)(toTransform->pAttachments + i));
+        }
+    }
+    if (toTransform->pSubpasses)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->subpassCount; ++i)
+        {
+            transform_fromhost_VkSubpassDescription(resourceTracker, (VkSubpassDescription*)(toTransform->pSubpasses + i));
+        }
+    }
+    if (toTransform->pDependencies)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->dependencyCount; ++i)
+        {
+            transform_fromhost_VkSubpassDependency(resourceTracker, (VkSubpassDependency*)(toTransform->pDependencies + i));
+        }
+    }
+}
+
+void transform_tohost_VkCommandPoolCreateInfo(
     ResourceTracker* resourceTracker,
     VkCommandPoolCreateInfo* toTransform)
 {
@@ -1137,11 +2234,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkCommandBufferAllocateInfo(
+void transform_fromhost_VkCommandPoolCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandPoolCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkCommandBufferAllocateInfo(
     ResourceTracker* resourceTracker,
     VkCommandBufferAllocateInfo* toTransform)
 {
@@ -1149,11 +2258,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkCommandBufferInheritanceInfo(
+void transform_fromhost_VkCommandBufferAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferAllocateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkCommandBufferInheritanceInfo(
     ResourceTracker* resourceTracker,
     VkCommandBufferInheritanceInfo* toTransform)
 {
@@ -1161,11 +2282,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkCommandBufferBeginInfo(
+void transform_fromhost_VkCommandBufferInheritanceInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferInheritanceInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkCommandBufferBeginInfo(
     ResourceTracker* resourceTracker,
     VkCommandBufferBeginInfo* toTransform)
 {
@@ -1173,15 +2306,31 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pInheritanceInfo)
     {
-        transform_VkCommandBufferInheritanceInfo(resourceTracker, (VkCommandBufferInheritanceInfo*)(toTransform->pInheritanceInfo));
+        transform_tohost_VkCommandBufferInheritanceInfo(resourceTracker, (VkCommandBufferInheritanceInfo*)(toTransform->pInheritanceInfo));
     }
 }
 
-void transform_VkBufferCopy(
+void transform_fromhost_VkCommandBufferBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferBeginInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pInheritanceInfo)
+    {
+        transform_fromhost_VkCommandBufferInheritanceInfo(resourceTracker, (VkCommandBufferInheritanceInfo*)(toTransform->pInheritanceInfo));
+    }
+}
+
+void transform_tohost_VkBufferCopy(
     ResourceTracker* resourceTracker,
     VkBufferCopy* toTransform)
 {
@@ -1189,7 +2338,15 @@
     (void)toTransform;
 }
 
-void transform_VkImageSubresourceLayers(
+void transform_fromhost_VkBufferCopy(
+    ResourceTracker* resourceTracker,
+    VkBufferCopy* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkImageSubresourceLayers(
     ResourceTracker* resourceTracker,
     VkImageSubresourceLayers* toTransform)
 {
@@ -1197,49 +2354,99 @@
     (void)toTransform;
 }
 
-void transform_VkImageCopy(
+void transform_fromhost_VkImageSubresourceLayers(
+    ResourceTracker* resourceTracker,
+    VkImageSubresourceLayers* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkImageCopy(
     ResourceTracker* resourceTracker,
     VkImageCopy* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
-    transform_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->srcOffset));
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
-    transform_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->dstOffset));
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->srcOffset));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->dstOffset));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
 }
 
-void transform_VkImageBlit(
+void transform_fromhost_VkImageCopy(
+    ResourceTracker* resourceTracker,
+    VkImageCopy* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->srcOffset));
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->dstOffset));
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+}
+
+void transform_tohost_VkImageBlit(
     ResourceTracker* resourceTracker,
     VkImageBlit* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        transform_VkOffset3D(resourceTracker, (VkOffset3D*)(toTransform->srcOffsets + i));
+        transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(toTransform->srcOffsets + i));
     }
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
     for (uint32_t i = 0; i < (uint32_t)2; ++i)
     {
-        transform_VkOffset3D(resourceTracker, (VkOffset3D*)(toTransform->dstOffsets + i));
+        transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(toTransform->dstOffsets + i));
     }
 }
 
-void transform_VkBufferImageCopy(
+void transform_fromhost_VkImageBlit(
+    ResourceTracker* resourceTracker,
+    VkImageBlit* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
+    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    {
+        transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(toTransform->srcOffsets + i));
+    }
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
+    for (uint32_t i = 0; i < (uint32_t)2; ++i)
+    {
+        transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(toTransform->dstOffsets + i));
+    }
+}
+
+void transform_tohost_VkBufferImageCopy(
     ResourceTracker* resourceTracker,
     VkBufferImageCopy* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
-    transform_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
 }
 
-void transform_VkClearColorValue(
+void transform_fromhost_VkBufferImageCopy(
+    ResourceTracker* resourceTracker,
+    VkBufferImageCopy* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
+}
+
+void transform_tohost_VkClearColorValue(
     ResourceTracker* resourceTracker,
     VkClearColorValue* toTransform)
 {
@@ -1247,7 +2454,15 @@
     (void)toTransform;
 }
 
-void transform_VkClearDepthStencilValue(
+void transform_fromhost_VkClearColorValue(
+    ResourceTracker* resourceTracker,
+    VkClearColorValue* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkClearDepthStencilValue(
     ResourceTracker* resourceTracker,
     VkClearDepthStencilValue* toTransform)
 {
@@ -1255,48 +2470,97 @@
     (void)toTransform;
 }
 
-void transform_VkClearValue(
+void transform_fromhost_VkClearDepthStencilValue(
+    ResourceTracker* resourceTracker,
+    VkClearDepthStencilValue* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkClearValue(
     ResourceTracker* resourceTracker,
     VkClearValue* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkClearColorValue(resourceTracker, (VkClearColorValue*)(&toTransform->color));
-    transform_VkClearDepthStencilValue(resourceTracker, (VkClearDepthStencilValue*)(&toTransform->depthStencil));
+    transform_tohost_VkClearColorValue(resourceTracker, (VkClearColorValue*)(&toTransform->color));
+    transform_tohost_VkClearDepthStencilValue(resourceTracker, (VkClearDepthStencilValue*)(&toTransform->depthStencil));
 }
 
-void transform_VkClearAttachment(
+void transform_fromhost_VkClearValue(
+    ResourceTracker* resourceTracker,
+    VkClearValue* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkClearColorValue(resourceTracker, (VkClearColorValue*)(&toTransform->color));
+    transform_fromhost_VkClearDepthStencilValue(resourceTracker, (VkClearDepthStencilValue*)(&toTransform->depthStencil));
+}
+
+void transform_tohost_VkClearAttachment(
     ResourceTracker* resourceTracker,
     VkClearAttachment* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkClearValue(resourceTracker, (VkClearValue*)(&toTransform->clearValue));
+    transform_tohost_VkClearValue(resourceTracker, (VkClearValue*)(&toTransform->clearValue));
 }
 
-void transform_VkClearRect(
+void transform_fromhost_VkClearAttachment(
+    ResourceTracker* resourceTracker,
+    VkClearAttachment* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkClearValue(resourceTracker, (VkClearValue*)(&toTransform->clearValue));
+}
+
+void transform_tohost_VkClearRect(
     ResourceTracker* resourceTracker,
     VkClearRect* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->rect));
+    transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->rect));
 }
 
-void transform_VkImageResolve(
+void transform_fromhost_VkClearRect(
+    ResourceTracker* resourceTracker,
+    VkClearRect* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->rect));
+}
+
+void transform_tohost_VkImageResolve(
     ResourceTracker* resourceTracker,
     VkImageResolve* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
-    transform_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->srcOffset));
-    transform_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
-    transform_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->dstOffset));
-    transform_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->srcOffset));
+    transform_tohost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->dstOffset));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
 }
 
-void transform_VkMemoryBarrier(
+void transform_fromhost_VkImageResolve(
+    ResourceTracker* resourceTracker,
+    VkImageResolve* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->srcSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->srcOffset));
+    transform_fromhost_VkImageSubresourceLayers(resourceTracker, (VkImageSubresourceLayers*)(&toTransform->dstSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->dstOffset));
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->extent));
+}
+
+void transform_tohost_VkMemoryBarrier(
     ResourceTracker* resourceTracker,
     VkMemoryBarrier* toTransform)
 {
@@ -1304,11 +2568,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBufferMemoryBarrier(
+void transform_fromhost_VkMemoryBarrier(
+    ResourceTracker* resourceTracker,
+    VkMemoryBarrier* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBufferMemoryBarrier(
     ResourceTracker* resourceTracker,
     VkBufferMemoryBarrier* toTransform)
 {
@@ -1316,11 +2592,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkImageMemoryBarrier(
+void transform_fromhost_VkBufferMemoryBarrier(
+    ResourceTracker* resourceTracker,
+    VkBufferMemoryBarrier* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImageMemoryBarrier(
     ResourceTracker* resourceTracker,
     VkImageMemoryBarrier* toTransform)
 {
@@ -1328,12 +2616,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkImageSubresourceRange(resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
+    transform_tohost_VkImageSubresourceRange(resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
 }
 
-void transform_VkRenderPassBeginInfo(
+void transform_fromhost_VkImageMemoryBarrier(
+    ResourceTracker* resourceTracker,
+    VkImageMemoryBarrier* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkImageSubresourceRange(resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
+}
+
+void transform_tohost_VkRenderPassBeginInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassBeginInfo* toTransform)
 {
@@ -1341,19 +2642,39 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->renderArea));
+    transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->renderArea));
     if (toTransform->pClearValues)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->clearValueCount; ++i)
         {
-            transform_VkClearValue(resourceTracker, (VkClearValue*)(toTransform->pClearValues + i));
+            transform_tohost_VkClearValue(resourceTracker, (VkClearValue*)(toTransform->pClearValues + i));
         }
     }
 }
 
-void transform_VkDispatchIndirectCommand(
+void transform_fromhost_VkRenderPassBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassBeginInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->renderArea));
+    if (toTransform->pClearValues)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->clearValueCount; ++i)
+        {
+            transform_fromhost_VkClearValue(resourceTracker, (VkClearValue*)(toTransform->pClearValues + i));
+        }
+    }
+}
+
+void transform_tohost_VkDispatchIndirectCommand(
     ResourceTracker* resourceTracker,
     VkDispatchIndirectCommand* toTransform)
 {
@@ -1361,7 +2682,15 @@
     (void)toTransform;
 }
 
-void transform_VkDrawIndexedIndirectCommand(
+void transform_fromhost_VkDispatchIndirectCommand(
+    ResourceTracker* resourceTracker,
+    VkDispatchIndirectCommand* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDrawIndexedIndirectCommand(
     ResourceTracker* resourceTracker,
     VkDrawIndexedIndirectCommand* toTransform)
 {
@@ -1369,7 +2698,15 @@
     (void)toTransform;
 }
 
-void transform_VkDrawIndirectCommand(
+void transform_fromhost_VkDrawIndexedIndirectCommand(
+    ResourceTracker* resourceTracker,
+    VkDrawIndexedIndirectCommand* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDrawIndirectCommand(
     ResourceTracker* resourceTracker,
     VkDrawIndirectCommand* toTransform)
 {
@@ -1377,7 +2714,15 @@
     (void)toTransform;
 }
 
-void transform_VkBaseOutStructure(
+void transform_fromhost_VkDrawIndirectCommand(
+    ResourceTracker* resourceTracker,
+    VkDrawIndirectCommand* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkBaseOutStructure(
     ResourceTracker* resourceTracker,
     VkBaseOutStructure* toTransform)
 {
@@ -1385,11 +2730,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBaseInStructure(
+void transform_fromhost_VkBaseOutStructure(
+    ResourceTracker* resourceTracker,
+    VkBaseOutStructure* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBaseInStructure(
     ResourceTracker* resourceTracker,
     VkBaseInStructure* toTransform)
 {
@@ -1397,13 +2754,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkBaseInStructure(
+    ResourceTracker* resourceTracker,
+    VkBaseInStructure* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_VERSION_1_1
-void transform_VkPhysicalDeviceSubgroupProperties(
+void transform_tohost_VkPhysicalDeviceSubgroupProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSubgroupProperties* toTransform)
 {
@@ -1411,37 +2780,75 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBindBufferMemoryInfo(
+void transform_fromhost_VkPhysicalDeviceSubgroupProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSubgroupProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBindBufferMemoryInfo(
     ResourceTracker* resourceTracker,
     VkBindBufferMemoryInfo* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBindImageMemoryInfo(
+void transform_fromhost_VkBindBufferMemoryInfo(
+    ResourceTracker* resourceTracker,
+    VkBindBufferMemoryInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBindImageMemoryInfo(
     ResourceTracker* resourceTracker,
     VkBindImageMemoryInfo* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, nullptr, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, nullptr, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDevice16BitStorageFeatures(
+void transform_fromhost_VkBindImageMemoryInfo(
+    ResourceTracker* resourceTracker,
+    VkBindImageMemoryInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, nullptr, 1, &toTransform->memoryOffset, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDevice16BitStorageFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDevice16BitStorageFeatures* toTransform)
 {
@@ -1449,11 +2856,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryDedicatedRequirements(
+void transform_fromhost_VkPhysicalDevice16BitStorageFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevice16BitStorageFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryDedicatedRequirements(
     ResourceTracker* resourceTracker,
     VkMemoryDedicatedRequirements* toTransform)
 {
@@ -1461,11 +2880,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryDedicatedAllocateInfo(
+void transform_fromhost_VkMemoryDedicatedRequirements(
+    ResourceTracker* resourceTracker,
+    VkMemoryDedicatedRequirements* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryDedicatedAllocateInfo(
     ResourceTracker* resourceTracker,
     VkMemoryDedicatedAllocateInfo* toTransform)
 {
@@ -1473,11 +2904,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryAllocateFlagsInfo(
+void transform_fromhost_VkMemoryDedicatedAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkMemoryDedicatedAllocateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryAllocateFlagsInfo(
     ResourceTracker* resourceTracker,
     VkMemoryAllocateFlagsInfo* toTransform)
 {
@@ -1485,11 +2928,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupRenderPassBeginInfo(
+void transform_fromhost_VkMemoryAllocateFlagsInfo(
+    ResourceTracker* resourceTracker,
+    VkMemoryAllocateFlagsInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupRenderPassBeginInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupRenderPassBeginInfo* toTransform)
 {
@@ -1497,18 +2952,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pDeviceRenderAreas)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->deviceRenderAreaCount; ++i)
         {
-            transform_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pDeviceRenderAreas + i));
+            transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pDeviceRenderAreas + i));
         }
     }
 }
 
-void transform_VkDeviceGroupCommandBufferBeginInfo(
+void transform_fromhost_VkDeviceGroupRenderPassBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupRenderPassBeginInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pDeviceRenderAreas)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->deviceRenderAreaCount; ++i)
+        {
+            transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pDeviceRenderAreas + i));
+        }
+    }
+}
+
+void transform_tohost_VkDeviceGroupCommandBufferBeginInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupCommandBufferBeginInfo* toTransform)
 {
@@ -1516,11 +2990,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupSubmitInfo(
+void transform_fromhost_VkDeviceGroupCommandBufferBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupCommandBufferBeginInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupSubmitInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupSubmitInfo* toTransform)
 {
@@ -1528,11 +3014,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupBindSparseInfo(
+void transform_fromhost_VkDeviceGroupSubmitInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupSubmitInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupBindSparseInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupBindSparseInfo* toTransform)
 {
@@ -1540,11 +3038,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBindBufferMemoryDeviceGroupInfo(
+void transform_fromhost_VkDeviceGroupBindSparseInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupBindSparseInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBindBufferMemoryDeviceGroupInfo(
     ResourceTracker* resourceTracker,
     VkBindBufferMemoryDeviceGroupInfo* toTransform)
 {
@@ -1552,11 +3062,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBindImageMemoryDeviceGroupInfo(
+void transform_fromhost_VkBindBufferMemoryDeviceGroupInfo(
+    ResourceTracker* resourceTracker,
+    VkBindBufferMemoryDeviceGroupInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBindImageMemoryDeviceGroupInfo(
     ResourceTracker* resourceTracker,
     VkBindImageMemoryDeviceGroupInfo* toTransform)
 {
@@ -1564,18 +3086,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pSplitInstanceBindRegions)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->splitInstanceBindRegionCount; ++i)
         {
-            transform_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pSplitInstanceBindRegions + i));
+            transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pSplitInstanceBindRegions + i));
         }
     }
 }
 
-void transform_VkPhysicalDeviceGroupProperties(
+void transform_fromhost_VkBindImageMemoryDeviceGroupInfo(
+    ResourceTracker* resourceTracker,
+    VkBindImageMemoryDeviceGroupInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pSplitInstanceBindRegions)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->splitInstanceBindRegionCount; ++i)
+        {
+            transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pSplitInstanceBindRegions + i));
+        }
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceGroupProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceGroupProperties* toTransform)
 {
@@ -1583,11 +3124,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupDeviceCreateInfo(
+void transform_fromhost_VkPhysicalDeviceGroupProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceGroupProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupDeviceCreateInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupDeviceCreateInfo* toTransform)
 {
@@ -1595,11 +3148,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBufferMemoryRequirementsInfo2(
+void transform_fromhost_VkDeviceGroupDeviceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupDeviceCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBufferMemoryRequirementsInfo2(
     ResourceTracker* resourceTracker,
     VkBufferMemoryRequirementsInfo2* toTransform)
 {
@@ -1607,11 +3172,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkImageMemoryRequirementsInfo2(
+void transform_fromhost_VkBufferMemoryRequirementsInfo2(
+    ResourceTracker* resourceTracker,
+    VkBufferMemoryRequirementsInfo2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImageMemoryRequirementsInfo2(
     ResourceTracker* resourceTracker,
     VkImageMemoryRequirementsInfo2* toTransform)
 {
@@ -1619,11 +3196,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkImageSparseMemoryRequirementsInfo2(
+void transform_fromhost_VkImageMemoryRequirementsInfo2(
+    ResourceTracker* resourceTracker,
+    VkImageMemoryRequirementsInfo2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImageSparseMemoryRequirementsInfo2(
     ResourceTracker* resourceTracker,
     VkImageSparseMemoryRequirementsInfo2* toTransform)
 {
@@ -1631,11 +3220,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryRequirements2(
+void transform_fromhost_VkImageSparseMemoryRequirementsInfo2(
+    ResourceTracker* resourceTracker,
+    VkImageSparseMemoryRequirementsInfo2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryRequirements2(
     ResourceTracker* resourceTracker,
     VkMemoryRequirements2* toTransform)
 {
@@ -1643,12 +3244,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkMemoryRequirements(resourceTracker, (VkMemoryRequirements*)(&toTransform->memoryRequirements));
+    transform_tohost_VkMemoryRequirements(resourceTracker, (VkMemoryRequirements*)(&toTransform->memoryRequirements));
 }
 
-void transform_VkSparseImageMemoryRequirements2(
+void transform_fromhost_VkMemoryRequirements2(
+    ResourceTracker* resourceTracker,
+    VkMemoryRequirements2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkMemoryRequirements(resourceTracker, (VkMemoryRequirements*)(&toTransform->memoryRequirements));
+}
+
+void transform_tohost_VkSparseImageMemoryRequirements2(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryRequirements2* toTransform)
 {
@@ -1656,12 +3270,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkSparseImageMemoryRequirements(resourceTracker, (VkSparseImageMemoryRequirements*)(&toTransform->memoryRequirements));
+    transform_tohost_VkSparseImageMemoryRequirements(resourceTracker, (VkSparseImageMemoryRequirements*)(&toTransform->memoryRequirements));
 }
 
-void transform_VkPhysicalDeviceFeatures2(
+void transform_fromhost_VkSparseImageMemoryRequirements2(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryRequirements2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkSparseImageMemoryRequirements(resourceTracker, (VkSparseImageMemoryRequirements*)(&toTransform->memoryRequirements));
+}
+
+void transform_tohost_VkPhysicalDeviceFeatures2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceFeatures2* toTransform)
 {
@@ -1669,12 +3296,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkPhysicalDeviceFeatures(resourceTracker, (VkPhysicalDeviceFeatures*)(&toTransform->features));
+    transform_tohost_VkPhysicalDeviceFeatures(resourceTracker, (VkPhysicalDeviceFeatures*)(&toTransform->features));
 }
 
-void transform_VkPhysicalDeviceProperties2(
+void transform_fromhost_VkPhysicalDeviceFeatures2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceFeatures2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkPhysicalDeviceFeatures(resourceTracker, (VkPhysicalDeviceFeatures*)(&toTransform->features));
+}
+
+void transform_tohost_VkPhysicalDeviceProperties2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProperties2* toTransform)
 {
@@ -1682,12 +3322,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkPhysicalDeviceProperties(resourceTracker, (VkPhysicalDeviceProperties*)(&toTransform->properties));
+    transform_tohost_VkPhysicalDeviceProperties(resourceTracker, (VkPhysicalDeviceProperties*)(&toTransform->properties));
 }
 
-void transform_VkFormatProperties2(
+void transform_fromhost_VkPhysicalDeviceProperties2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProperties2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkPhysicalDeviceProperties(resourceTracker, (VkPhysicalDeviceProperties*)(&toTransform->properties));
+}
+
+void transform_tohost_VkFormatProperties2(
     ResourceTracker* resourceTracker,
     VkFormatProperties2* toTransform)
 {
@@ -1695,12 +3348,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkFormatProperties(resourceTracker, (VkFormatProperties*)(&toTransform->formatProperties));
+    transform_tohost_VkFormatProperties(resourceTracker, (VkFormatProperties*)(&toTransform->formatProperties));
 }
 
-void transform_VkImageFormatProperties2(
+void transform_fromhost_VkFormatProperties2(
+    ResourceTracker* resourceTracker,
+    VkFormatProperties2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkFormatProperties(resourceTracker, (VkFormatProperties*)(&toTransform->formatProperties));
+}
+
+void transform_tohost_VkImageFormatProperties2(
     ResourceTracker* resourceTracker,
     VkImageFormatProperties2* toTransform)
 {
@@ -1708,12 +3374,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkImageFormatProperties(resourceTracker, (VkImageFormatProperties*)(&toTransform->imageFormatProperties));
+    transform_tohost_VkImageFormatProperties(resourceTracker, (VkImageFormatProperties*)(&toTransform->imageFormatProperties));
 }
 
-void transform_VkPhysicalDeviceImageFormatInfo2(
+void transform_fromhost_VkImageFormatProperties2(
+    ResourceTracker* resourceTracker,
+    VkImageFormatProperties2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkImageFormatProperties(resourceTracker, (VkImageFormatProperties*)(&toTransform->imageFormatProperties));
+}
+
+void transform_tohost_VkPhysicalDeviceImageFormatInfo2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceImageFormatInfo2* toTransform)
 {
@@ -1721,11 +3400,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkQueueFamilyProperties2(
+void transform_fromhost_VkPhysicalDeviceImageFormatInfo2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceImageFormatInfo2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkQueueFamilyProperties2(
     ResourceTracker* resourceTracker,
     VkQueueFamilyProperties2* toTransform)
 {
@@ -1733,12 +3424,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkQueueFamilyProperties(resourceTracker, (VkQueueFamilyProperties*)(&toTransform->queueFamilyProperties));
+    transform_tohost_VkQueueFamilyProperties(resourceTracker, (VkQueueFamilyProperties*)(&toTransform->queueFamilyProperties));
 }
 
-void transform_VkPhysicalDeviceMemoryProperties2(
+void transform_fromhost_VkQueueFamilyProperties2(
+    ResourceTracker* resourceTracker,
+    VkQueueFamilyProperties2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkQueueFamilyProperties(resourceTracker, (VkQueueFamilyProperties*)(&toTransform->queueFamilyProperties));
+}
+
+void transform_tohost_VkPhysicalDeviceMemoryProperties2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMemoryProperties2* toTransform)
 {
@@ -1746,12 +3450,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkPhysicalDeviceMemoryProperties(resourceTracker, (VkPhysicalDeviceMemoryProperties*)(&toTransform->memoryProperties));
+    transform_tohost_VkPhysicalDeviceMemoryProperties(resourceTracker, (VkPhysicalDeviceMemoryProperties*)(&toTransform->memoryProperties));
 }
 
-void transform_VkSparseImageFormatProperties2(
+void transform_fromhost_VkPhysicalDeviceMemoryProperties2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMemoryProperties2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkPhysicalDeviceMemoryProperties(resourceTracker, (VkPhysicalDeviceMemoryProperties*)(&toTransform->memoryProperties));
+}
+
+void transform_tohost_VkSparseImageFormatProperties2(
     ResourceTracker* resourceTracker,
     VkSparseImageFormatProperties2* toTransform)
 {
@@ -1759,12 +3476,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkSparseImageFormatProperties(resourceTracker, (VkSparseImageFormatProperties*)(&toTransform->properties));
+    transform_tohost_VkSparseImageFormatProperties(resourceTracker, (VkSparseImageFormatProperties*)(&toTransform->properties));
 }
 
-void transform_VkPhysicalDeviceSparseImageFormatInfo2(
+void transform_fromhost_VkSparseImageFormatProperties2(
+    ResourceTracker* resourceTracker,
+    VkSparseImageFormatProperties2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkSparseImageFormatProperties(resourceTracker, (VkSparseImageFormatProperties*)(&toTransform->properties));
+}
+
+void transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSparseImageFormatInfo2* toTransform)
 {
@@ -1772,11 +3502,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDevicePointClippingProperties(
+void transform_fromhost_VkPhysicalDeviceSparseImageFormatInfo2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSparseImageFormatInfo2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDevicePointClippingProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDevicePointClippingProperties* toTransform)
 {
@@ -1784,11 +3526,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkInputAttachmentAspectReference(
+void transform_fromhost_VkPhysicalDevicePointClippingProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevicePointClippingProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkInputAttachmentAspectReference(
     ResourceTracker* resourceTracker,
     VkInputAttachmentAspectReference* toTransform)
 {
@@ -1796,7 +3550,15 @@
     (void)toTransform;
 }
 
-void transform_VkRenderPassInputAttachmentAspectCreateInfo(
+void transform_fromhost_VkInputAttachmentAspectReference(
+    ResourceTracker* resourceTracker,
+    VkInputAttachmentAspectReference* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkRenderPassInputAttachmentAspectCreateInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassInputAttachmentAspectCreateInfo* toTransform)
 {
@@ -1804,18 +3566,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pAspectReferences)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->aspectReferenceCount; ++i)
         {
-            transform_VkInputAttachmentAspectReference(resourceTracker, (VkInputAttachmentAspectReference*)(toTransform->pAspectReferences + i));
+            transform_tohost_VkInputAttachmentAspectReference(resourceTracker, (VkInputAttachmentAspectReference*)(toTransform->pAspectReferences + i));
         }
     }
 }
 
-void transform_VkImageViewUsageCreateInfo(
+void transform_fromhost_VkRenderPassInputAttachmentAspectCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassInputAttachmentAspectCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pAspectReferences)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->aspectReferenceCount; ++i)
+        {
+            transform_fromhost_VkInputAttachmentAspectReference(resourceTracker, (VkInputAttachmentAspectReference*)(toTransform->pAspectReferences + i));
+        }
+    }
+}
+
+void transform_tohost_VkImageViewUsageCreateInfo(
     ResourceTracker* resourceTracker,
     VkImageViewUsageCreateInfo* toTransform)
 {
@@ -1823,11 +3604,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineTessellationDomainOriginStateCreateInfo(
+void transform_fromhost_VkImageViewUsageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkImageViewUsageCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineTessellationDomainOriginStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineTessellationDomainOriginStateCreateInfo* toTransform)
 {
@@ -1835,11 +3628,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkRenderPassMultiviewCreateInfo(
+void transform_fromhost_VkPipelineTessellationDomainOriginStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineTessellationDomainOriginStateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkRenderPassMultiviewCreateInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassMultiviewCreateInfo* toTransform)
 {
@@ -1847,11 +3652,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceMultiviewFeatures(
+void transform_fromhost_VkRenderPassMultiviewCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassMultiviewCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceMultiviewFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMultiviewFeatures* toTransform)
 {
@@ -1859,11 +3676,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceMultiviewProperties(
+void transform_fromhost_VkPhysicalDeviceMultiviewFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMultiviewFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceMultiviewProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMultiviewProperties* toTransform)
 {
@@ -1871,11 +3700,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceVariablePointerFeatures(
+void transform_fromhost_VkPhysicalDeviceMultiviewProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMultiviewProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceVariablePointerFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceVariablePointerFeatures* toTransform)
 {
@@ -1883,11 +3724,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceProtectedMemoryFeatures(
+void transform_fromhost_VkPhysicalDeviceVariablePointerFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceVariablePointerFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceProtectedMemoryFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProtectedMemoryFeatures* toTransform)
 {
@@ -1895,11 +3748,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceProtectedMemoryProperties(
+void transform_fromhost_VkPhysicalDeviceProtectedMemoryFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProtectedMemoryFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceProtectedMemoryProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProtectedMemoryProperties* toTransform)
 {
@@ -1907,11 +3772,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceQueueInfo2(
+void transform_fromhost_VkPhysicalDeviceProtectedMemoryProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProtectedMemoryProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceQueueInfo2(
     ResourceTracker* resourceTracker,
     VkDeviceQueueInfo2* toTransform)
 {
@@ -1919,11 +3796,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkProtectedSubmitInfo(
+void transform_fromhost_VkDeviceQueueInfo2(
+    ResourceTracker* resourceTracker,
+    VkDeviceQueueInfo2* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkProtectedSubmitInfo(
     ResourceTracker* resourceTracker,
     VkProtectedSubmitInfo* toTransform)
 {
@@ -1931,11 +3820,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSamplerYcbcrConversionCreateInfo(
+void transform_fromhost_VkProtectedSubmitInfo(
+    ResourceTracker* resourceTracker,
+    VkProtectedSubmitInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSamplerYcbcrConversionCreateInfo(
     ResourceTracker* resourceTracker,
     VkSamplerYcbcrConversionCreateInfo* toTransform)
 {
@@ -1943,12 +3844,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->components));
+    transform_tohost_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->components));
 }
 
-void transform_VkSamplerYcbcrConversionInfo(
+void transform_fromhost_VkSamplerYcbcrConversionCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkSamplerYcbcrConversionCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->components));
+}
+
+void transform_tohost_VkSamplerYcbcrConversionInfo(
     ResourceTracker* resourceTracker,
     VkSamplerYcbcrConversionInfo* toTransform)
 {
@@ -1956,11 +3870,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBindImagePlaneMemoryInfo(
+void transform_fromhost_VkSamplerYcbcrConversionInfo(
+    ResourceTracker* resourceTracker,
+    VkSamplerYcbcrConversionInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBindImagePlaneMemoryInfo(
     ResourceTracker* resourceTracker,
     VkBindImagePlaneMemoryInfo* toTransform)
 {
@@ -1968,11 +3894,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkImagePlaneMemoryRequirementsInfo(
+void transform_fromhost_VkBindImagePlaneMemoryInfo(
+    ResourceTracker* resourceTracker,
+    VkBindImagePlaneMemoryInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImagePlaneMemoryRequirementsInfo(
     ResourceTracker* resourceTracker,
     VkImagePlaneMemoryRequirementsInfo* toTransform)
 {
@@ -1980,11 +3918,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
+void transform_fromhost_VkImagePlaneMemoryRequirementsInfo(
+    ResourceTracker* resourceTracker,
+    VkImagePlaneMemoryRequirementsInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSamplerYcbcrConversionFeatures* toTransform)
 {
@@ -1992,11 +3942,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSamplerYcbcrConversionImageFormatProperties(
+void transform_fromhost_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSamplerYcbcrConversionFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSamplerYcbcrConversionImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkSamplerYcbcrConversionImageFormatProperties* toTransform)
 {
@@ -2004,11 +3966,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDescriptorUpdateTemplateEntry(
+void transform_fromhost_VkSamplerYcbcrConversionImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkSamplerYcbcrConversionImageFormatProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDescriptorUpdateTemplateEntry(
     ResourceTracker* resourceTracker,
     VkDescriptorUpdateTemplateEntry* toTransform)
 {
@@ -2016,7 +3990,15 @@
     (void)toTransform;
 }
 
-void transform_VkDescriptorUpdateTemplateCreateInfo(
+void transform_fromhost_VkDescriptorUpdateTemplateEntry(
+    ResourceTracker* resourceTracker,
+    VkDescriptorUpdateTemplateEntry* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorUpdateTemplateCreateInfo* toTransform)
 {
@@ -2024,18 +4006,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pDescriptorUpdateEntries)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->descriptorUpdateEntryCount; ++i)
         {
-            transform_VkDescriptorUpdateTemplateEntry(resourceTracker, (VkDescriptorUpdateTemplateEntry*)(toTransform->pDescriptorUpdateEntries + i));
+            transform_tohost_VkDescriptorUpdateTemplateEntry(resourceTracker, (VkDescriptorUpdateTemplateEntry*)(toTransform->pDescriptorUpdateEntries + i));
         }
     }
 }
 
-void transform_VkExternalMemoryProperties(
+void transform_fromhost_VkDescriptorUpdateTemplateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorUpdateTemplateCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pDescriptorUpdateEntries)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->descriptorUpdateEntryCount; ++i)
+        {
+            transform_fromhost_VkDescriptorUpdateTemplateEntry(resourceTracker, (VkDescriptorUpdateTemplateEntry*)(toTransform->pDescriptorUpdateEntries + i));
+        }
+    }
+}
+
+void transform_tohost_VkExternalMemoryProperties(
     ResourceTracker* resourceTracker,
     VkExternalMemoryProperties* toTransform)
 {
@@ -2043,7 +4044,15 @@
     (void)toTransform;
 }
 
-void transform_VkPhysicalDeviceExternalImageFormatInfo(
+void transform_fromhost_VkExternalMemoryProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPhysicalDeviceExternalImageFormatInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalImageFormatInfo* toTransform)
 {
@@ -2051,11 +4060,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalImageFormatProperties(
+void transform_fromhost_VkPhysicalDeviceExternalImageFormatInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalImageFormatInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkExternalImageFormatProperties* toTransform)
 {
@@ -2063,12 +4084,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExternalMemoryProperties(resourceTracker, (VkExternalMemoryProperties*)(&toTransform->externalMemoryProperties));
+    transform_tohost_VkExternalMemoryProperties(resourceTracker, (VkExternalMemoryProperties*)(&toTransform->externalMemoryProperties));
 }
 
-void transform_VkPhysicalDeviceExternalBufferInfo(
+void transform_fromhost_VkExternalImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalImageFormatProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExternalMemoryProperties(resourceTracker, (VkExternalMemoryProperties*)(&toTransform->externalMemoryProperties));
+}
+
+void transform_tohost_VkPhysicalDeviceExternalBufferInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalBufferInfo* toTransform)
 {
@@ -2076,11 +4110,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalBufferProperties(
+void transform_fromhost_VkPhysicalDeviceExternalBufferInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalBufferInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalBufferProperties(
     ResourceTracker* resourceTracker,
     VkExternalBufferProperties* toTransform)
 {
@@ -2088,12 +4134,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExternalMemoryProperties(resourceTracker, (VkExternalMemoryProperties*)(&toTransform->externalMemoryProperties));
+    transform_tohost_VkExternalMemoryProperties(resourceTracker, (VkExternalMemoryProperties*)(&toTransform->externalMemoryProperties));
 }
 
-void transform_VkPhysicalDeviceIDProperties(
+void transform_fromhost_VkExternalBufferProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalBufferProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExternalMemoryProperties(resourceTracker, (VkExternalMemoryProperties*)(&toTransform->externalMemoryProperties));
+}
+
+void transform_tohost_VkPhysicalDeviceIDProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceIDProperties* toTransform)
 {
@@ -2101,11 +4160,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalMemoryImageCreateInfo(
+void transform_fromhost_VkPhysicalDeviceIDProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceIDProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalMemoryImageCreateInfo(
     ResourceTracker* resourceTracker,
     VkExternalMemoryImageCreateInfo* toTransform)
 {
@@ -2113,11 +4184,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalMemoryBufferCreateInfo(
+void transform_fromhost_VkExternalMemoryImageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryImageCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalMemoryBufferCreateInfo(
     ResourceTracker* resourceTracker,
     VkExternalMemoryBufferCreateInfo* toTransform)
 {
@@ -2125,11 +4208,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportMemoryAllocateInfo(
+void transform_fromhost_VkExternalMemoryBufferCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryBufferCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportMemoryAllocateInfo(
     ResourceTracker* resourceTracker,
     VkExportMemoryAllocateInfo* toTransform)
 {
@@ -2137,11 +4232,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceExternalFenceInfo(
+void transform_fromhost_VkExportMemoryAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryAllocateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceExternalFenceInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalFenceInfo* toTransform)
 {
@@ -2149,11 +4256,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalFenceProperties(
+void transform_fromhost_VkPhysicalDeviceExternalFenceInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalFenceInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalFenceProperties(
     ResourceTracker* resourceTracker,
     VkExternalFenceProperties* toTransform)
 {
@@ -2161,11 +4280,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportFenceCreateInfo(
+void transform_fromhost_VkExternalFenceProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalFenceProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportFenceCreateInfo(
     ResourceTracker* resourceTracker,
     VkExportFenceCreateInfo* toTransform)
 {
@@ -2173,11 +4304,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportSemaphoreCreateInfo(
+void transform_fromhost_VkExportFenceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExportFenceCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportSemaphoreCreateInfo(
     ResourceTracker* resourceTracker,
     VkExportSemaphoreCreateInfo* toTransform)
 {
@@ -2185,11 +4328,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceExternalSemaphoreInfo(
+void transform_fromhost_VkExportSemaphoreCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExportSemaphoreCreateInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalSemaphoreInfo* toTransform)
 {
@@ -2197,11 +4352,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalSemaphoreProperties(
+void transform_fromhost_VkPhysicalDeviceExternalSemaphoreInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalSemaphoreInfo* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalSemaphoreProperties(
     ResourceTracker* resourceTracker,
     VkExternalSemaphoreProperties* toTransform)
 {
@@ -2209,11 +4376,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceMaintenance3Properties(
+void transform_fromhost_VkExternalSemaphoreProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalSemaphoreProperties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceMaintenance3Properties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMaintenance3Properties* toTransform)
 {
@@ -2221,11 +4400,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDescriptorSetLayoutSupport(
+void transform_fromhost_VkPhysicalDeviceMaintenance3Properties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMaintenance3Properties* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDescriptorSetLayoutSupport(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutSupport* toTransform)
 {
@@ -2233,11 +4424,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceShaderDrawParameterFeatures(
+void transform_fromhost_VkDescriptorSetLayoutSupport(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutSupport* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceShaderDrawParameterFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceShaderDrawParameterFeatures* toTransform)
 {
@@ -2245,24 +4448,55 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceShaderDrawParameterFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceShaderDrawParameterFeatures* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_surface
-void transform_VkSurfaceCapabilitiesKHR(
+void transform_tohost_VkSurfaceCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkSurfaceCapabilitiesKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->currentExtent));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minImageExtent));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxImageExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->currentExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minImageExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxImageExtent));
 }
 
-void transform_VkSurfaceFormatKHR(
+void transform_fromhost_VkSurfaceCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceCapabilitiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->currentExtent));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minImageExtent));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxImageExtent));
+}
+
+void transform_tohost_VkSurfaceFormatKHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceFormatKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_fromhost_VkSurfaceFormatKHR(
     ResourceTracker* resourceTracker,
     VkSurfaceFormatKHR* toTransform)
 {
@@ -2272,7 +4506,7 @@
 
 #endif
 #ifdef VK_KHR_swapchain
-void transform_VkSwapchainCreateInfoKHR(
+void transform_tohost_VkSwapchainCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkSwapchainCreateInfoKHR* toTransform)
 {
@@ -2280,12 +4514,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->imageExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->imageExtent));
 }
 
-void transform_VkPresentInfoKHR(
+void transform_fromhost_VkSwapchainCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSwapchainCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->imageExtent));
+}
+
+void transform_tohost_VkPresentInfoKHR(
     ResourceTracker* resourceTracker,
     VkPresentInfoKHR* toTransform)
 {
@@ -2293,11 +4540,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkImageSwapchainCreateInfoKHR(
+void transform_fromhost_VkPresentInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkPresentInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImageSwapchainCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkImageSwapchainCreateInfoKHR* toTransform)
 {
@@ -2305,11 +4564,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkBindImageMemorySwapchainInfoKHR(
+void transform_fromhost_VkImageSwapchainCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImageSwapchainCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBindImageMemorySwapchainInfoKHR(
     ResourceTracker* resourceTracker,
     VkBindImageMemorySwapchainInfoKHR* toTransform)
 {
@@ -2317,11 +4588,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkAcquireNextImageInfoKHR(
+void transform_fromhost_VkBindImageMemorySwapchainInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkBindImageMemorySwapchainInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkAcquireNextImageInfoKHR(
     ResourceTracker* resourceTracker,
     VkAcquireNextImageInfoKHR* toTransform)
 {
@@ -2329,11 +4612,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupPresentCapabilitiesKHR(
+void transform_fromhost_VkAcquireNextImageInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkAcquireNextImageInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupPresentCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkDeviceGroupPresentCapabilitiesKHR* toTransform)
 {
@@ -2341,11 +4636,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupPresentInfoKHR(
+void transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupPresentCapabilitiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupPresentInfoKHR(
     ResourceTracker* resourceTracker,
     VkDeviceGroupPresentInfoKHR* toTransform)
 {
@@ -2353,11 +4660,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGroupSwapchainCreateInfoKHR(
+void transform_fromhost_VkDeviceGroupPresentInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupPresentInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGroupSwapchainCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkDeviceGroupSwapchainCreateInfoKHR* toTransform)
 {
@@ -2365,41 +4684,81 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDeviceGroupSwapchainCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupSwapchainCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_display
-void transform_VkDisplayPropertiesKHR(
+void transform_tohost_VkDisplayPropertiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPropertiesKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->physicalDimensions));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->physicalResolution));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->physicalDimensions));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->physicalResolution));
 }
 
-void transform_VkDisplayModeParametersKHR(
+void transform_fromhost_VkDisplayPropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPropertiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->physicalDimensions));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->physicalResolution));
+}
+
+void transform_tohost_VkDisplayModeParametersKHR(
     ResourceTracker* resourceTracker,
     VkDisplayModeParametersKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->visibleRegion));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->visibleRegion));
 }
 
-void transform_VkDisplayModePropertiesKHR(
+void transform_fromhost_VkDisplayModeParametersKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModeParametersKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->visibleRegion));
+}
+
+void transform_tohost_VkDisplayModePropertiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayModePropertiesKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkDisplayModeParametersKHR(resourceTracker, (VkDisplayModeParametersKHR*)(&toTransform->parameters));
+    transform_tohost_VkDisplayModeParametersKHR(resourceTracker, (VkDisplayModeParametersKHR*)(&toTransform->parameters));
 }
 
-void transform_VkDisplayModeCreateInfoKHR(
+void transform_fromhost_VkDisplayModePropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModePropertiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkDisplayModeParametersKHR(resourceTracker, (VkDisplayModeParametersKHR*)(&toTransform->parameters));
+}
+
+void transform_tohost_VkDisplayModeCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkDisplayModeCreateInfoKHR* toTransform)
 {
@@ -2407,28 +4766,57 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkDisplayModeParametersKHR(resourceTracker, (VkDisplayModeParametersKHR*)(&toTransform->parameters));
+    transform_tohost_VkDisplayModeParametersKHR(resourceTracker, (VkDisplayModeParametersKHR*)(&toTransform->parameters));
 }
 
-void transform_VkDisplayPlaneCapabilitiesKHR(
+void transform_fromhost_VkDisplayModeCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModeCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkDisplayModeParametersKHR(resourceTracker, (VkDisplayModeParametersKHR*)(&toTransform->parameters));
+}
+
+void transform_tohost_VkDisplayPlaneCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneCapabilitiesKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->minSrcPosition));
-    transform_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->maxSrcPosition));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minSrcExtent));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSrcExtent));
-    transform_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->minDstPosition));
-    transform_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->maxDstPosition));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minDstExtent));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxDstExtent));
+    transform_tohost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->minSrcPosition));
+    transform_tohost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->maxSrcPosition));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minSrcExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSrcExtent));
+    transform_tohost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->minDstPosition));
+    transform_tohost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->maxDstPosition));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minDstExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxDstExtent));
 }
 
-void transform_VkDisplayPlanePropertiesKHR(
+void transform_fromhost_VkDisplayPlaneCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneCapabilitiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->minSrcPosition));
+    transform_fromhost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->maxSrcPosition));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minSrcExtent));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSrcExtent));
+    transform_fromhost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->minDstPosition));
+    transform_fromhost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->maxDstPosition));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minDstExtent));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxDstExtent));
+}
+
+void transform_tohost_VkDisplayPlanePropertiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlanePropertiesKHR* toTransform)
 {
@@ -2436,7 +4824,15 @@
     (void)toTransform;
 }
 
-void transform_VkDisplaySurfaceCreateInfoKHR(
+void transform_fromhost_VkDisplayPlanePropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlanePropertiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkDisplaySurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkDisplaySurfaceCreateInfoKHR* toTransform)
 {
@@ -2444,14 +4840,27 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->imageExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->imageExtent));
+}
+
+void transform_fromhost_VkDisplaySurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplaySurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->imageExtent));
 }
 
 #endif
 #ifdef VK_KHR_display_swapchain
-void transform_VkDisplayPresentInfoKHR(
+void transform_tohost_VkDisplayPresentInfoKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPresentInfoKHR* toTransform)
 {
@@ -2459,15 +4868,29 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->srcRect));
-    transform_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->dstRect));
+    transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->srcRect));
+    transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->dstRect));
+}
+
+void transform_fromhost_VkDisplayPresentInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPresentInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->srcRect));
+    transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(&toTransform->dstRect));
 }
 
 #endif
 #ifdef VK_KHR_xlib_surface
-void transform_VkXlibSurfaceCreateInfoKHR(
+void transform_tohost_VkXlibSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkXlibSurfaceCreateInfoKHR* toTransform)
 {
@@ -2475,13 +4898,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkXlibSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkXlibSurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_xcb_surface
-void transform_VkXcbSurfaceCreateInfoKHR(
+void transform_tohost_VkXcbSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkXcbSurfaceCreateInfoKHR* toTransform)
 {
@@ -2489,13 +4924,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkXcbSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkXcbSurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_wayland_surface
-void transform_VkWaylandSurfaceCreateInfoKHR(
+void transform_tohost_VkWaylandSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkWaylandSurfaceCreateInfoKHR* toTransform)
 {
@@ -2503,13 +4950,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkWaylandSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkWaylandSurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_mir_surface
-void transform_VkMirSurfaceCreateInfoKHR(
+void transform_tohost_VkMirSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkMirSurfaceCreateInfoKHR* toTransform)
 {
@@ -2517,13 +4976,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkMirSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkMirSurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_android_surface
-void transform_VkAndroidSurfaceCreateInfoKHR(
+void transform_tohost_VkAndroidSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkAndroidSurfaceCreateInfoKHR* toTransform)
 {
@@ -2531,13 +5002,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkAndroidSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkAndroidSurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_win32_surface
-void transform_VkWin32SurfaceCreateInfoKHR(
+void transform_tohost_VkWin32SurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkWin32SurfaceCreateInfoKHR* toTransform)
 {
@@ -2545,7 +5028,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkWin32SurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkWin32SurfaceCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -2569,7 +5064,7 @@
 #ifdef VK_KHR_external_memory
 #endif
 #ifdef VK_KHR_external_memory_win32
-void transform_VkImportMemoryWin32HandleInfoKHR(
+void transform_tohost_VkImportMemoryWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportMemoryWin32HandleInfoKHR* toTransform)
 {
@@ -2577,11 +5072,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportMemoryWin32HandleInfoKHR(
+void transform_fromhost_VkImportMemoryWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportMemoryWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkExportMemoryWin32HandleInfoKHR* toTransform)
 {
@@ -2589,39 +5096,77 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryWin32HandlePropertiesKHR(
+void transform_fromhost_VkExportMemoryWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryWin32HandlePropertiesKHR(
     ResourceTracker* resourceTracker,
     VkMemoryWin32HandlePropertiesKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    resourceTracker->deviceMemoryTransform_tohost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryGetWin32HandleInfoKHR(
+void transform_fromhost_VkMemoryWin32HandlePropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryWin32HandlePropertiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryGetWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkMemoryGetWin32HandleInfoKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkMemoryGetWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryGetWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_external_memory_fd
-void transform_VkImportMemoryFdInfoKHR(
+void transform_tohost_VkImportMemoryFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportMemoryFdInfoKHR* toTransform)
 {
@@ -2629,48 +5174,99 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryFdPropertiesKHR(
+void transform_fromhost_VkImportMemoryFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryFdInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryFdPropertiesKHR(
     ResourceTracker* resourceTracker,
     VkMemoryFdPropertiesKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    resourceTracker->deviceMemoryTransform_tohost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryGetFdInfoKHR(
+void transform_fromhost_VkMemoryFdPropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryFdPropertiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryGetFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkMemoryGetFdInfoKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkMemoryGetFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryGetFdInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
-void transform_VkWin32KeyedMutexAcquireReleaseInfoKHR(
+void transform_tohost_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     ResourceTracker* resourceTracker,
     VkWin32KeyedMutexAcquireReleaseInfoKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(toTransform->pReleaseSyncs, toTransform->releaseCount, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(toTransform->pReleaseSyncs, toTransform->releaseCount, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkWin32KeyedMutexAcquireReleaseInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkWin32KeyedMutexAcquireReleaseInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(toTransform->pReleaseSyncs, toTransform->releaseCount, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -2680,7 +5276,7 @@
 #ifdef VK_KHR_external_semaphore
 #endif
 #ifdef VK_KHR_external_semaphore_win32
-void transform_VkImportSemaphoreWin32HandleInfoKHR(
+void transform_tohost_VkImportSemaphoreWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportSemaphoreWin32HandleInfoKHR* toTransform)
 {
@@ -2688,11 +5284,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportSemaphoreWin32HandleInfoKHR(
+void transform_fromhost_VkImportSemaphoreWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportSemaphoreWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportSemaphoreWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkExportSemaphoreWin32HandleInfoKHR* toTransform)
 {
@@ -2700,11 +5308,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkD3D12FenceSubmitInfoKHR(
+void transform_fromhost_VkExportSemaphoreWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkExportSemaphoreWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkD3D12FenceSubmitInfoKHR(
     ResourceTracker* resourceTracker,
     VkD3D12FenceSubmitInfoKHR* toTransform)
 {
@@ -2712,11 +5332,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSemaphoreGetWin32HandleInfoKHR(
+void transform_fromhost_VkD3D12FenceSubmitInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkD3D12FenceSubmitInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSemaphoreGetWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkSemaphoreGetWin32HandleInfoKHR* toTransform)
 {
@@ -2724,13 +5356,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkSemaphoreGetWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSemaphoreGetWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_external_semaphore_fd
-void transform_VkImportSemaphoreFdInfoKHR(
+void transform_tohost_VkImportSemaphoreFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportSemaphoreFdInfoKHR* toTransform)
 {
@@ -2738,11 +5382,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSemaphoreGetFdInfoKHR(
+void transform_fromhost_VkImportSemaphoreFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportSemaphoreFdInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSemaphoreGetFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkSemaphoreGetFdInfoKHR* toTransform)
 {
@@ -2750,13 +5406,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkSemaphoreGetFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSemaphoreGetFdInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_push_descriptor
-void transform_VkPhysicalDevicePushDescriptorPropertiesKHR(
+void transform_tohost_VkPhysicalDevicePushDescriptorPropertiesKHR(
     ResourceTracker* resourceTracker,
     VkPhysicalDevicePushDescriptorPropertiesKHR* toTransform)
 {
@@ -2764,7 +5432,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDevicePushDescriptorPropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevicePushDescriptorPropertiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -2772,17 +5452,27 @@
 #ifdef VK_KHR_16bit_storage
 #endif
 #ifdef VK_KHR_incremental_present
-void transform_VkRectLayerKHR(
+void transform_tohost_VkRectLayerKHR(
     ResourceTracker* resourceTracker,
     VkRectLayerKHR* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->offset));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->extent));
+    transform_tohost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->offset));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->extent));
 }
 
-void transform_VkPresentRegionKHR(
+void transform_fromhost_VkRectLayerKHR(
+    ResourceTracker* resourceTracker,
+    VkRectLayerKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkOffset2D(resourceTracker, (VkOffset2D*)(&toTransform->offset));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->extent));
+}
+
+void transform_tohost_VkPresentRegionKHR(
     ResourceTracker* resourceTracker,
     VkPresentRegionKHR* toTransform)
 {
@@ -2792,12 +5482,27 @@
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->rectangleCount; ++i)
         {
-            transform_VkRectLayerKHR(resourceTracker, (VkRectLayerKHR*)(toTransform->pRectangles + i));
+            transform_tohost_VkRectLayerKHR(resourceTracker, (VkRectLayerKHR*)(toTransform->pRectangles + i));
         }
     }
 }
 
-void transform_VkPresentRegionsKHR(
+void transform_fromhost_VkPresentRegionKHR(
+    ResourceTracker* resourceTracker,
+    VkPresentRegionKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pRectangles)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->rectangleCount; ++i)
+        {
+            transform_fromhost_VkRectLayerKHR(resourceTracker, (VkRectLayerKHR*)(toTransform->pRectangles + i));
+        }
+    }
+}
+
+void transform_tohost_VkPresentRegionsKHR(
     ResourceTracker* resourceTracker,
     VkPresentRegionsKHR* toTransform)
 {
@@ -2805,13 +5510,32 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pRegions)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->swapchainCount; ++i)
         {
-            transform_VkPresentRegionKHR(resourceTracker, (VkPresentRegionKHR*)(toTransform->pRegions + i));
+            transform_tohost_VkPresentRegionKHR(resourceTracker, (VkPresentRegionKHR*)(toTransform->pRegions + i));
+        }
+    }
+}
+
+void transform_fromhost_VkPresentRegionsKHR(
+    ResourceTracker* resourceTracker,
+    VkPresentRegionsKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pRegions)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->swapchainCount; ++i)
+        {
+            transform_fromhost_VkPresentRegionKHR(resourceTracker, (VkPresentRegionKHR*)(toTransform->pRegions + i));
         }
     }
 }
@@ -2820,7 +5544,7 @@
 #ifdef VK_KHR_descriptor_update_template
 #endif
 #ifdef VK_KHR_create_renderpass2
-void transform_VkAttachmentDescription2KHR(
+void transform_tohost_VkAttachmentDescription2KHR(
     ResourceTracker* resourceTracker,
     VkAttachmentDescription2KHR* toTransform)
 {
@@ -2828,11 +5552,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkAttachmentReference2KHR(
+void transform_fromhost_VkAttachmentDescription2KHR(
+    ResourceTracker* resourceTracker,
+    VkAttachmentDescription2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkAttachmentReference2KHR(
     ResourceTracker* resourceTracker,
     VkAttachmentReference2KHR* toTransform)
 {
@@ -2840,11 +5576,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSubpassDescription2KHR(
+void transform_fromhost_VkAttachmentReference2KHR(
+    ResourceTracker* resourceTracker,
+    VkAttachmentReference2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSubpassDescription2KHR(
     ResourceTracker* resourceTracker,
     VkSubpassDescription2KHR* toTransform)
 {
@@ -2852,36 +5600,73 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pInputAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->inputAttachmentCount; ++i)
         {
-            transform_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pInputAttachments + i));
+            transform_tohost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pInputAttachments + i));
         }
     }
     if (toTransform->pColorAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
         {
-            transform_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pColorAttachments + i));
+            transform_tohost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pColorAttachments + i));
         }
     }
     if (toTransform->pResolveAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
         {
-            transform_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pResolveAttachments + i));
+            transform_tohost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pResolveAttachments + i));
         }
     }
     if (toTransform->pDepthStencilAttachment)
     {
-        transform_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pDepthStencilAttachment));
+        transform_tohost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pDepthStencilAttachment));
     }
 }
 
-void transform_VkSubpassDependency2KHR(
+void transform_fromhost_VkSubpassDescription2KHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassDescription2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pInputAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->inputAttachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pInputAttachments + i));
+        }
+    }
+    if (toTransform->pColorAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pColorAttachments + i));
+        }
+    }
+    if (toTransform->pResolveAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->colorAttachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pResolveAttachments + i));
+        }
+    }
+    if (toTransform->pDepthStencilAttachment)
+    {
+        transform_fromhost_VkAttachmentReference2KHR(resourceTracker, (VkAttachmentReference2KHR*)(toTransform->pDepthStencilAttachment));
+    }
+}
+
+void transform_tohost_VkSubpassDependency2KHR(
     ResourceTracker* resourceTracker,
     VkSubpassDependency2KHR* toTransform)
 {
@@ -2889,11 +5674,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkRenderPassCreateInfo2KHR(
+void transform_fromhost_VkSubpassDependency2KHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassDependency2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkRenderPassCreateInfo2KHR(
     ResourceTracker* resourceTracker,
     VkRenderPassCreateInfo2KHR* toTransform)
 {
@@ -2901,32 +5698,65 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pAttachments)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentCount; ++i)
         {
-            transform_VkAttachmentDescription2KHR(resourceTracker, (VkAttachmentDescription2KHR*)(toTransform->pAttachments + i));
+            transform_tohost_VkAttachmentDescription2KHR(resourceTracker, (VkAttachmentDescription2KHR*)(toTransform->pAttachments + i));
         }
     }
     if (toTransform->pSubpasses)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->subpassCount; ++i)
         {
-            transform_VkSubpassDescription2KHR(resourceTracker, (VkSubpassDescription2KHR*)(toTransform->pSubpasses + i));
+            transform_tohost_VkSubpassDescription2KHR(resourceTracker, (VkSubpassDescription2KHR*)(toTransform->pSubpasses + i));
         }
     }
     if (toTransform->pDependencies)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->dependencyCount; ++i)
         {
-            transform_VkSubpassDependency2KHR(resourceTracker, (VkSubpassDependency2KHR*)(toTransform->pDependencies + i));
+            transform_tohost_VkSubpassDependency2KHR(resourceTracker, (VkSubpassDependency2KHR*)(toTransform->pDependencies + i));
         }
     }
 }
 
-void transform_VkSubpassBeginInfoKHR(
+void transform_fromhost_VkRenderPassCreateInfo2KHR(
+    ResourceTracker* resourceTracker,
+    VkRenderPassCreateInfo2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pAttachments)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentCount; ++i)
+        {
+            transform_fromhost_VkAttachmentDescription2KHR(resourceTracker, (VkAttachmentDescription2KHR*)(toTransform->pAttachments + i));
+        }
+    }
+    if (toTransform->pSubpasses)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->subpassCount; ++i)
+        {
+            transform_fromhost_VkSubpassDescription2KHR(resourceTracker, (VkSubpassDescription2KHR*)(toTransform->pSubpasses + i));
+        }
+    }
+    if (toTransform->pDependencies)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->dependencyCount; ++i)
+        {
+            transform_fromhost_VkSubpassDependency2KHR(resourceTracker, (VkSubpassDependency2KHR*)(toTransform->pDependencies + i));
+        }
+    }
+}
+
+void transform_tohost_VkSubpassBeginInfoKHR(
     ResourceTracker* resourceTracker,
     VkSubpassBeginInfoKHR* toTransform)
 {
@@ -2934,11 +5764,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSubpassEndInfoKHR(
+void transform_fromhost_VkSubpassBeginInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassBeginInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSubpassEndInfoKHR(
     ResourceTracker* resourceTracker,
     VkSubpassEndInfoKHR* toTransform)
 {
@@ -2946,13 +5788,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkSubpassEndInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassEndInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_shared_presentable_image
-void transform_VkSharedPresentSurfaceCapabilitiesKHR(
+void transform_tohost_VkSharedPresentSurfaceCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkSharedPresentSurfaceCapabilitiesKHR* toTransform)
 {
@@ -2960,7 +5814,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkSharedPresentSurfaceCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkSharedPresentSurfaceCapabilitiesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -2970,7 +5836,7 @@
 #ifdef VK_KHR_external_fence
 #endif
 #ifdef VK_KHR_external_fence_win32
-void transform_VkImportFenceWin32HandleInfoKHR(
+void transform_tohost_VkImportFenceWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportFenceWin32HandleInfoKHR* toTransform)
 {
@@ -2978,11 +5844,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportFenceWin32HandleInfoKHR(
+void transform_fromhost_VkImportFenceWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportFenceWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportFenceWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkExportFenceWin32HandleInfoKHR* toTransform)
 {
@@ -2990,11 +5868,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkFenceGetWin32HandleInfoKHR(
+void transform_fromhost_VkExportFenceWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkExportFenceWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkFenceGetWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkFenceGetWin32HandleInfoKHR* toTransform)
 {
@@ -3002,13 +5892,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkFenceGetWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkFenceGetWin32HandleInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_KHR_external_fence_fd
-void transform_VkImportFenceFdInfoKHR(
+void transform_tohost_VkImportFenceFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportFenceFdInfoKHR* toTransform)
 {
@@ -3016,11 +5918,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkFenceGetFdInfoKHR(
+void transform_fromhost_VkImportFenceFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportFenceFdInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkFenceGetFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkFenceGetFdInfoKHR* toTransform)
 {
@@ -3028,7 +5942,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkFenceGetFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkFenceGetFdInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3036,7 +5962,7 @@
 #ifdef VK_KHR_maintenance2
 #endif
 #ifdef VK_KHR_get_surface_capabilities2
-void transform_VkPhysicalDeviceSurfaceInfo2KHR(
+void transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSurfaceInfo2KHR* toTransform)
 {
@@ -3044,11 +5970,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSurfaceCapabilities2KHR(
+void transform_fromhost_VkPhysicalDeviceSurfaceInfo2KHR(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSurfaceInfo2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSurfaceCapabilities2KHR(
     ResourceTracker* resourceTracker,
     VkSurfaceCapabilities2KHR* toTransform)
 {
@@ -3056,12 +5994,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkSurfaceCapabilitiesKHR(resourceTracker, (VkSurfaceCapabilitiesKHR*)(&toTransform->surfaceCapabilities));
+    transform_tohost_VkSurfaceCapabilitiesKHR(resourceTracker, (VkSurfaceCapabilitiesKHR*)(&toTransform->surfaceCapabilities));
 }
 
-void transform_VkSurfaceFormat2KHR(
+void transform_fromhost_VkSurfaceCapabilities2KHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceCapabilities2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkSurfaceCapabilitiesKHR(resourceTracker, (VkSurfaceCapabilitiesKHR*)(&toTransform->surfaceCapabilities));
+}
+
+void transform_tohost_VkSurfaceFormat2KHR(
     ResourceTracker* resourceTracker,
     VkSurfaceFormat2KHR* toTransform)
 {
@@ -3069,16 +6020,29 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkSurfaceFormatKHR(resourceTracker, (VkSurfaceFormatKHR*)(&toTransform->surfaceFormat));
+    transform_tohost_VkSurfaceFormatKHR(resourceTracker, (VkSurfaceFormatKHR*)(&toTransform->surfaceFormat));
+}
+
+void transform_fromhost_VkSurfaceFormat2KHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceFormat2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkSurfaceFormatKHR(resourceTracker, (VkSurfaceFormatKHR*)(&toTransform->surfaceFormat));
 }
 
 #endif
 #ifdef VK_KHR_variable_pointers
 #endif
 #ifdef VK_KHR_get_display_properties2
-void transform_VkDisplayProperties2KHR(
+void transform_tohost_VkDisplayProperties2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayProperties2KHR* toTransform)
 {
@@ -3086,12 +6050,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkDisplayPropertiesKHR(resourceTracker, (VkDisplayPropertiesKHR*)(&toTransform->displayProperties));
+    transform_tohost_VkDisplayPropertiesKHR(resourceTracker, (VkDisplayPropertiesKHR*)(&toTransform->displayProperties));
 }
 
-void transform_VkDisplayPlaneProperties2KHR(
+void transform_fromhost_VkDisplayProperties2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayProperties2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkDisplayPropertiesKHR(resourceTracker, (VkDisplayPropertiesKHR*)(&toTransform->displayProperties));
+}
+
+void transform_tohost_VkDisplayPlaneProperties2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneProperties2KHR* toTransform)
 {
@@ -3099,12 +6076,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkDisplayPlanePropertiesKHR(resourceTracker, (VkDisplayPlanePropertiesKHR*)(&toTransform->displayPlaneProperties));
+    transform_tohost_VkDisplayPlanePropertiesKHR(resourceTracker, (VkDisplayPlanePropertiesKHR*)(&toTransform->displayPlaneProperties));
 }
 
-void transform_VkDisplayModeProperties2KHR(
+void transform_fromhost_VkDisplayPlaneProperties2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneProperties2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkDisplayPlanePropertiesKHR(resourceTracker, (VkDisplayPlanePropertiesKHR*)(&toTransform->displayPlaneProperties));
+}
+
+void transform_tohost_VkDisplayModeProperties2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayModeProperties2KHR* toTransform)
 {
@@ -3112,12 +6102,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkDisplayModePropertiesKHR(resourceTracker, (VkDisplayModePropertiesKHR*)(&toTransform->displayModeProperties));
+    transform_tohost_VkDisplayModePropertiesKHR(resourceTracker, (VkDisplayModePropertiesKHR*)(&toTransform->displayModeProperties));
 }
 
-void transform_VkDisplayPlaneInfo2KHR(
+void transform_fromhost_VkDisplayModeProperties2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModeProperties2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkDisplayModePropertiesKHR(resourceTracker, (VkDisplayModePropertiesKHR*)(&toTransform->displayModeProperties));
+}
+
+void transform_tohost_VkDisplayPlaneInfo2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneInfo2KHR* toTransform)
 {
@@ -3125,11 +6128,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDisplayPlaneCapabilities2KHR(
+void transform_fromhost_VkDisplayPlaneInfo2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneInfo2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDisplayPlaneCapabilities2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneCapabilities2KHR* toTransform)
 {
@@ -3137,9 +6152,22 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkDisplayPlaneCapabilitiesKHR(resourceTracker, (VkDisplayPlaneCapabilitiesKHR*)(&toTransform->capabilities));
+    transform_tohost_VkDisplayPlaneCapabilitiesKHR(resourceTracker, (VkDisplayPlaneCapabilitiesKHR*)(&toTransform->capabilities));
+}
+
+void transform_fromhost_VkDisplayPlaneCapabilities2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneCapabilities2KHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkDisplayPlaneCapabilitiesKHR(resourceTracker, (VkDisplayPlaneCapabilitiesKHR*)(&toTransform->capabilities));
 }
 
 #endif
@@ -3152,7 +6180,7 @@
 #ifdef VK_KHR_get_memory_requirements2
 #endif
 #ifdef VK_KHR_image_format_list
-void transform_VkImageFormatListCreateInfoKHR(
+void transform_tohost_VkImageFormatListCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkImageFormatListCreateInfoKHR* toTransform)
 {
@@ -3160,7 +6188,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkImageFormatListCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImageFormatListCreateInfoKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3174,7 +6214,7 @@
 #ifdef VK_KHR_draw_indirect_count
 #endif
 #ifdef VK_KHR_8bit_storage
-void transform_VkPhysicalDevice8BitStorageFeaturesKHR(
+void transform_tohost_VkPhysicalDevice8BitStorageFeaturesKHR(
     ResourceTracker* resourceTracker,
     VkPhysicalDevice8BitStorageFeaturesKHR* toTransform)
 {
@@ -3182,13 +6222,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDevice8BitStorageFeaturesKHR(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevice8BitStorageFeaturesKHR* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_ANDROID_native_buffer
-void transform_VkNativeBufferANDROID(
+void transform_tohost_VkNativeBufferANDROID(
     ResourceTracker* resourceTracker,
     VkNativeBufferANDROID* toTransform)
 {
@@ -3196,13 +6248,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkNativeBufferANDROID(
+    ResourceTracker* resourceTracker,
+    VkNativeBufferANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_EXT_debug_report
-void transform_VkDebugReportCallbackCreateInfoEXT(
+void transform_tohost_VkDebugReportCallbackCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugReportCallbackCreateInfoEXT* toTransform)
 {
@@ -3210,7 +6274,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDebugReportCallbackCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugReportCallbackCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3222,7 +6298,7 @@
 #ifdef VK_IMG_filter_cubic
 #endif
 #ifdef VK_AMD_rasterization_order
-void transform_VkPipelineRasterizationStateRasterizationOrderAMD(
+void transform_tohost_VkPipelineRasterizationStateRasterizationOrderAMD(
     ResourceTracker* resourceTracker,
     VkPipelineRasterizationStateRasterizationOrderAMD* toTransform)
 {
@@ -3230,7 +6306,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPipelineRasterizationStateRasterizationOrderAMD(
+    ResourceTracker* resourceTracker,
+    VkPipelineRasterizationStateRasterizationOrderAMD* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3240,7 +6328,7 @@
 #ifdef VK_AMD_shader_explicit_vertex_parameter
 #endif
 #ifdef VK_EXT_debug_marker
-void transform_VkDebugMarkerObjectNameInfoEXT(
+void transform_tohost_VkDebugMarkerObjectNameInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugMarkerObjectNameInfoEXT* toTransform)
 {
@@ -3248,11 +6336,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDebugMarkerObjectTagInfoEXT(
+void transform_fromhost_VkDebugMarkerObjectNameInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugMarkerObjectNameInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDebugMarkerObjectTagInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugMarkerObjectTagInfoEXT* toTransform)
 {
@@ -3260,11 +6360,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDebugMarkerMarkerInfoEXT(
+void transform_fromhost_VkDebugMarkerObjectTagInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugMarkerObjectTagInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDebugMarkerMarkerInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugMarkerMarkerInfoEXT* toTransform)
 {
@@ -3272,7 +6384,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDebugMarkerMarkerInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugMarkerMarkerInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3280,7 +6404,7 @@
 #ifdef VK_AMD_gcn_shader
 #endif
 #ifdef VK_NV_dedicated_allocation
-void transform_VkDedicatedAllocationImageCreateInfoNV(
+void transform_tohost_VkDedicatedAllocationImageCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkDedicatedAllocationImageCreateInfoNV* toTransform)
 {
@@ -3288,11 +6412,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDedicatedAllocationBufferCreateInfoNV(
+void transform_fromhost_VkDedicatedAllocationImageCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkDedicatedAllocationImageCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDedicatedAllocationBufferCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkDedicatedAllocationBufferCreateInfoNV* toTransform)
 {
@@ -3300,11 +6436,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDedicatedAllocationMemoryAllocateInfoNV(
+void transform_fromhost_VkDedicatedAllocationBufferCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkDedicatedAllocationBufferCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDedicatedAllocationMemoryAllocateInfoNV(
     ResourceTracker* resourceTracker,
     VkDedicatedAllocationMemoryAllocateInfoNV* toTransform)
 {
@@ -3312,7 +6460,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDedicatedAllocationMemoryAllocateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkDedicatedAllocationMemoryAllocateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3326,7 +6486,7 @@
 #ifdef VK_AMD_shader_ballot
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
-void transform_VkTextureLODGatherFormatPropertiesAMD(
+void transform_tohost_VkTextureLODGatherFormatPropertiesAMD(
     ResourceTracker* resourceTracker,
     VkTextureLODGatherFormatPropertiesAMD* toTransform)
 {
@@ -3334,13 +6494,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkTextureLODGatherFormatPropertiesAMD(
+    ResourceTracker* resourceTracker,
+    VkTextureLODGatherFormatPropertiesAMD* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_AMD_shader_info
-void transform_VkShaderResourceUsageAMD(
+void transform_tohost_VkShaderResourceUsageAMD(
     ResourceTracker* resourceTracker,
     VkShaderResourceUsageAMD* toTransform)
 {
@@ -3348,13 +6520,30 @@
     (void)toTransform;
 }
 
-void transform_VkShaderStatisticsInfoAMD(
+void transform_fromhost_VkShaderResourceUsageAMD(
+    ResourceTracker* resourceTracker,
+    VkShaderResourceUsageAMD* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkShaderStatisticsInfoAMD(
     ResourceTracker* resourceTracker,
     VkShaderStatisticsInfoAMD* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkShaderResourceUsageAMD(resourceTracker, (VkShaderResourceUsageAMD*)(&toTransform->resourceUsage));
+    transform_tohost_VkShaderResourceUsageAMD(resourceTracker, (VkShaderResourceUsageAMD*)(&toTransform->resourceUsage));
+}
+
+void transform_fromhost_VkShaderStatisticsInfoAMD(
+    ResourceTracker* resourceTracker,
+    VkShaderStatisticsInfoAMD* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkShaderResourceUsageAMD(resourceTracker, (VkShaderResourceUsageAMD*)(&toTransform->resourceUsage));
 }
 
 #endif
@@ -3363,18 +6552,27 @@
 #ifdef VK_IMG_format_pvrtc
 #endif
 #ifdef VK_NV_external_memory_capabilities
-void transform_VkExternalImageFormatPropertiesNV(
+void transform_tohost_VkExternalImageFormatPropertiesNV(
     ResourceTracker* resourceTracker,
     VkExternalImageFormatPropertiesNV* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkImageFormatProperties(resourceTracker, (VkImageFormatProperties*)(&toTransform->imageFormatProperties));
+    transform_tohost_VkImageFormatProperties(resourceTracker, (VkImageFormatProperties*)(&toTransform->imageFormatProperties));
+}
+
+void transform_fromhost_VkExternalImageFormatPropertiesNV(
+    ResourceTracker* resourceTracker,
+    VkExternalImageFormatPropertiesNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkImageFormatProperties(resourceTracker, (VkImageFormatProperties*)(&toTransform->imageFormatProperties));
 }
 
 #endif
 #ifdef VK_NV_external_memory
-void transform_VkExternalMemoryImageCreateInfoNV(
+void transform_tohost_VkExternalMemoryImageCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkExternalMemoryImageCreateInfoNV* toTransform)
 {
@@ -3382,11 +6580,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportMemoryAllocateInfoNV(
+void transform_fromhost_VkExternalMemoryImageCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryImageCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportMemoryAllocateInfoNV(
     ResourceTracker* resourceTracker,
     VkExportMemoryAllocateInfoNV* toTransform)
 {
@@ -3394,13 +6604,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkExportMemoryAllocateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryAllocateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NV_external_memory_win32
-void transform_VkImportMemoryWin32HandleInfoNV(
+void transform_tohost_VkImportMemoryWin32HandleInfoNV(
     ResourceTracker* resourceTracker,
     VkImportMemoryWin32HandleInfoNV* toTransform)
 {
@@ -3408,11 +6630,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExportMemoryWin32HandleInfoNV(
+void transform_fromhost_VkImportMemoryWin32HandleInfoNV(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryWin32HandleInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExportMemoryWin32HandleInfoNV(
     ResourceTracker* resourceTracker,
     VkExportMemoryWin32HandleInfoNV* toTransform)
 {
@@ -3420,28 +6654,53 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkExportMemoryWin32HandleInfoNV(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryWin32HandleInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NV_win32_keyed_mutex
-void transform_VkWin32KeyedMutexAcquireReleaseInfoNV(
+void transform_tohost_VkWin32KeyedMutexAcquireReleaseInfoNV(
     ResourceTracker* resourceTracker,
     VkWin32KeyedMutexAcquireReleaseInfoNV* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(toTransform->pReleaseSyncs, toTransform->releaseCount, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(toTransform->pReleaseSyncs, toTransform->releaseCount, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkWin32KeyedMutexAcquireReleaseInfoNV(
+    ResourceTracker* resourceTracker,
+    VkWin32KeyedMutexAcquireReleaseInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(toTransform->pReleaseSyncs, toTransform->releaseCount, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_EXT_validation_flags
-void transform_VkValidationFlagsEXT(
+void transform_tohost_VkValidationFlagsEXT(
     ResourceTracker* resourceTracker,
     VkValidationFlagsEXT* toTransform)
 {
@@ -3449,13 +6708,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkValidationFlagsEXT(
+    ResourceTracker* resourceTracker,
+    VkValidationFlagsEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NN_vi_surface
-void transform_VkViSurfaceCreateInfoNN(
+void transform_tohost_VkViSurfaceCreateInfoNN(
     ResourceTracker* resourceTracker,
     VkViSurfaceCreateInfoNN* toTransform)
 {
@@ -3463,7 +6734,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkViSurfaceCreateInfoNN(
+    ResourceTracker* resourceTracker,
+    VkViSurfaceCreateInfoNN* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3473,7 +6756,7 @@
 #ifdef VK_EXT_shader_subgroup_vote
 #endif
 #ifdef VK_EXT_conditional_rendering
-void transform_VkConditionalRenderingBeginInfoEXT(
+void transform_tohost_VkConditionalRenderingBeginInfoEXT(
     ResourceTracker* resourceTracker,
     VkConditionalRenderingBeginInfoEXT* toTransform)
 {
@@ -3481,11 +6764,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
+void transform_fromhost_VkConditionalRenderingBeginInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkConditionalRenderingBeginInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceConditionalRenderingFeaturesEXT* toTransform)
 {
@@ -3493,11 +6788,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
+void transform_fromhost_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceConditionalRenderingFeaturesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     ResourceTracker* resourceTracker,
     VkCommandBufferInheritanceConditionalRenderingInfoEXT* toTransform)
 {
@@ -3505,13 +6812,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferInheritanceConditionalRenderingInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NVX_device_generated_commands
-void transform_VkDeviceGeneratedCommandsFeaturesNVX(
+void transform_tohost_VkDeviceGeneratedCommandsFeaturesNVX(
     ResourceTracker* resourceTracker,
     VkDeviceGeneratedCommandsFeaturesNVX* toTransform)
 {
@@ -3519,11 +6838,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceGeneratedCommandsLimitsNVX(
+void transform_fromhost_VkDeviceGeneratedCommandsFeaturesNVX(
+    ResourceTracker* resourceTracker,
+    VkDeviceGeneratedCommandsFeaturesNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceGeneratedCommandsLimitsNVX(
     ResourceTracker* resourceTracker,
     VkDeviceGeneratedCommandsLimitsNVX* toTransform)
 {
@@ -3531,11 +6862,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkIndirectCommandsTokenNVX(
+void transform_fromhost_VkDeviceGeneratedCommandsLimitsNVX(
+    ResourceTracker* resourceTracker,
+    VkDeviceGeneratedCommandsLimitsNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkIndirectCommandsTokenNVX(
     ResourceTracker* resourceTracker,
     VkIndirectCommandsTokenNVX* toTransform)
 {
@@ -3543,7 +6886,15 @@
     (void)toTransform;
 }
 
-void transform_VkIndirectCommandsLayoutTokenNVX(
+void transform_fromhost_VkIndirectCommandsTokenNVX(
+    ResourceTracker* resourceTracker,
+    VkIndirectCommandsTokenNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkIndirectCommandsLayoutTokenNVX(
     ResourceTracker* resourceTracker,
     VkIndirectCommandsLayoutTokenNVX* toTransform)
 {
@@ -3551,7 +6902,15 @@
     (void)toTransform;
 }
 
-void transform_VkIndirectCommandsLayoutCreateInfoNVX(
+void transform_fromhost_VkIndirectCommandsLayoutTokenNVX(
+    ResourceTracker* resourceTracker,
+    VkIndirectCommandsLayoutTokenNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkIndirectCommandsLayoutCreateInfoNVX(
     ResourceTracker* resourceTracker,
     VkIndirectCommandsLayoutCreateInfoNVX* toTransform)
 {
@@ -3559,18 +6918,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pTokens)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->tokenCount; ++i)
         {
-            transform_VkIndirectCommandsLayoutTokenNVX(resourceTracker, (VkIndirectCommandsLayoutTokenNVX*)(toTransform->pTokens + i));
+            transform_tohost_VkIndirectCommandsLayoutTokenNVX(resourceTracker, (VkIndirectCommandsLayoutTokenNVX*)(toTransform->pTokens + i));
         }
     }
 }
 
-void transform_VkCmdProcessCommandsInfoNVX(
+void transform_fromhost_VkIndirectCommandsLayoutCreateInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkIndirectCommandsLayoutCreateInfoNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pTokens)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->tokenCount; ++i)
+        {
+            transform_fromhost_VkIndirectCommandsLayoutTokenNVX(resourceTracker, (VkIndirectCommandsLayoutTokenNVX*)(toTransform->pTokens + i));
+        }
+    }
+}
+
+void transform_tohost_VkCmdProcessCommandsInfoNVX(
     ResourceTracker* resourceTracker,
     VkCmdProcessCommandsInfoNVX* toTransform)
 {
@@ -3578,18 +6956,37 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pIndirectCommandsTokens)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->indirectCommandsTokenCount; ++i)
         {
-            transform_VkIndirectCommandsTokenNVX(resourceTracker, (VkIndirectCommandsTokenNVX*)(toTransform->pIndirectCommandsTokens + i));
+            transform_tohost_VkIndirectCommandsTokenNVX(resourceTracker, (VkIndirectCommandsTokenNVX*)(toTransform->pIndirectCommandsTokens + i));
         }
     }
 }
 
-void transform_VkCmdReserveSpaceForCommandsInfoNVX(
+void transform_fromhost_VkCmdProcessCommandsInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkCmdProcessCommandsInfoNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pIndirectCommandsTokens)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->indirectCommandsTokenCount; ++i)
+        {
+            transform_fromhost_VkIndirectCommandsTokenNVX(resourceTracker, (VkIndirectCommandsTokenNVX*)(toTransform->pIndirectCommandsTokens + i));
+        }
+    }
+}
+
+void transform_tohost_VkCmdReserveSpaceForCommandsInfoNVX(
     ResourceTracker* resourceTracker,
     VkCmdReserveSpaceForCommandsInfoNVX* toTransform)
 {
@@ -3597,11 +6994,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkObjectTableCreateInfoNVX(
+void transform_fromhost_VkCmdReserveSpaceForCommandsInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkCmdReserveSpaceForCommandsInfoNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkObjectTableCreateInfoNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableCreateInfoNVX* toTransform)
 {
@@ -3609,11 +7018,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkObjectTableEntryNVX(
+void transform_fromhost_VkObjectTableCreateInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableCreateInfoNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkObjectTableEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableEntryNVX* toTransform)
 {
@@ -3621,7 +7042,15 @@
     (void)toTransform;
 }
 
-void transform_VkObjectTablePipelineEntryNVX(
+void transform_fromhost_VkObjectTableEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableEntryNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkObjectTablePipelineEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTablePipelineEntryNVX* toTransform)
 {
@@ -3629,7 +7058,15 @@
     (void)toTransform;
 }
 
-void transform_VkObjectTableDescriptorSetEntryNVX(
+void transform_fromhost_VkObjectTablePipelineEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTablePipelineEntryNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkObjectTableDescriptorSetEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableDescriptorSetEntryNVX* toTransform)
 {
@@ -3637,7 +7074,15 @@
     (void)toTransform;
 }
 
-void transform_VkObjectTableVertexBufferEntryNVX(
+void transform_fromhost_VkObjectTableDescriptorSetEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableDescriptorSetEntryNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkObjectTableVertexBufferEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableVertexBufferEntryNVX* toTransform)
 {
@@ -3645,7 +7090,15 @@
     (void)toTransform;
 }
 
-void transform_VkObjectTableIndexBufferEntryNVX(
+void transform_fromhost_VkObjectTableVertexBufferEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableVertexBufferEntryNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkObjectTableIndexBufferEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableIndexBufferEntryNVX* toTransform)
 {
@@ -3653,7 +7106,23 @@
     (void)toTransform;
 }
 
-void transform_VkObjectTablePushConstantEntryNVX(
+void transform_fromhost_VkObjectTableIndexBufferEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableIndexBufferEntryNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkObjectTablePushConstantEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTablePushConstantEntryNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_fromhost_VkObjectTablePushConstantEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTablePushConstantEntryNVX* toTransform)
 {
@@ -3663,7 +7132,7 @@
 
 #endif
 #ifdef VK_NV_clip_space_w_scaling
-void transform_VkViewportWScalingNV(
+void transform_tohost_VkViewportWScalingNV(
     ResourceTracker* resourceTracker,
     VkViewportWScalingNV* toTransform)
 {
@@ -3671,7 +7140,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineViewportWScalingStateCreateInfoNV(
+void transform_fromhost_VkViewportWScalingNV(
+    ResourceTracker* resourceTracker,
+    VkViewportWScalingNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineViewportWScalingStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineViewportWScalingStateCreateInfoNV* toTransform)
 {
@@ -3679,13 +7156,32 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pViewportWScalings)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->viewportCount; ++i)
         {
-            transform_VkViewportWScalingNV(resourceTracker, (VkViewportWScalingNV*)(toTransform->pViewportWScalings + i));
+            transform_tohost_VkViewportWScalingNV(resourceTracker, (VkViewportWScalingNV*)(toTransform->pViewportWScalings + i));
+        }
+    }
+}
+
+void transform_fromhost_VkPipelineViewportWScalingStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineViewportWScalingStateCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pViewportWScalings)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->viewportCount; ++i)
+        {
+            transform_fromhost_VkViewportWScalingNV(resourceTracker, (VkViewportWScalingNV*)(toTransform->pViewportWScalings + i));
         }
     }
 }
@@ -3696,7 +7192,7 @@
 #ifdef VK_EXT_acquire_xlib_display
 #endif
 #ifdef VK_EXT_display_surface_counter
-void transform_VkSurfaceCapabilities2EXT(
+void transform_tohost_VkSurfaceCapabilities2EXT(
     ResourceTracker* resourceTracker,
     VkSurfaceCapabilities2EXT* toTransform)
 {
@@ -3704,16 +7200,31 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->currentExtent));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minImageExtent));
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxImageExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->currentExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minImageExtent));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxImageExtent));
+}
+
+void transform_fromhost_VkSurfaceCapabilities2EXT(
+    ResourceTracker* resourceTracker,
+    VkSurfaceCapabilities2EXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->currentExtent));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->minImageExtent));
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxImageExtent));
 }
 
 #endif
 #ifdef VK_EXT_display_control
-void transform_VkDisplayPowerInfoEXT(
+void transform_tohost_VkDisplayPowerInfoEXT(
     ResourceTracker* resourceTracker,
     VkDisplayPowerInfoEXT* toTransform)
 {
@@ -3721,11 +7232,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDeviceEventInfoEXT(
+void transform_fromhost_VkDisplayPowerInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDisplayPowerInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDeviceEventInfoEXT(
     ResourceTracker* resourceTracker,
     VkDeviceEventInfoEXT* toTransform)
 {
@@ -3733,11 +7256,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDisplayEventInfoEXT(
+void transform_fromhost_VkDeviceEventInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDeviceEventInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDisplayEventInfoEXT(
     ResourceTracker* resourceTracker,
     VkDisplayEventInfoEXT* toTransform)
 {
@@ -3745,11 +7280,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkSwapchainCounterCreateInfoEXT(
+void transform_fromhost_VkDisplayEventInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDisplayEventInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkSwapchainCounterCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkSwapchainCounterCreateInfoEXT* toTransform)
 {
@@ -3757,13 +7304,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkSwapchainCounterCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkSwapchainCounterCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_GOOGLE_display_timing
-void transform_VkRefreshCycleDurationGOOGLE(
+void transform_tohost_VkRefreshCycleDurationGOOGLE(
     ResourceTracker* resourceTracker,
     VkRefreshCycleDurationGOOGLE* toTransform)
 {
@@ -3771,7 +7330,15 @@
     (void)toTransform;
 }
 
-void transform_VkPastPresentationTimingGOOGLE(
+void transform_fromhost_VkRefreshCycleDurationGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkRefreshCycleDurationGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPastPresentationTimingGOOGLE(
     ResourceTracker* resourceTracker,
     VkPastPresentationTimingGOOGLE* toTransform)
 {
@@ -3779,7 +7346,15 @@
     (void)toTransform;
 }
 
-void transform_VkPresentTimeGOOGLE(
+void transform_fromhost_VkPastPresentationTimingGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkPastPresentationTimingGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPresentTimeGOOGLE(
     ResourceTracker* resourceTracker,
     VkPresentTimeGOOGLE* toTransform)
 {
@@ -3787,7 +7362,15 @@
     (void)toTransform;
 }
 
-void transform_VkPresentTimesInfoGOOGLE(
+void transform_fromhost_VkPresentTimeGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkPresentTimeGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPresentTimesInfoGOOGLE(
     ResourceTracker* resourceTracker,
     VkPresentTimesInfoGOOGLE* toTransform)
 {
@@ -3795,13 +7378,32 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pTimes)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->swapchainCount; ++i)
         {
-            transform_VkPresentTimeGOOGLE(resourceTracker, (VkPresentTimeGOOGLE*)(toTransform->pTimes + i));
+            transform_tohost_VkPresentTimeGOOGLE(resourceTracker, (VkPresentTimeGOOGLE*)(toTransform->pTimes + i));
+        }
+    }
+}
+
+void transform_fromhost_VkPresentTimesInfoGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkPresentTimesInfoGOOGLE* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pTimes)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->swapchainCount; ++i)
+        {
+            transform_fromhost_VkPresentTimeGOOGLE(resourceTracker, (VkPresentTimeGOOGLE*)(toTransform->pTimes + i));
         }
     }
 }
@@ -3814,7 +7416,7 @@
 #ifdef VK_NV_viewport_array2
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
-void transform_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
+void transform_tohost_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* toTransform)
 {
@@ -3822,13 +7424,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NV_viewport_swizzle
-void transform_VkViewportSwizzleNV(
+void transform_tohost_VkViewportSwizzleNV(
     ResourceTracker* resourceTracker,
     VkViewportSwizzleNV* toTransform)
 {
@@ -3836,7 +7450,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineViewportSwizzleStateCreateInfoNV(
+void transform_fromhost_VkViewportSwizzleNV(
+    ResourceTracker* resourceTracker,
+    VkViewportSwizzleNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineViewportSwizzleStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineViewportSwizzleStateCreateInfoNV* toTransform)
 {
@@ -3844,20 +7466,39 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pViewportSwizzles)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->viewportCount; ++i)
         {
-            transform_VkViewportSwizzleNV(resourceTracker, (VkViewportSwizzleNV*)(toTransform->pViewportSwizzles + i));
+            transform_tohost_VkViewportSwizzleNV(resourceTracker, (VkViewportSwizzleNV*)(toTransform->pViewportSwizzles + i));
+        }
+    }
+}
+
+void transform_fromhost_VkPipelineViewportSwizzleStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineViewportSwizzleStateCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pViewportSwizzles)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->viewportCount; ++i)
+        {
+            transform_fromhost_VkViewportSwizzleNV(resourceTracker, (VkViewportSwizzleNV*)(toTransform->pViewportSwizzles + i));
         }
     }
 }
 
 #endif
 #ifdef VK_EXT_discard_rectangles
-void transform_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
+void transform_tohost_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceDiscardRectanglePropertiesEXT* toTransform)
 {
@@ -3865,11 +7506,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineDiscardRectangleStateCreateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceDiscardRectanglePropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineDiscardRectangleStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineDiscardRectangleStateCreateInfoEXT* toTransform)
 {
@@ -3877,20 +7530,39 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pDiscardRectangles)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->discardRectangleCount; ++i)
         {
-            transform_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pDiscardRectangles + i));
+            transform_tohost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pDiscardRectangles + i));
+        }
+    }
+}
+
+void transform_fromhost_VkPipelineDiscardRectangleStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineDiscardRectangleStateCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pDiscardRectangles)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->discardRectangleCount; ++i)
+        {
+            transform_fromhost_VkRect2D(resourceTracker, (VkRect2D*)(toTransform->pDiscardRectangles + i));
         }
     }
 }
 
 #endif
 #ifdef VK_EXT_conservative_rasterization
-void transform_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
+void transform_tohost_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* toTransform)
 {
@@ -3898,11 +7570,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineRasterizationConservativeStateCreateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceConservativeRasterizationPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineRasterizationConservativeStateCreateInfoEXT* toTransform)
 {
@@ -3910,7 +7594,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPipelineRasterizationConservativeStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineRasterizationConservativeStateCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3918,7 +7614,7 @@
 #ifdef VK_EXT_swapchain_colorspace
 #endif
 #ifdef VK_EXT_hdr_metadata
-void transform_VkXYColorEXT(
+void transform_tohost_VkXYColorEXT(
     ResourceTracker* resourceTracker,
     VkXYColorEXT* toTransform)
 {
@@ -3926,7 +7622,15 @@
     (void)toTransform;
 }
 
-void transform_VkHdrMetadataEXT(
+void transform_fromhost_VkXYColorEXT(
+    ResourceTracker* resourceTracker,
+    VkXYColorEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkHdrMetadataEXT(
     ResourceTracker* resourceTracker,
     VkHdrMetadataEXT* toTransform)
 {
@@ -3934,17 +7638,33 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryRed));
-    transform_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryGreen));
-    transform_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryBlue));
-    transform_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->whitePoint));
+    transform_tohost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryRed));
+    transform_tohost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryGreen));
+    transform_tohost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryBlue));
+    transform_tohost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->whitePoint));
+}
+
+void transform_fromhost_VkHdrMetadataEXT(
+    ResourceTracker* resourceTracker,
+    VkHdrMetadataEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryRed));
+    transform_fromhost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryGreen));
+    transform_fromhost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->displayPrimaryBlue));
+    transform_fromhost_VkXYColorEXT(resourceTracker, (VkXYColorEXT*)(&toTransform->whitePoint));
 }
 
 #endif
 #ifdef VK_MVK_ios_surface
-void transform_VkIOSSurfaceCreateInfoMVK(
+void transform_tohost_VkIOSSurfaceCreateInfoMVK(
     ResourceTracker* resourceTracker,
     VkIOSSurfaceCreateInfoMVK* toTransform)
 {
@@ -3952,13 +7672,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkIOSSurfaceCreateInfoMVK(
+    ResourceTracker* resourceTracker,
+    VkIOSSurfaceCreateInfoMVK* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_MVK_macos_surface
-void transform_VkMacOSSurfaceCreateInfoMVK(
+void transform_tohost_VkMacOSSurfaceCreateInfoMVK(
     ResourceTracker* resourceTracker,
     VkMacOSSurfaceCreateInfoMVK* toTransform)
 {
@@ -3966,7 +7698,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkMacOSSurfaceCreateInfoMVK(
+    ResourceTracker* resourceTracker,
+    VkMacOSSurfaceCreateInfoMVK* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -3976,7 +7720,7 @@
 #ifdef VK_EXT_queue_family_foreign
 #endif
 #ifdef VK_EXT_debug_utils
-void transform_VkDebugUtilsObjectNameInfoEXT(
+void transform_tohost_VkDebugUtilsObjectNameInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsObjectNameInfoEXT* toTransform)
 {
@@ -3984,11 +7728,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDebugUtilsObjectTagInfoEXT(
+void transform_fromhost_VkDebugUtilsObjectNameInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsObjectNameInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDebugUtilsObjectTagInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsObjectTagInfoEXT* toTransform)
 {
@@ -3996,11 +7752,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDebugUtilsLabelEXT(
+void transform_fromhost_VkDebugUtilsObjectTagInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsObjectTagInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDebugUtilsLabelEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsLabelEXT* toTransform)
 {
@@ -4008,11 +7776,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDebugUtilsMessengerCallbackDataEXT(
+void transform_fromhost_VkDebugUtilsLabelEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsLabelEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDebugUtilsMessengerCallbackDataEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsMessengerCallbackDataEXT* toTransform)
 {
@@ -4020,32 +7800,65 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pQueueLabels)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->queueLabelCount; ++i)
         {
-            transform_VkDebugUtilsLabelEXT(resourceTracker, (VkDebugUtilsLabelEXT*)(toTransform->pQueueLabels + i));
+            transform_tohost_VkDebugUtilsLabelEXT(resourceTracker, (VkDebugUtilsLabelEXT*)(toTransform->pQueueLabels + i));
         }
     }
     if (toTransform->pCmdBufLabels)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->cmdBufLabelCount; ++i)
         {
-            transform_VkDebugUtilsLabelEXT(resourceTracker, (VkDebugUtilsLabelEXT*)(toTransform->pCmdBufLabels + i));
+            transform_tohost_VkDebugUtilsLabelEXT(resourceTracker, (VkDebugUtilsLabelEXT*)(toTransform->pCmdBufLabels + i));
         }
     }
     if (toTransform->pObjects)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->objectCount; ++i)
         {
-            transform_VkDebugUtilsObjectNameInfoEXT(resourceTracker, (VkDebugUtilsObjectNameInfoEXT*)(toTransform->pObjects + i));
+            transform_tohost_VkDebugUtilsObjectNameInfoEXT(resourceTracker, (VkDebugUtilsObjectNameInfoEXT*)(toTransform->pObjects + i));
         }
     }
 }
 
-void transform_VkDebugUtilsMessengerCreateInfoEXT(
+void transform_fromhost_VkDebugUtilsMessengerCallbackDataEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsMessengerCallbackDataEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pQueueLabels)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->queueLabelCount; ++i)
+        {
+            transform_fromhost_VkDebugUtilsLabelEXT(resourceTracker, (VkDebugUtilsLabelEXT*)(toTransform->pQueueLabels + i));
+        }
+    }
+    if (toTransform->pCmdBufLabels)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->cmdBufLabelCount; ++i)
+        {
+            transform_fromhost_VkDebugUtilsLabelEXT(resourceTracker, (VkDebugUtilsLabelEXT*)(toTransform->pCmdBufLabels + i));
+        }
+    }
+    if (toTransform->pObjects)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->objectCount; ++i)
+        {
+            transform_fromhost_VkDebugUtilsObjectNameInfoEXT(resourceTracker, (VkDebugUtilsObjectNameInfoEXT*)(toTransform->pObjects + i));
+        }
+    }
+}
+
+void transform_tohost_VkDebugUtilsMessengerCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsMessengerCreateInfoEXT* toTransform)
 {
@@ -4053,13 +7866,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDebugUtilsMessengerCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsMessengerCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
-void transform_VkAndroidHardwareBufferUsageANDROID(
+void transform_tohost_VkAndroidHardwareBufferUsageANDROID(
     ResourceTracker* resourceTracker,
     VkAndroidHardwareBufferUsageANDROID* toTransform)
 {
@@ -4067,24 +7892,49 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkAndroidHardwareBufferPropertiesANDROID(
+void transform_fromhost_VkAndroidHardwareBufferUsageANDROID(
+    ResourceTracker* resourceTracker,
+    VkAndroidHardwareBufferUsageANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkAndroidHardwareBufferPropertiesANDROID(
     ResourceTracker* resourceTracker,
     VkAndroidHardwareBufferPropertiesANDROID* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    resourceTracker->deviceMemoryTransform_tohost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkAndroidHardwareBufferFormatPropertiesANDROID(
+void transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(
+    ResourceTracker* resourceTracker,
+    VkAndroidHardwareBufferPropertiesANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkAndroidHardwareBufferFormatPropertiesANDROID(
     ResourceTracker* resourceTracker,
     VkAndroidHardwareBufferFormatPropertiesANDROID* toTransform)
 {
@@ -4092,12 +7942,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->samplerYcbcrConversionComponents));
+    transform_tohost_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->samplerYcbcrConversionComponents));
 }
 
-void transform_VkImportAndroidHardwareBufferInfoANDROID(
+void transform_fromhost_VkAndroidHardwareBufferFormatPropertiesANDROID(
+    ResourceTracker* resourceTracker,
+    VkAndroidHardwareBufferFormatPropertiesANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkComponentMapping(resourceTracker, (VkComponentMapping*)(&toTransform->samplerYcbcrConversionComponents));
+}
+
+void transform_tohost_VkImportAndroidHardwareBufferInfoANDROID(
     ResourceTracker* resourceTracker,
     VkImportAndroidHardwareBufferInfoANDROID* toTransform)
 {
@@ -4105,24 +7968,49 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryGetAndroidHardwareBufferInfoANDROID(
+void transform_fromhost_VkImportAndroidHardwareBufferInfoANDROID(
+    ResourceTracker* resourceTracker,
+    VkImportAndroidHardwareBufferInfoANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     ResourceTracker* resourceTracker,
     VkMemoryGetAndroidHardwareBufferInfoANDROID* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    resourceTracker->deviceMemoryTransform_tohost(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkExternalFormatANDROID(
+void transform_fromhost_VkMemoryGetAndroidHardwareBufferInfoANDROID(
+    ResourceTracker* resourceTracker,
+    VkMemoryGetAndroidHardwareBufferInfoANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(&toTransform->memory, 1, nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkExternalFormatANDROID(
     ResourceTracker* resourceTracker,
     VkExternalFormatANDROID* toTransform)
 {
@@ -4130,13 +8018,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkExternalFormatANDROID(
+    ResourceTracker* resourceTracker,
+    VkExternalFormatANDROID* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_EXT_sampler_filter_minmax
-void transform_VkSamplerReductionModeCreateInfoEXT(
+void transform_tohost_VkSamplerReductionModeCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkSamplerReductionModeCreateInfoEXT* toTransform)
 {
@@ -4144,11 +8044,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
+void transform_fromhost_VkSamplerReductionModeCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkSamplerReductionModeCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* toTransform)
 {
@@ -4156,7 +8068,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -4170,7 +8094,7 @@
 #ifdef VK_EXT_shader_stencil_export
 #endif
 #ifdef VK_EXT_sample_locations
-void transform_VkSampleLocationEXT(
+void transform_tohost_VkSampleLocationEXT(
     ResourceTracker* resourceTracker,
     VkSampleLocationEXT* toTransform)
 {
@@ -4178,7 +8102,15 @@
     (void)toTransform;
 }
 
-void transform_VkSampleLocationsInfoEXT(
+void transform_fromhost_VkSampleLocationEXT(
+    ResourceTracker* resourceTracker,
+    VkSampleLocationEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkSampleLocationsInfoEXT(
     ResourceTracker* resourceTracker,
     VkSampleLocationsInfoEXT* toTransform)
 {
@@ -4186,37 +8118,75 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->sampleLocationGridSize));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->sampleLocationGridSize));
     if (toTransform->pSampleLocations)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->sampleLocationsCount; ++i)
         {
-            transform_VkSampleLocationEXT(resourceTracker, (VkSampleLocationEXT*)(toTransform->pSampleLocations + i));
+            transform_tohost_VkSampleLocationEXT(resourceTracker, (VkSampleLocationEXT*)(toTransform->pSampleLocations + i));
         }
     }
 }
 
-void transform_VkAttachmentSampleLocationsEXT(
+void transform_fromhost_VkSampleLocationsInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkSampleLocationsInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->sampleLocationGridSize));
+    if (toTransform->pSampleLocations)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->sampleLocationsCount; ++i)
+        {
+            transform_fromhost_VkSampleLocationEXT(resourceTracker, (VkSampleLocationEXT*)(toTransform->pSampleLocations + i));
+        }
+    }
+}
+
+void transform_tohost_VkAttachmentSampleLocationsEXT(
     ResourceTracker* resourceTracker,
     VkAttachmentSampleLocationsEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
+    transform_tohost_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
 }
 
-void transform_VkSubpassSampleLocationsEXT(
+void transform_fromhost_VkAttachmentSampleLocationsEXT(
+    ResourceTracker* resourceTracker,
+    VkAttachmentSampleLocationsEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
+}
+
+void transform_tohost_VkSubpassSampleLocationsEXT(
     ResourceTracker* resourceTracker,
     VkSubpassSampleLocationsEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    transform_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
+    transform_tohost_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
 }
 
-void transform_VkRenderPassSampleLocationsBeginInfoEXT(
+void transform_fromhost_VkSubpassSampleLocationsEXT(
+    ResourceTracker* resourceTracker,
+    VkSubpassSampleLocationsEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    transform_fromhost_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
+}
+
+void transform_tohost_VkRenderPassSampleLocationsBeginInfoEXT(
     ResourceTracker* resourceTracker,
     VkRenderPassSampleLocationsBeginInfoEXT* toTransform)
 {
@@ -4224,25 +8194,51 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pAttachmentInitialSampleLocations)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentInitialSampleLocationsCount; ++i)
         {
-            transform_VkAttachmentSampleLocationsEXT(resourceTracker, (VkAttachmentSampleLocationsEXT*)(toTransform->pAttachmentInitialSampleLocations + i));
+            transform_tohost_VkAttachmentSampleLocationsEXT(resourceTracker, (VkAttachmentSampleLocationsEXT*)(toTransform->pAttachmentInitialSampleLocations + i));
         }
     }
     if (toTransform->pPostSubpassSampleLocations)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->postSubpassSampleLocationsCount; ++i)
         {
-            transform_VkSubpassSampleLocationsEXT(resourceTracker, (VkSubpassSampleLocationsEXT*)(toTransform->pPostSubpassSampleLocations + i));
+            transform_tohost_VkSubpassSampleLocationsEXT(resourceTracker, (VkSubpassSampleLocationsEXT*)(toTransform->pPostSubpassSampleLocations + i));
         }
     }
 }
 
-void transform_VkPipelineSampleLocationsStateCreateInfoEXT(
+void transform_fromhost_VkRenderPassSampleLocationsBeginInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkRenderPassSampleLocationsBeginInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pAttachmentInitialSampleLocations)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->attachmentInitialSampleLocationsCount; ++i)
+        {
+            transform_fromhost_VkAttachmentSampleLocationsEXT(resourceTracker, (VkAttachmentSampleLocationsEXT*)(toTransform->pAttachmentInitialSampleLocations + i));
+        }
+    }
+    if (toTransform->pPostSubpassSampleLocations)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->postSubpassSampleLocationsCount; ++i)
+        {
+            transform_fromhost_VkSubpassSampleLocationsEXT(resourceTracker, (VkSubpassSampleLocationsEXT*)(toTransform->pPostSubpassSampleLocations + i));
+        }
+    }
+}
+
+void transform_tohost_VkPipelineSampleLocationsStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineSampleLocationsStateCreateInfoEXT* toTransform)
 {
@@ -4250,12 +8246,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
+    transform_tohost_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
 }
 
-void transform_VkPhysicalDeviceSampleLocationsPropertiesEXT(
+void transform_fromhost_VkPipelineSampleLocationsStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineSampleLocationsStateCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkSampleLocationsInfoEXT(resourceTracker, (VkSampleLocationsInfoEXT*)(&toTransform->sampleLocationsInfo));
+}
+
+void transform_tohost_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSampleLocationsPropertiesEXT* toTransform)
 {
@@ -4263,12 +8272,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSampleLocationGridSize));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSampleLocationGridSize));
 }
 
-void transform_VkMultisamplePropertiesEXT(
+void transform_fromhost_VkPhysicalDeviceSampleLocationsPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSampleLocationsPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSampleLocationGridSize));
+}
+
+void transform_tohost_VkMultisamplePropertiesEXT(
     ResourceTracker* resourceTracker,
     VkMultisamplePropertiesEXT* toTransform)
 {
@@ -4276,14 +8298,27 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
-    transform_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSampleLocationGridSize));
+    transform_tohost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSampleLocationGridSize));
+}
+
+void transform_fromhost_VkMultisamplePropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkMultisamplePropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkExtent2D(resourceTracker, (VkExtent2D*)(&toTransform->maxSampleLocationGridSize));
 }
 
 #endif
 #ifdef VK_EXT_blend_operation_advanced
-void transform_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
+void transform_tohost_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* toTransform)
 {
@@ -4291,11 +8326,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
+void transform_fromhost_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* toTransform)
 {
@@ -4303,11 +8350,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineColorBlendAdvancedStateCreateInfoEXT* toTransform)
 {
@@ -4315,13 +8374,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineColorBlendAdvancedStateCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
-void transform_VkPipelineCoverageToColorStateCreateInfoNV(
+void transform_tohost_VkPipelineCoverageToColorStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineCoverageToColorStateCreateInfoNV* toTransform)
 {
@@ -4329,13 +8400,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPipelineCoverageToColorStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineCoverageToColorStateCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
-void transform_VkPipelineCoverageModulationStateCreateInfoNV(
+void transform_tohost_VkPipelineCoverageModulationStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineCoverageModulationStateCreateInfoNV* toTransform)
 {
@@ -4343,7 +8426,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPipelineCoverageModulationStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineCoverageModulationStateCreateInfoNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -4353,7 +8448,7 @@
 #ifdef VK_EXT_post_depth_coverage
 #endif
 #ifdef VK_EXT_validation_cache
-void transform_VkValidationCacheCreateInfoEXT(
+void transform_tohost_VkValidationCacheCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkValidationCacheCreateInfoEXT* toTransform)
 {
@@ -4361,11 +8456,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkShaderModuleValidationCacheCreateInfoEXT(
+void transform_fromhost_VkValidationCacheCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkValidationCacheCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkShaderModuleValidationCacheCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkShaderModuleValidationCacheCreateInfoEXT* toTransform)
 {
@@ -4373,13 +8480,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkShaderModuleValidationCacheCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkShaderModuleValidationCacheCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_EXT_descriptor_indexing
-void transform_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
+void transform_tohost_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* toTransform)
 {
@@ -4387,11 +8506,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
+void transform_fromhost_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceDescriptorIndexingFeaturesEXT* toTransform)
 {
@@ -4399,11 +8530,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
+void transform_fromhost_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceDescriptorIndexingFeaturesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceDescriptorIndexingPropertiesEXT* toTransform)
 {
@@ -4411,11 +8554,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceDescriptorIndexingPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* toTransform)
 {
@@ -4423,11 +8578,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
+void transform_fromhost_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
     ResourceTracker* resourceTracker,
     VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* toTransform)
 {
@@ -4435,7 +8602,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -4443,7 +8622,7 @@
 #ifdef VK_EXT_shader_viewport_index_layer
 #endif
 #ifdef VK_EXT_global_priority
-void transform_VkDeviceQueueGlobalPriorityCreateInfoEXT(
+void transform_tohost_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDeviceQueueGlobalPriorityCreateInfoEXT* toTransform)
 {
@@ -4451,13 +8630,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkDeviceQueueGlobalPriorityCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDeviceQueueGlobalPriorityCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_EXT_external_memory_host
-void transform_VkImportMemoryHostPointerInfoEXT(
+void transform_tohost_VkImportMemoryHostPointerInfoEXT(
     ResourceTracker* resourceTracker,
     VkImportMemoryHostPointerInfoEXT* toTransform)
 {
@@ -4465,24 +8656,49 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkMemoryHostPointerPropertiesEXT(
+void transform_fromhost_VkImportMemoryHostPointerInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryHostPointerInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryHostPointerPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkMemoryHostPointerPropertiesEXT* toTransform)
 {
     (void)resourceTracker;
     (void)toTransform;
-    resourceTracker->deviceMemoryTransform(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    resourceTracker->deviceMemoryTransform_tohost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
+void transform_fromhost_VkMemoryHostPointerPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkMemoryHostPointerPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    resourceTracker->deviceMemoryTransform_fromhost(nullptr, 1, nullptr, 1, nullptr, 1, nullptr, 1, &toTransform->memoryTypeBits, 1);
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* toTransform)
 {
@@ -4490,7 +8706,19 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalMemoryHostPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
@@ -4498,7 +8726,7 @@
 #ifdef VK_AMD_buffer_marker
 #endif
 #ifdef VK_AMD_shader_core_properties
-void transform_VkPhysicalDeviceShaderCorePropertiesAMD(
+void transform_tohost_VkPhysicalDeviceShaderCorePropertiesAMD(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceShaderCorePropertiesAMD* toTransform)
 {
@@ -4506,13 +8734,25 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceShaderCorePropertiesAMD(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceShaderCorePropertiesAMD* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
-void transform_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
+void transform_tohost_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* toTransform)
 {
@@ -4520,11 +8760,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkVertexInputBindingDivisorDescriptionEXT(
+void transform_fromhost_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkVertexInputBindingDivisorDescriptionEXT(
     ResourceTracker* resourceTracker,
     VkVertexInputBindingDivisorDescriptionEXT* toTransform)
 {
@@ -4532,7 +8784,15 @@
     (void)toTransform;
 }
 
-void transform_VkPipelineVertexInputDivisorStateCreateInfoEXT(
+void transform_fromhost_VkVertexInputBindingDivisorDescriptionEXT(
+    ResourceTracker* resourceTracker,
+    VkVertexInputBindingDivisorDescriptionEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+}
+
+void transform_tohost_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineVertexInputDivisorStateCreateInfoEXT* toTransform)
 {
@@ -4540,13 +8800,32 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
     if (toTransform->pVertexBindingDivisors)
     {
         for (uint32_t i = 0; i < (uint32_t)toTransform->vertexBindingDivisorCount; ++i)
         {
-            transform_VkVertexInputBindingDivisorDescriptionEXT(resourceTracker, (VkVertexInputBindingDivisorDescriptionEXT*)(toTransform->pVertexBindingDivisors + i));
+            transform_tohost_VkVertexInputBindingDivisorDescriptionEXT(resourceTracker, (VkVertexInputBindingDivisorDescriptionEXT*)(toTransform->pVertexBindingDivisors + i));
+        }
+    }
+}
+
+void transform_fromhost_VkPipelineVertexInputDivisorStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineVertexInputDivisorStateCreateInfoEXT* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pVertexBindingDivisors)
+    {
+        for (uint32_t i = 0; i < (uint32_t)toTransform->vertexBindingDivisorCount; ++i)
+        {
+            transform_fromhost_VkVertexInputBindingDivisorDescriptionEXT(resourceTracker, (VkVertexInputBindingDivisorDescriptionEXT*)(toTransform->pVertexBindingDivisors + i));
         }
     }
 }
@@ -4555,7 +8834,7 @@
 #ifdef VK_NV_shader_subgroup_partitioned
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
-void transform_VkQueueFamilyCheckpointPropertiesNV(
+void transform_tohost_VkQueueFamilyCheckpointPropertiesNV(
     ResourceTracker* resourceTracker,
     VkQueueFamilyCheckpointPropertiesNV* toTransform)
 {
@@ -4563,11 +8842,23 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
-void transform_VkCheckpointDataNV(
+void transform_fromhost_VkQueueFamilyCheckpointPropertiesNV(
+    ResourceTracker* resourceTracker,
+    VkQueueFamilyCheckpointPropertiesNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkCheckpointDataNV(
     ResourceTracker* resourceTracker,
     VkCheckpointDataNV* toTransform)
 {
@@ -4575,14 +8866,26 @@
     (void)toTransform;
     if (toTransform->pNext)
     {
-        transform_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkCheckpointDataNV(
+    ResourceTracker* resourceTracker,
+    VkCheckpointDataNV* toTransform)
+{
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext)
+    {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
     }
 }
 
 #endif
 #ifdef VK_GOOGLE_address_space
 #endif
-void transform_extension_struct(
+void transform_tohost_extension_struct(
     ResourceTracker* resourceTracker,
     void* structExtension_out)
 {
@@ -4596,633 +8899,1284 @@
 #ifdef VK_VERSION_1_1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
         {
-            transform_VkPhysicalDeviceSubgroupProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceSubgroupProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
         {
-            transform_VkPhysicalDevice16BitStorageFeatures(resourceTracker, reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
+            transform_tohost_VkPhysicalDevice16BitStorageFeatures(resourceTracker, reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
         {
-            transform_VkMemoryDedicatedRequirements(resourceTracker, reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
+            transform_tohost_VkMemoryDedicatedRequirements(resourceTracker, reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
         {
-            transform_VkMemoryDedicatedAllocateInfo(resourceTracker, reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
+            transform_tohost_VkMemoryDedicatedAllocateInfo(resourceTracker, reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
         {
-            transform_VkMemoryAllocateFlagsInfo(resourceTracker, reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
+            transform_tohost_VkMemoryAllocateFlagsInfo(resourceTracker, reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
         {
-            transform_VkDeviceGroupRenderPassBeginInfo(resourceTracker, reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
+            transform_tohost_VkDeviceGroupRenderPassBeginInfo(resourceTracker, reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
         {
-            transform_VkDeviceGroupCommandBufferBeginInfo(resourceTracker, reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
+            transform_tohost_VkDeviceGroupCommandBufferBeginInfo(resourceTracker, reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
         {
-            transform_VkDeviceGroupSubmitInfo(resourceTracker, reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
+            transform_tohost_VkDeviceGroupSubmitInfo(resourceTracker, reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
         {
-            transform_VkDeviceGroupBindSparseInfo(resourceTracker, reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
+            transform_tohost_VkDeviceGroupBindSparseInfo(resourceTracker, reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
         {
-            transform_VkBindBufferMemoryDeviceGroupInfo(resourceTracker, reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
+            transform_tohost_VkBindBufferMemoryDeviceGroupInfo(resourceTracker, reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
         {
-            transform_VkBindImageMemoryDeviceGroupInfo(resourceTracker, reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
+            transform_tohost_VkBindImageMemoryDeviceGroupInfo(resourceTracker, reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
         {
-            transform_VkDeviceGroupDeviceCreateInfo(resourceTracker, reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
+            transform_tohost_VkDeviceGroupDeviceCreateInfo(resourceTracker, reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
         {
-            transform_VkPhysicalDeviceFeatures2(resourceTracker, reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceFeatures2(resourceTracker, reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
         {
-            transform_VkPhysicalDevicePointClippingProperties(resourceTracker, reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
+            transform_tohost_VkPhysicalDevicePointClippingProperties(resourceTracker, reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
         {
-            transform_VkRenderPassInputAttachmentAspectCreateInfo(resourceTracker, reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
+            transform_tohost_VkRenderPassInputAttachmentAspectCreateInfo(resourceTracker, reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
         {
-            transform_VkImageViewUsageCreateInfo(resourceTracker, reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
+            transform_tohost_VkImageViewUsageCreateInfo(resourceTracker, reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
         {
-            transform_VkPipelineTessellationDomainOriginStateCreateInfo(resourceTracker, reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
+            transform_tohost_VkPipelineTessellationDomainOriginStateCreateInfo(resourceTracker, reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
         {
-            transform_VkRenderPassMultiviewCreateInfo(resourceTracker, reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
+            transform_tohost_VkRenderPassMultiviewCreateInfo(resourceTracker, reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
         {
-            transform_VkPhysicalDeviceMultiviewFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceMultiviewFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
         {
-            transform_VkPhysicalDeviceMultiviewProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceMultiviewProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES:
         {
-            transform_VkPhysicalDeviceVariablePointerFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceVariablePointerFeatures*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceVariablePointerFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceVariablePointerFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
         {
-            transform_VkPhysicalDeviceProtectedMemoryFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceProtectedMemoryFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
         {
-            transform_VkPhysicalDeviceProtectedMemoryProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceProtectedMemoryProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
         {
-            transform_VkProtectedSubmitInfo(resourceTracker, reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
+            transform_tohost_VkProtectedSubmitInfo(resourceTracker, reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
         {
-            transform_VkSamplerYcbcrConversionInfo(resourceTracker, reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
+            transform_tohost_VkSamplerYcbcrConversionInfo(resourceTracker, reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
         {
-            transform_VkBindImagePlaneMemoryInfo(resourceTracker, reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
+            transform_tohost_VkBindImagePlaneMemoryInfo(resourceTracker, reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
         {
-            transform_VkImagePlaneMemoryRequirementsInfo(resourceTracker, reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
+            transform_tohost_VkImagePlaneMemoryRequirementsInfo(resourceTracker, reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
         {
-            transform_VkPhysicalDeviceSamplerYcbcrConversionFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceSamplerYcbcrConversionFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
         {
-            transform_VkSamplerYcbcrConversionImageFormatProperties(resourceTracker, reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
+            transform_tohost_VkSamplerYcbcrConversionImageFormatProperties(resourceTracker, reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
         {
-            transform_VkPhysicalDeviceExternalImageFormatInfo(resourceTracker, reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceExternalImageFormatInfo(resourceTracker, reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
         {
-            transform_VkExternalImageFormatProperties(resourceTracker, reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
+            transform_tohost_VkExternalImageFormatProperties(resourceTracker, reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
         {
-            transform_VkPhysicalDeviceIDProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceIDProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
         {
-            transform_VkExternalMemoryImageCreateInfo(resourceTracker, reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
+            transform_tohost_VkExternalMemoryImageCreateInfo(resourceTracker, reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
         {
-            transform_VkExternalMemoryBufferCreateInfo(resourceTracker, reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
+            transform_tohost_VkExternalMemoryBufferCreateInfo(resourceTracker, reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
         {
-            transform_VkExportMemoryAllocateInfo(resourceTracker, reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
+            transform_tohost_VkExportMemoryAllocateInfo(resourceTracker, reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
         {
-            transform_VkExportFenceCreateInfo(resourceTracker, reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
+            transform_tohost_VkExportFenceCreateInfo(resourceTracker, reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
         {
-            transform_VkExportSemaphoreCreateInfo(resourceTracker, reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
+            transform_tohost_VkExportSemaphoreCreateInfo(resourceTracker, reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
         {
-            transform_VkPhysicalDeviceMaintenance3Properties(resourceTracker, reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceMaintenance3Properties(resourceTracker, reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES:
         {
-            transform_VkPhysicalDeviceShaderDrawParameterFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceShaderDrawParameterFeatures*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceShaderDrawParameterFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceShaderDrawParameterFeatures*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_swapchain
         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            transform_VkImageSwapchainCreateInfoKHR(resourceTracker, reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
+            transform_tohost_VkImageSwapchainCreateInfoKHR(resourceTracker, reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
         {
-            transform_VkBindImageMemorySwapchainInfoKHR(resourceTracker, reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
+            transform_tohost_VkBindImageMemorySwapchainInfoKHR(resourceTracker, reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
         {
-            transform_VkDeviceGroupPresentInfoKHR(resourceTracker, reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
+            transform_tohost_VkDeviceGroupPresentInfoKHR(resourceTracker, reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
         {
-            transform_VkDeviceGroupSwapchainCreateInfoKHR(resourceTracker, reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
+            transform_tohost_VkDeviceGroupSwapchainCreateInfoKHR(resourceTracker, reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_display_swapchain
         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
         {
-            transform_VkDisplayPresentInfoKHR(resourceTracker, reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
+            transform_tohost_VkDisplayPresentInfoKHR(resourceTracker, reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            transform_VkImportMemoryWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            transform_tohost_VkImportMemoryWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
         {
-            transform_VkExportMemoryWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            transform_tohost_VkExportMemoryWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_memory_fd
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
         {
-            transform_VkImportMemoryFdInfoKHR(resourceTracker, reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
+            transform_tohost_VkImportMemoryFdInfoKHR(resourceTracker, reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
         {
-            transform_VkWin32KeyedMutexAcquireReleaseInfoKHR(resourceTracker, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
+            transform_tohost_VkWin32KeyedMutexAcquireReleaseInfoKHR(resourceTracker, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_semaphore_win32
         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
         {
-            transform_VkExportSemaphoreWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
+            transform_tohost_VkExportSemaphoreWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
         {
-            transform_VkD3D12FenceSubmitInfoKHR(resourceTracker, reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
+            transform_tohost_VkD3D12FenceSubmitInfoKHR(resourceTracker, reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_push_descriptor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
         {
-            transform_VkPhysicalDevicePushDescriptorPropertiesKHR(resourceTracker, reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
+            transform_tohost_VkPhysicalDevicePushDescriptorPropertiesKHR(resourceTracker, reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_incremental_present
         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
         {
-            transform_VkPresentRegionsKHR(resourceTracker, reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
+            transform_tohost_VkPresentRegionsKHR(resourceTracker, reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_shared_presentable_image
         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
         {
-            transform_VkSharedPresentSurfaceCapabilitiesKHR(resourceTracker, reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
+            transform_tohost_VkSharedPresentSurfaceCapabilitiesKHR(resourceTracker, reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_external_fence_win32
         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
         {
-            transform_VkExportFenceWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
+            transform_tohost_VkExportFenceWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_image_format_list
         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR:
         {
-            transform_VkImageFormatListCreateInfoKHR(resourceTracker, reinterpret_cast<VkImageFormatListCreateInfoKHR*>(structExtension_out));
+            transform_tohost_VkImageFormatListCreateInfoKHR(resourceTracker, reinterpret_cast<VkImageFormatListCreateInfoKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_KHR_8bit_storage
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR:
         {
-            transform_VkPhysicalDevice8BitStorageFeaturesKHR(resourceTracker, reinterpret_cast<VkPhysicalDevice8BitStorageFeaturesKHR*>(structExtension_out));
+            transform_tohost_VkPhysicalDevice8BitStorageFeaturesKHR(resourceTracker, reinterpret_cast<VkPhysicalDevice8BitStorageFeaturesKHR*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
         {
-            transform_VkNativeBufferANDROID(resourceTracker, reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
+            transform_tohost_VkNativeBufferANDROID(resourceTracker, reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_report
         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
         {
-            transform_VkDebugReportCallbackCreateInfoEXT(resourceTracker, reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkDebugReportCallbackCreateInfoEXT(resourceTracker, reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_rasterization_order
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
         {
-            transform_VkPipelineRasterizationStateRasterizationOrderAMD(resourceTracker, reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
+            transform_tohost_VkPipelineRasterizationStateRasterizationOrderAMD(resourceTracker, reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_dedicated_allocation
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
         {
-            transform_VkDedicatedAllocationImageCreateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkDedicatedAllocationImageCreateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
         {
-            transform_VkDedicatedAllocationBufferCreateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkDedicatedAllocationBufferCreateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
         {
-            transform_VkDedicatedAllocationMemoryAllocateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
+            transform_tohost_VkDedicatedAllocationMemoryAllocateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
         {
-            transform_VkTextureLODGatherFormatPropertiesAMD(resourceTracker, reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
+            transform_tohost_VkTextureLODGatherFormatPropertiesAMD(resourceTracker, reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory
         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
         {
-            transform_VkExternalMemoryImageCreateInfoNV(resourceTracker, reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkExternalMemoryImageCreateInfoNV(resourceTracker, reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
         {
-            transform_VkExportMemoryAllocateInfoNV(resourceTracker, reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
+            transform_tohost_VkExportMemoryAllocateInfoNV(resourceTracker, reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_external_memory_win32
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            transform_VkImportMemoryWin32HandleInfoNV(resourceTracker, reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
+            transform_tohost_VkImportMemoryWin32HandleInfoNV(resourceTracker, reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
         {
-            transform_VkExportMemoryWin32HandleInfoNV(resourceTracker, reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
+            transform_tohost_VkExportMemoryWin32HandleInfoNV(resourceTracker, reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_win32_keyed_mutex
         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
         {
-            transform_VkWin32KeyedMutexAcquireReleaseInfoNV(resourceTracker, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
+            transform_tohost_VkWin32KeyedMutexAcquireReleaseInfoNV(resourceTracker, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_flags
         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
         {
-            transform_VkValidationFlagsEXT(resourceTracker, reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
+            transform_tohost_VkValidationFlagsEXT(resourceTracker, reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_conditional_rendering
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
         {
-            transform_VkPhysicalDeviceConditionalRenderingFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceConditionalRenderingFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
         {
-            transform_VkCommandBufferInheritanceConditionalRenderingInfoEXT(resourceTracker, reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension_out));
+            transform_tohost_VkCommandBufferInheritanceConditionalRenderingInfoEXT(resourceTracker, 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:
         {
-            transform_VkPipelineViewportWScalingStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkPipelineViewportWScalingStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_display_control
         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
         {
-            transform_VkSwapchainCounterCreateInfoEXT(resourceTracker, reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkSwapchainCounterCreateInfoEXT(resourceTracker, reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_GOOGLE_display_timing
         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
         {
-            transform_VkPresentTimesInfoGOOGLE(resourceTracker, reinterpret_cast<VkPresentTimesInfoGOOGLE*>(structExtension_out));
+            transform_tohost_VkPresentTimesInfoGOOGLE(resourceTracker, 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:
         {
-            transform_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_viewport_swizzle
         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
         {
-            transform_VkPipelineViewportSwizzleStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkPipelineViewportSwizzleStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_discard_rectangles
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceDiscardRectanglePropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceDiscardRectanglePropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
         {
-            transform_VkPipelineDiscardRectangleStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkPipelineDiscardRectangleStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_conservative_rasterization
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
         {
-            transform_VkPipelineRasterizationConservativeStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkPipelineRasterizationConservativeStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_debug_utils
         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
         {
-            transform_VkDebugUtilsMessengerCreateInfoEXT(resourceTracker, reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkDebugUtilsMessengerCreateInfoEXT(resourceTracker, reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
         {
-            transform_VkAndroidHardwareBufferUsageANDROID(resourceTracker, reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
+            transform_tohost_VkAndroidHardwareBufferUsageANDROID(resourceTracker, reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
         {
-            transform_VkAndroidHardwareBufferFormatPropertiesANDROID(resourceTracker, reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
+            transform_tohost_VkAndroidHardwareBufferFormatPropertiesANDROID(resourceTracker, reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
         {
-            transform_VkImportAndroidHardwareBufferInfoANDROID(resourceTracker, reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
+            transform_tohost_VkImportAndroidHardwareBufferInfoANDROID(resourceTracker, reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
         {
-            transform_VkExternalFormatANDROID(resourceTracker, reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
+            transform_tohost_VkExternalFormatANDROID(resourceTracker, reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_sampler_filter_minmax
         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT:
         {
-            transform_VkSamplerReductionModeCreateInfoEXT(resourceTracker, reinterpret_cast<VkSamplerReductionModeCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkSamplerReductionModeCreateInfoEXT(resourceTracker, reinterpret_cast<VkSamplerReductionModeCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_sample_locations
         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
         {
-            transform_VkSampleLocationsInfoEXT(resourceTracker, reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
+            transform_tohost_VkSampleLocationsInfoEXT(resourceTracker, reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
         {
-            transform_VkRenderPassSampleLocationsBeginInfoEXT(resourceTracker, reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
+            transform_tohost_VkRenderPassSampleLocationsBeginInfoEXT(resourceTracker, reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
         {
-            transform_VkPipelineSampleLocationsStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkPipelineSampleLocationsStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceSampleLocationsPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceSampleLocationsPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_blend_operation_advanced
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
         {
-            transform_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
         {
-            transform_VkPipelineColorBlendAdvancedStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkPipelineColorBlendAdvancedStateCreateInfoEXT(resourceTracker, 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:
         {
-            transform_VkPipelineCoverageToColorStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkPipelineCoverageToColorStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
         {
-            transform_VkPipelineCoverageModulationStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
+            transform_tohost_VkPipelineCoverageModulationStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_validation_cache
         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
         {
-            transform_VkShaderModuleValidationCacheCreateInfoEXT(resourceTracker, reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkShaderModuleValidationCacheCreateInfoEXT(resourceTracker, reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_descriptor_indexing
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT:
         {
-            transform_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(resourceTracker, reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(resourceTracker, reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT:
         {
-            transform_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeaturesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeaturesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT:
         {
-            transform_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(resourceTracker, reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfoEXT*>(structExtension_out));
+            transform_tohost_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(resourceTracker, reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT:
         {
-            transform_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(resourceTracker, reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupportEXT*>(structExtension_out));
+            transform_tohost_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(resourceTracker, reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupportEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_global_priority
         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
         {
-            transform_VkDeviceQueueGlobalPriorityCreateInfoEXT(resourceTracker, reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkDeviceQueueGlobalPriorityCreateInfoEXT(resourceTracker, reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_external_memory_host
         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
         {
-            transform_VkImportMemoryHostPointerInfoEXT(resourceTracker, reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
+            transform_tohost_VkImportMemoryHostPointerInfoEXT(resourceTracker, reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_AMD_shader_core_properties
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
         {
-            transform_VkPhysicalDeviceShaderCorePropertiesAMD(resourceTracker, reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceShaderCorePropertiesAMD(resourceTracker, reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
         {
-            transform_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
+            transform_tohost_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
             break;
         }
         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
         {
-            transform_VkPipelineVertexInputDivisorStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
+            transform_tohost_VkPipelineVertexInputDivisorStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
             break;
         }
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
         {
-            transform_VkQueueFamilyCheckpointPropertiesNV(resourceTracker, reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
+            transform_tohost_VkQueueFamilyCheckpointPropertiesNV(resourceTracker, reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
+            break;
+        }
+#endif
+        default:
+        {
+            return;
+        }
+    }
+}
+
+void transform_fromhost_extension_struct(
+    ResourceTracker* resourceTracker,
+    void* structExtension_out)
+{
+    if (!structExtension_out)
+    {
+        return;
+    }
+    uint32_t structType = (uint32_t)goldfish_vk_struct_type(structExtension_out);
+    switch(structType)
+    {
+#ifdef VK_VERSION_1_1
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
+        {
+            transform_fromhost_VkPhysicalDeviceSubgroupProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
+        {
+            transform_fromhost_VkPhysicalDevice16BitStorageFeatures(resourceTracker, reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
+        {
+            transform_fromhost_VkMemoryDedicatedRequirements(resourceTracker, reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
+        {
+            transform_fromhost_VkMemoryDedicatedAllocateInfo(resourceTracker, reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
+        {
+            transform_fromhost_VkMemoryAllocateFlagsInfo(resourceTracker, reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
+        {
+            transform_fromhost_VkDeviceGroupRenderPassBeginInfo(resourceTracker, reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
+        {
+            transform_fromhost_VkDeviceGroupCommandBufferBeginInfo(resourceTracker, reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
+        {
+            transform_fromhost_VkDeviceGroupSubmitInfo(resourceTracker, reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
+        {
+            transform_fromhost_VkDeviceGroupBindSparseInfo(resourceTracker, reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
+        {
+            transform_fromhost_VkBindBufferMemoryDeviceGroupInfo(resourceTracker, reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
+        {
+            transform_fromhost_VkBindImageMemoryDeviceGroupInfo(resourceTracker, reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
+        {
+            transform_fromhost_VkDeviceGroupDeviceCreateInfo(resourceTracker, reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
+        {
+            transform_fromhost_VkPhysicalDeviceFeatures2(resourceTracker, reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
+        {
+            transform_fromhost_VkPhysicalDevicePointClippingProperties(resourceTracker, reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
+        {
+            transform_fromhost_VkRenderPassInputAttachmentAspectCreateInfo(resourceTracker, reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
+        {
+            transform_fromhost_VkImageViewUsageCreateInfo(resourceTracker, reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
+        {
+            transform_fromhost_VkPipelineTessellationDomainOriginStateCreateInfo(resourceTracker, reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
+        {
+            transform_fromhost_VkRenderPassMultiviewCreateInfo(resourceTracker, reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
+        {
+            transform_fromhost_VkPhysicalDeviceMultiviewFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
+        {
+            transform_fromhost_VkPhysicalDeviceMultiviewProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES:
+        {
+            transform_fromhost_VkPhysicalDeviceVariablePointerFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceVariablePointerFeatures*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
+        {
+            transform_fromhost_VkPhysicalDeviceProtectedMemoryFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
+        {
+            transform_fromhost_VkPhysicalDeviceProtectedMemoryProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
+        {
+            transform_fromhost_VkProtectedSubmitInfo(resourceTracker, reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
+        {
+            transform_fromhost_VkSamplerYcbcrConversionInfo(resourceTracker, reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
+        {
+            transform_fromhost_VkBindImagePlaneMemoryInfo(resourceTracker, reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
+        {
+            transform_fromhost_VkImagePlaneMemoryRequirementsInfo(resourceTracker, reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
+        {
+            transform_fromhost_VkPhysicalDeviceSamplerYcbcrConversionFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
+        {
+            transform_fromhost_VkSamplerYcbcrConversionImageFormatProperties(resourceTracker, reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
+        {
+            transform_fromhost_VkPhysicalDeviceExternalImageFormatInfo(resourceTracker, reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
+        {
+            transform_fromhost_VkExternalImageFormatProperties(resourceTracker, reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
+        {
+            transform_fromhost_VkPhysicalDeviceIDProperties(resourceTracker, reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
+        {
+            transform_fromhost_VkExternalMemoryImageCreateInfo(resourceTracker, reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
+        {
+            transform_fromhost_VkExternalMemoryBufferCreateInfo(resourceTracker, reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
+        {
+            transform_fromhost_VkExportMemoryAllocateInfo(resourceTracker, reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
+        {
+            transform_fromhost_VkExportFenceCreateInfo(resourceTracker, reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
+        {
+            transform_fromhost_VkExportSemaphoreCreateInfo(resourceTracker, reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
+        {
+            transform_fromhost_VkPhysicalDeviceMaintenance3Properties(resourceTracker, reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES:
+        {
+            transform_fromhost_VkPhysicalDeviceShaderDrawParameterFeatures(resourceTracker, reinterpret_cast<VkPhysicalDeviceShaderDrawParameterFeatures*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_swapchain
+        case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
+        {
+            transform_fromhost_VkImageSwapchainCreateInfoKHR(resourceTracker, reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
+        {
+            transform_fromhost_VkBindImageMemorySwapchainInfoKHR(resourceTracker, reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
+        {
+            transform_fromhost_VkDeviceGroupPresentInfoKHR(resourceTracker, reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
+        {
+            transform_fromhost_VkDeviceGroupSwapchainCreateInfoKHR(resourceTracker, reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_display_swapchain
+        case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
+        {
+            transform_fromhost_VkDisplayPresentInfoKHR(resourceTracker, reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_external_memory_win32
+        case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
+        {
+            transform_fromhost_VkImportMemoryWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
+        {
+            transform_fromhost_VkExportMemoryWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_external_memory_fd
+        case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
+        {
+            transform_fromhost_VkImportMemoryFdInfoKHR(resourceTracker, reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_win32_keyed_mutex
+        case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
+        {
+            transform_fromhost_VkWin32KeyedMutexAcquireReleaseInfoKHR(resourceTracker, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_external_semaphore_win32
+        case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
+        {
+            transform_fromhost_VkExportSemaphoreWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
+        {
+            transform_fromhost_VkD3D12FenceSubmitInfoKHR(resourceTracker, reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_push_descriptor
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
+        {
+            transform_fromhost_VkPhysicalDevicePushDescriptorPropertiesKHR(resourceTracker, reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_incremental_present
+        case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
+        {
+            transform_fromhost_VkPresentRegionsKHR(resourceTracker, reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_shared_presentable_image
+        case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
+        {
+            transform_fromhost_VkSharedPresentSurfaceCapabilitiesKHR(resourceTracker, reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_external_fence_win32
+        case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
+        {
+            transform_fromhost_VkExportFenceWin32HandleInfoKHR(resourceTracker, reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_image_format_list
+        case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR:
+        {
+            transform_fromhost_VkImageFormatListCreateInfoKHR(resourceTracker, reinterpret_cast<VkImageFormatListCreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_KHR_8bit_storage
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR:
+        {
+            transform_fromhost_VkPhysicalDevice8BitStorageFeaturesKHR(resourceTracker, reinterpret_cast<VkPhysicalDevice8BitStorageFeaturesKHR*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_ANDROID_native_buffer
+        case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
+        {
+            transform_fromhost_VkNativeBufferANDROID(resourceTracker, reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_debug_report
+        case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkDebugReportCallbackCreateInfoEXT(resourceTracker, reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_AMD_rasterization_order
+        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
+        {
+            transform_fromhost_VkPipelineRasterizationStateRasterizationOrderAMD(resourceTracker, reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_dedicated_allocation
+        case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
+        {
+            transform_fromhost_VkDedicatedAllocationImageCreateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
+        {
+            transform_fromhost_VkDedicatedAllocationBufferCreateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
+        {
+            transform_fromhost_VkDedicatedAllocationMemoryAllocateInfoNV(resourceTracker, reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_AMD_texture_gather_bias_lod
+        case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
+        {
+            transform_fromhost_VkTextureLODGatherFormatPropertiesAMD(resourceTracker, reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_external_memory
+        case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
+        {
+            transform_fromhost_VkExternalMemoryImageCreateInfoNV(resourceTracker, reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
+        {
+            transform_fromhost_VkExportMemoryAllocateInfoNV(resourceTracker, reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_external_memory_win32
+        case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
+        {
+            transform_fromhost_VkImportMemoryWin32HandleInfoNV(resourceTracker, reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
+        {
+            transform_fromhost_VkExportMemoryWin32HandleInfoNV(resourceTracker, reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_win32_keyed_mutex
+        case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
+        {
+            transform_fromhost_VkWin32KeyedMutexAcquireReleaseInfoNV(resourceTracker, reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_validation_flags
+        case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
+        {
+            transform_fromhost_VkValidationFlagsEXT(resourceTracker, reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_conditional_rendering
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceConditionalRenderingFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
+        {
+            transform_fromhost_VkCommandBufferInheritanceConditionalRenderingInfoEXT(resourceTracker, 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:
+        {
+            transform_fromhost_VkPipelineViewportWScalingStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_display_control
+        case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkSwapchainCounterCreateInfoEXT(resourceTracker, reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_GOOGLE_display_timing
+        case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
+        {
+            transform_fromhost_VkPresentTimesInfoGOOGLE(resourceTracker, 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:
+        {
+            transform_fromhost_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(resourceTracker, reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_viewport_swizzle
+        case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
+        {
+            transform_fromhost_VkPipelineViewportSwizzleStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_discard_rectangles
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceDiscardRectanglePropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkPipelineDiscardRectangleStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_conservative_rasterization
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkPipelineRasterizationConservativeStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_debug_utils
+        case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkDebugUtilsMessengerCreateInfoEXT(resourceTracker, reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_ANDROID_external_memory_android_hardware_buffer
+        case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
+        {
+            transform_fromhost_VkAndroidHardwareBufferUsageANDROID(resourceTracker, reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
+        {
+            transform_fromhost_VkAndroidHardwareBufferFormatPropertiesANDROID(resourceTracker, reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
+        {
+            transform_fromhost_VkImportAndroidHardwareBufferInfoANDROID(resourceTracker, reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
+        {
+            transform_fromhost_VkExternalFormatANDROID(resourceTracker, reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_sampler_filter_minmax
+        case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkSamplerReductionModeCreateInfoEXT(resourceTracker, reinterpret_cast<VkSamplerReductionModeCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_sample_locations
+        case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
+        {
+            transform_fromhost_VkSampleLocationsInfoEXT(resourceTracker, reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
+        {
+            transform_fromhost_VkRenderPassSampleLocationsBeginInfoEXT(resourceTracker, reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkPipelineSampleLocationsStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceSampleLocationsPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_blend_operation_advanced
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkPipelineColorBlendAdvancedStateCreateInfoEXT(resourceTracker, 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:
+        {
+            transform_fromhost_VkPipelineCoverageToColorStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_framebuffer_mixed_samples
+        case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
+        {
+            transform_fromhost_VkPipelineCoverageModulationStateCreateInfoNV(resourceTracker, reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_validation_cache
+        case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkShaderModuleValidationCacheCreateInfoEXT(resourceTracker, reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_descriptor_indexing
+        case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(resourceTracker, reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceDescriptorIndexingPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT:
+        {
+            transform_fromhost_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(resourceTracker, reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT:
+        {
+            transform_fromhost_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(resourceTracker, reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupportEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_global_priority
+        case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkDeviceQueueGlobalPriorityCreateInfoEXT(resourceTracker, reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_external_memory_host
+        case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
+        {
+            transform_fromhost_VkImportMemoryHostPointerInfoEXT(resourceTracker, reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_AMD_shader_core_properties
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
+        {
+            transform_fromhost_VkPhysicalDeviceShaderCorePropertiesAMD(resourceTracker, reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_EXT_vertex_attribute_divisor
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
+        {
+            transform_fromhost_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(resourceTracker, reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
+        {
+            transform_fromhost_VkPipelineVertexInputDivisorStateCreateInfoEXT(resourceTracker, reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
+            break;
+        }
+#endif
+#ifdef VK_NV_device_diagnostic_checkpoints
+        case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
+        {
+            transform_fromhost_VkQueueFamilyCheckpointPropertiesNV(resourceTracker, reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
             break;
         }
 #endif
diff --git a/system/vulkan_enc/goldfish_vk_transform.h b/system/vulkan_enc/goldfish_vk_transform.h
index db2c930..9aa4b84 100644
--- a/system/vulkan_enc/goldfish_vk_transform.h
+++ b/system/vulkan_enc/goldfish_vk_transform.h
@@ -29,835 +29,1640 @@
 
 #include "vk_platform_compat.h"
 
+#include "goldfish_vk_private_defs.h"
 #include "ResourceTracker.h"
 
 
 namespace goldfish_vk {
 
 #ifdef VK_VERSION_1_0
-void transform_VkApplicationInfo(
+void transform_tohost_VkApplicationInfo(
     ResourceTracker* resourceTracker,
     VkApplicationInfo* toTransform);
 
-void transform_VkInstanceCreateInfo(
+void transform_fromhost_VkApplicationInfo(
+    ResourceTracker* resourceTracker,
+    VkApplicationInfo* toTransform);
+
+void transform_tohost_VkInstanceCreateInfo(
     ResourceTracker* resourceTracker,
     VkInstanceCreateInfo* toTransform);
 
-void transform_VkAllocationCallbacks(
+void transform_fromhost_VkInstanceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkInstanceCreateInfo* toTransform);
+
+void transform_tohost_VkAllocationCallbacks(
     ResourceTracker* resourceTracker,
     VkAllocationCallbacks* toTransform);
 
-void transform_VkPhysicalDeviceFeatures(
+void transform_fromhost_VkAllocationCallbacks(
+    ResourceTracker* resourceTracker,
+    VkAllocationCallbacks* toTransform);
+
+void transform_tohost_VkPhysicalDeviceFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceFeatures* toTransform);
 
-void transform_VkFormatProperties(
+void transform_fromhost_VkPhysicalDeviceFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceFeatures* toTransform);
+
+void transform_tohost_VkFormatProperties(
     ResourceTracker* resourceTracker,
     VkFormatProperties* toTransform);
 
-void transform_VkExtent3D(
+void transform_fromhost_VkFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkFormatProperties* toTransform);
+
+void transform_tohost_VkExtent3D(
     ResourceTracker* resourceTracker,
     VkExtent3D* toTransform);
 
-void transform_VkImageFormatProperties(
+void transform_fromhost_VkExtent3D(
+    ResourceTracker* resourceTracker,
+    VkExtent3D* toTransform);
+
+void transform_tohost_VkImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkImageFormatProperties* toTransform);
 
-void transform_VkPhysicalDeviceLimits(
+void transform_fromhost_VkImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkImageFormatProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceLimits(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceLimits* toTransform);
 
-void transform_VkPhysicalDeviceSparseProperties(
+void transform_fromhost_VkPhysicalDeviceLimits(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceLimits* toTransform);
+
+void transform_tohost_VkPhysicalDeviceSparseProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSparseProperties* toTransform);
 
-void transform_VkPhysicalDeviceProperties(
+void transform_fromhost_VkPhysicalDeviceSparseProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSparseProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProperties* toTransform);
 
-void transform_VkQueueFamilyProperties(
+void transform_fromhost_VkPhysicalDeviceProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProperties* toTransform);
+
+void transform_tohost_VkQueueFamilyProperties(
     ResourceTracker* resourceTracker,
     VkQueueFamilyProperties* toTransform);
 
-void transform_VkMemoryType(
+void transform_fromhost_VkQueueFamilyProperties(
+    ResourceTracker* resourceTracker,
+    VkQueueFamilyProperties* toTransform);
+
+void transform_tohost_VkMemoryType(
     ResourceTracker* resourceTracker,
     VkMemoryType* toTransform);
 
-void transform_VkMemoryHeap(
+void transform_fromhost_VkMemoryType(
+    ResourceTracker* resourceTracker,
+    VkMemoryType* toTransform);
+
+void transform_tohost_VkMemoryHeap(
     ResourceTracker* resourceTracker,
     VkMemoryHeap* toTransform);
 
-void transform_VkPhysicalDeviceMemoryProperties(
+void transform_fromhost_VkMemoryHeap(
+    ResourceTracker* resourceTracker,
+    VkMemoryHeap* toTransform);
+
+void transform_tohost_VkPhysicalDeviceMemoryProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMemoryProperties* toTransform);
 
-void transform_VkDeviceQueueCreateInfo(
+void transform_fromhost_VkPhysicalDeviceMemoryProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMemoryProperties* toTransform);
+
+void transform_tohost_VkDeviceQueueCreateInfo(
     ResourceTracker* resourceTracker,
     VkDeviceQueueCreateInfo* toTransform);
 
-void transform_VkDeviceCreateInfo(
+void transform_fromhost_VkDeviceQueueCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceQueueCreateInfo* toTransform);
+
+void transform_tohost_VkDeviceCreateInfo(
     ResourceTracker* resourceTracker,
     VkDeviceCreateInfo* toTransform);
 
-void transform_VkExtensionProperties(
+void transform_fromhost_VkDeviceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceCreateInfo* toTransform);
+
+void transform_tohost_VkExtensionProperties(
     ResourceTracker* resourceTracker,
     VkExtensionProperties* toTransform);
 
-void transform_VkLayerProperties(
+void transform_fromhost_VkExtensionProperties(
+    ResourceTracker* resourceTracker,
+    VkExtensionProperties* toTransform);
+
+void transform_tohost_VkLayerProperties(
     ResourceTracker* resourceTracker,
     VkLayerProperties* toTransform);
 
-void transform_VkSubmitInfo(
+void transform_fromhost_VkLayerProperties(
+    ResourceTracker* resourceTracker,
+    VkLayerProperties* toTransform);
+
+void transform_tohost_VkSubmitInfo(
     ResourceTracker* resourceTracker,
     VkSubmitInfo* toTransform);
 
-void transform_VkMemoryAllocateInfo(
+void transform_fromhost_VkSubmitInfo(
+    ResourceTracker* resourceTracker,
+    VkSubmitInfo* toTransform);
+
+void transform_tohost_VkMemoryAllocateInfo(
     ResourceTracker* resourceTracker,
     VkMemoryAllocateInfo* toTransform);
 
-void transform_VkMappedMemoryRange(
+void transform_fromhost_VkMemoryAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkMemoryAllocateInfo* toTransform);
+
+void transform_tohost_VkMappedMemoryRange(
     ResourceTracker* resourceTracker,
     VkMappedMemoryRange* toTransform);
 
-void transform_VkMemoryRequirements(
+void transform_fromhost_VkMappedMemoryRange(
+    ResourceTracker* resourceTracker,
+    VkMappedMemoryRange* toTransform);
+
+void transform_tohost_VkMemoryRequirements(
     ResourceTracker* resourceTracker,
     VkMemoryRequirements* toTransform);
 
-void transform_VkSparseImageFormatProperties(
+void transform_fromhost_VkMemoryRequirements(
+    ResourceTracker* resourceTracker,
+    VkMemoryRequirements* toTransform);
+
+void transform_tohost_VkSparseImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkSparseImageFormatProperties* toTransform);
 
-void transform_VkSparseImageMemoryRequirements(
+void transform_fromhost_VkSparseImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkSparseImageFormatProperties* toTransform);
+
+void transform_tohost_VkSparseImageMemoryRequirements(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryRequirements* toTransform);
 
-void transform_VkSparseMemoryBind(
+void transform_fromhost_VkSparseImageMemoryRequirements(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryRequirements* toTransform);
+
+void transform_tohost_VkSparseMemoryBind(
     ResourceTracker* resourceTracker,
     VkSparseMemoryBind* toTransform);
 
-void transform_VkSparseBufferMemoryBindInfo(
+void transform_fromhost_VkSparseMemoryBind(
+    ResourceTracker* resourceTracker,
+    VkSparseMemoryBind* toTransform);
+
+void transform_tohost_VkSparseBufferMemoryBindInfo(
     ResourceTracker* resourceTracker,
     VkSparseBufferMemoryBindInfo* toTransform);
 
-void transform_VkSparseImageOpaqueMemoryBindInfo(
+void transform_fromhost_VkSparseBufferMemoryBindInfo(
+    ResourceTracker* resourceTracker,
+    VkSparseBufferMemoryBindInfo* toTransform);
+
+void transform_tohost_VkSparseImageOpaqueMemoryBindInfo(
     ResourceTracker* resourceTracker,
     VkSparseImageOpaqueMemoryBindInfo* toTransform);
 
-void transform_VkImageSubresource(
+void transform_fromhost_VkSparseImageOpaqueMemoryBindInfo(
+    ResourceTracker* resourceTracker,
+    VkSparseImageOpaqueMemoryBindInfo* toTransform);
+
+void transform_tohost_VkImageSubresource(
     ResourceTracker* resourceTracker,
     VkImageSubresource* toTransform);
 
-void transform_VkOffset3D(
+void transform_fromhost_VkImageSubresource(
+    ResourceTracker* resourceTracker,
+    VkImageSubresource* toTransform);
+
+void transform_tohost_VkOffset3D(
     ResourceTracker* resourceTracker,
     VkOffset3D* toTransform);
 
-void transform_VkSparseImageMemoryBind(
+void transform_fromhost_VkOffset3D(
+    ResourceTracker* resourceTracker,
+    VkOffset3D* toTransform);
+
+void transform_tohost_VkSparseImageMemoryBind(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryBind* toTransform);
 
-void transform_VkSparseImageMemoryBindInfo(
+void transform_fromhost_VkSparseImageMemoryBind(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryBind* toTransform);
+
+void transform_tohost_VkSparseImageMemoryBindInfo(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryBindInfo* toTransform);
 
-void transform_VkBindSparseInfo(
+void transform_fromhost_VkSparseImageMemoryBindInfo(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryBindInfo* toTransform);
+
+void transform_tohost_VkBindSparseInfo(
     ResourceTracker* resourceTracker,
     VkBindSparseInfo* toTransform);
 
-void transform_VkFenceCreateInfo(
+void transform_fromhost_VkBindSparseInfo(
+    ResourceTracker* resourceTracker,
+    VkBindSparseInfo* toTransform);
+
+void transform_tohost_VkFenceCreateInfo(
     ResourceTracker* resourceTracker,
     VkFenceCreateInfo* toTransform);
 
-void transform_VkSemaphoreCreateInfo(
+void transform_fromhost_VkFenceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkFenceCreateInfo* toTransform);
+
+void transform_tohost_VkSemaphoreCreateInfo(
     ResourceTracker* resourceTracker,
     VkSemaphoreCreateInfo* toTransform);
 
-void transform_VkEventCreateInfo(
+void transform_fromhost_VkSemaphoreCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkSemaphoreCreateInfo* toTransform);
+
+void transform_tohost_VkEventCreateInfo(
     ResourceTracker* resourceTracker,
     VkEventCreateInfo* toTransform);
 
-void transform_VkQueryPoolCreateInfo(
+void transform_fromhost_VkEventCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkEventCreateInfo* toTransform);
+
+void transform_tohost_VkQueryPoolCreateInfo(
     ResourceTracker* resourceTracker,
     VkQueryPoolCreateInfo* toTransform);
 
-void transform_VkBufferCreateInfo(
+void transform_fromhost_VkQueryPoolCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkQueryPoolCreateInfo* toTransform);
+
+void transform_tohost_VkBufferCreateInfo(
     ResourceTracker* resourceTracker,
     VkBufferCreateInfo* toTransform);
 
-void transform_VkBufferViewCreateInfo(
+void transform_fromhost_VkBufferCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkBufferCreateInfo* toTransform);
+
+void transform_tohost_VkBufferViewCreateInfo(
     ResourceTracker* resourceTracker,
     VkBufferViewCreateInfo* toTransform);
 
-void transform_VkImageCreateInfo(
+void transform_fromhost_VkBufferViewCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkBufferViewCreateInfo* toTransform);
+
+void transform_tohost_VkImageCreateInfo(
     ResourceTracker* resourceTracker,
     VkImageCreateInfo* toTransform);
 
-void transform_VkSubresourceLayout(
+void transform_fromhost_VkImageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkImageCreateInfo* toTransform);
+
+void transform_tohost_VkSubresourceLayout(
     ResourceTracker* resourceTracker,
     VkSubresourceLayout* toTransform);
 
-void transform_VkComponentMapping(
+void transform_fromhost_VkSubresourceLayout(
+    ResourceTracker* resourceTracker,
+    VkSubresourceLayout* toTransform);
+
+void transform_tohost_VkComponentMapping(
     ResourceTracker* resourceTracker,
     VkComponentMapping* toTransform);
 
-void transform_VkImageSubresourceRange(
+void transform_fromhost_VkComponentMapping(
+    ResourceTracker* resourceTracker,
+    VkComponentMapping* toTransform);
+
+void transform_tohost_VkImageSubresourceRange(
     ResourceTracker* resourceTracker,
     VkImageSubresourceRange* toTransform);
 
-void transform_VkImageViewCreateInfo(
+void transform_fromhost_VkImageSubresourceRange(
+    ResourceTracker* resourceTracker,
+    VkImageSubresourceRange* toTransform);
+
+void transform_tohost_VkImageViewCreateInfo(
     ResourceTracker* resourceTracker,
     VkImageViewCreateInfo* toTransform);
 
-void transform_VkShaderModuleCreateInfo(
+void transform_fromhost_VkImageViewCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkImageViewCreateInfo* toTransform);
+
+void transform_tohost_VkShaderModuleCreateInfo(
     ResourceTracker* resourceTracker,
     VkShaderModuleCreateInfo* toTransform);
 
-void transform_VkPipelineCacheCreateInfo(
+void transform_fromhost_VkShaderModuleCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkShaderModuleCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineCacheCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineCacheCreateInfo* toTransform);
 
-void transform_VkSpecializationMapEntry(
+void transform_fromhost_VkPipelineCacheCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineCacheCreateInfo* toTransform);
+
+void transform_tohost_VkSpecializationMapEntry(
     ResourceTracker* resourceTracker,
     VkSpecializationMapEntry* toTransform);
 
-void transform_VkSpecializationInfo(
+void transform_fromhost_VkSpecializationMapEntry(
+    ResourceTracker* resourceTracker,
+    VkSpecializationMapEntry* toTransform);
+
+void transform_tohost_VkSpecializationInfo(
     ResourceTracker* resourceTracker,
     VkSpecializationInfo* toTransform);
 
-void transform_VkPipelineShaderStageCreateInfo(
+void transform_fromhost_VkSpecializationInfo(
+    ResourceTracker* resourceTracker,
+    VkSpecializationInfo* toTransform);
+
+void transform_tohost_VkPipelineShaderStageCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineShaderStageCreateInfo* toTransform);
 
-void transform_VkVertexInputBindingDescription(
+void transform_fromhost_VkPipelineShaderStageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineShaderStageCreateInfo* toTransform);
+
+void transform_tohost_VkVertexInputBindingDescription(
     ResourceTracker* resourceTracker,
     VkVertexInputBindingDescription* toTransform);
 
-void transform_VkVertexInputAttributeDescription(
+void transform_fromhost_VkVertexInputBindingDescription(
+    ResourceTracker* resourceTracker,
+    VkVertexInputBindingDescription* toTransform);
+
+void transform_tohost_VkVertexInputAttributeDescription(
     ResourceTracker* resourceTracker,
     VkVertexInputAttributeDescription* toTransform);
 
-void transform_VkPipelineVertexInputStateCreateInfo(
+void transform_fromhost_VkVertexInputAttributeDescription(
+    ResourceTracker* resourceTracker,
+    VkVertexInputAttributeDescription* toTransform);
+
+void transform_tohost_VkPipelineVertexInputStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineVertexInputStateCreateInfo* toTransform);
 
-void transform_VkPipelineInputAssemblyStateCreateInfo(
+void transform_fromhost_VkPipelineVertexInputStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineVertexInputStateCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineInputAssemblyStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineInputAssemblyStateCreateInfo* toTransform);
 
-void transform_VkPipelineTessellationStateCreateInfo(
+void transform_fromhost_VkPipelineInputAssemblyStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineInputAssemblyStateCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineTessellationStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineTessellationStateCreateInfo* toTransform);
 
-void transform_VkViewport(
+void transform_fromhost_VkPipelineTessellationStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineTessellationStateCreateInfo* toTransform);
+
+void transform_tohost_VkViewport(
     ResourceTracker* resourceTracker,
     VkViewport* toTransform);
 
-void transform_VkOffset2D(
+void transform_fromhost_VkViewport(
+    ResourceTracker* resourceTracker,
+    VkViewport* toTransform);
+
+void transform_tohost_VkOffset2D(
     ResourceTracker* resourceTracker,
     VkOffset2D* toTransform);
 
-void transform_VkExtent2D(
+void transform_fromhost_VkOffset2D(
+    ResourceTracker* resourceTracker,
+    VkOffset2D* toTransform);
+
+void transform_tohost_VkExtent2D(
     ResourceTracker* resourceTracker,
     VkExtent2D* toTransform);
 
-void transform_VkRect2D(
+void transform_fromhost_VkExtent2D(
+    ResourceTracker* resourceTracker,
+    VkExtent2D* toTransform);
+
+void transform_tohost_VkRect2D(
     ResourceTracker* resourceTracker,
     VkRect2D* toTransform);
 
-void transform_VkPipelineViewportStateCreateInfo(
+void transform_fromhost_VkRect2D(
+    ResourceTracker* resourceTracker,
+    VkRect2D* toTransform);
+
+void transform_tohost_VkPipelineViewportStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineViewportStateCreateInfo* toTransform);
 
-void transform_VkPipelineRasterizationStateCreateInfo(
+void transform_fromhost_VkPipelineViewportStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineViewportStateCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineRasterizationStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineRasterizationStateCreateInfo* toTransform);
 
-void transform_VkPipelineMultisampleStateCreateInfo(
+void transform_fromhost_VkPipelineRasterizationStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineRasterizationStateCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineMultisampleStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineMultisampleStateCreateInfo* toTransform);
 
-void transform_VkStencilOpState(
+void transform_fromhost_VkPipelineMultisampleStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineMultisampleStateCreateInfo* toTransform);
+
+void transform_tohost_VkStencilOpState(
     ResourceTracker* resourceTracker,
     VkStencilOpState* toTransform);
 
-void transform_VkPipelineDepthStencilStateCreateInfo(
+void transform_fromhost_VkStencilOpState(
+    ResourceTracker* resourceTracker,
+    VkStencilOpState* toTransform);
+
+void transform_tohost_VkPipelineDepthStencilStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineDepthStencilStateCreateInfo* toTransform);
 
-void transform_VkPipelineColorBlendAttachmentState(
+void transform_fromhost_VkPipelineDepthStencilStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineDepthStencilStateCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineColorBlendAttachmentState(
     ResourceTracker* resourceTracker,
     VkPipelineColorBlendAttachmentState* toTransform);
 
-void transform_VkPipelineColorBlendStateCreateInfo(
+void transform_fromhost_VkPipelineColorBlendAttachmentState(
+    ResourceTracker* resourceTracker,
+    VkPipelineColorBlendAttachmentState* toTransform);
+
+void transform_tohost_VkPipelineColorBlendStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineColorBlendStateCreateInfo* toTransform);
 
-void transform_VkPipelineDynamicStateCreateInfo(
+void transform_fromhost_VkPipelineColorBlendStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineColorBlendStateCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineDynamicStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineDynamicStateCreateInfo* toTransform);
 
-void transform_VkGraphicsPipelineCreateInfo(
+void transform_fromhost_VkPipelineDynamicStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineDynamicStateCreateInfo* toTransform);
+
+void transform_tohost_VkGraphicsPipelineCreateInfo(
     ResourceTracker* resourceTracker,
     VkGraphicsPipelineCreateInfo* toTransform);
 
-void transform_VkComputePipelineCreateInfo(
+void transform_fromhost_VkGraphicsPipelineCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkGraphicsPipelineCreateInfo* toTransform);
+
+void transform_tohost_VkComputePipelineCreateInfo(
     ResourceTracker* resourceTracker,
     VkComputePipelineCreateInfo* toTransform);
 
-void transform_VkPushConstantRange(
+void transform_fromhost_VkComputePipelineCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkComputePipelineCreateInfo* toTransform);
+
+void transform_tohost_VkPushConstantRange(
     ResourceTracker* resourceTracker,
     VkPushConstantRange* toTransform);
 
-void transform_VkPipelineLayoutCreateInfo(
+void transform_fromhost_VkPushConstantRange(
+    ResourceTracker* resourceTracker,
+    VkPushConstantRange* toTransform);
+
+void transform_tohost_VkPipelineLayoutCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineLayoutCreateInfo* toTransform);
 
-void transform_VkSamplerCreateInfo(
+void transform_fromhost_VkPipelineLayoutCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineLayoutCreateInfo* toTransform);
+
+void transform_tohost_VkSamplerCreateInfo(
     ResourceTracker* resourceTracker,
     VkSamplerCreateInfo* toTransform);
 
-void transform_VkDescriptorSetLayoutBinding(
+void transform_fromhost_VkSamplerCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkSamplerCreateInfo* toTransform);
+
+void transform_tohost_VkDescriptorSetLayoutBinding(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutBinding* toTransform);
 
-void transform_VkDescriptorSetLayoutCreateInfo(
+void transform_fromhost_VkDescriptorSetLayoutBinding(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutBinding* toTransform);
+
+void transform_tohost_VkDescriptorSetLayoutCreateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutCreateInfo* toTransform);
 
-void transform_VkDescriptorPoolSize(
+void transform_fromhost_VkDescriptorSetLayoutCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutCreateInfo* toTransform);
+
+void transform_tohost_VkDescriptorPoolSize(
     ResourceTracker* resourceTracker,
     VkDescriptorPoolSize* toTransform);
 
-void transform_VkDescriptorPoolCreateInfo(
+void transform_fromhost_VkDescriptorPoolSize(
+    ResourceTracker* resourceTracker,
+    VkDescriptorPoolSize* toTransform);
+
+void transform_tohost_VkDescriptorPoolCreateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorPoolCreateInfo* toTransform);
 
-void transform_VkDescriptorSetAllocateInfo(
+void transform_fromhost_VkDescriptorPoolCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorPoolCreateInfo* toTransform);
+
+void transform_tohost_VkDescriptorSetAllocateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorSetAllocateInfo* toTransform);
 
-void transform_VkDescriptorImageInfo(
+void transform_fromhost_VkDescriptorSetAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetAllocateInfo* toTransform);
+
+void transform_tohost_VkDescriptorImageInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorImageInfo* toTransform);
 
-void transform_VkDescriptorBufferInfo(
+void transform_fromhost_VkDescriptorImageInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorImageInfo* toTransform);
+
+void transform_tohost_VkDescriptorBufferInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorBufferInfo* toTransform);
 
-void transform_VkWriteDescriptorSet(
+void transform_fromhost_VkDescriptorBufferInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorBufferInfo* toTransform);
+
+void transform_tohost_VkWriteDescriptorSet(
     ResourceTracker* resourceTracker,
     VkWriteDescriptorSet* toTransform);
 
-void transform_VkCopyDescriptorSet(
+void transform_fromhost_VkWriteDescriptorSet(
+    ResourceTracker* resourceTracker,
+    VkWriteDescriptorSet* toTransform);
+
+void transform_tohost_VkCopyDescriptorSet(
     ResourceTracker* resourceTracker,
     VkCopyDescriptorSet* toTransform);
 
-void transform_VkFramebufferCreateInfo(
+void transform_fromhost_VkCopyDescriptorSet(
+    ResourceTracker* resourceTracker,
+    VkCopyDescriptorSet* toTransform);
+
+void transform_tohost_VkFramebufferCreateInfo(
     ResourceTracker* resourceTracker,
     VkFramebufferCreateInfo* toTransform);
 
-void transform_VkAttachmentDescription(
+void transform_fromhost_VkFramebufferCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkFramebufferCreateInfo* toTransform);
+
+void transform_tohost_VkAttachmentDescription(
     ResourceTracker* resourceTracker,
     VkAttachmentDescription* toTransform);
 
-void transform_VkAttachmentReference(
+void transform_fromhost_VkAttachmentDescription(
+    ResourceTracker* resourceTracker,
+    VkAttachmentDescription* toTransform);
+
+void transform_tohost_VkAttachmentReference(
     ResourceTracker* resourceTracker,
     VkAttachmentReference* toTransform);
 
-void transform_VkSubpassDescription(
+void transform_fromhost_VkAttachmentReference(
+    ResourceTracker* resourceTracker,
+    VkAttachmentReference* toTransform);
+
+void transform_tohost_VkSubpassDescription(
     ResourceTracker* resourceTracker,
     VkSubpassDescription* toTransform);
 
-void transform_VkSubpassDependency(
+void transform_fromhost_VkSubpassDescription(
+    ResourceTracker* resourceTracker,
+    VkSubpassDescription* toTransform);
+
+void transform_tohost_VkSubpassDependency(
     ResourceTracker* resourceTracker,
     VkSubpassDependency* toTransform);
 
-void transform_VkRenderPassCreateInfo(
+void transform_fromhost_VkSubpassDependency(
+    ResourceTracker* resourceTracker,
+    VkSubpassDependency* toTransform);
+
+void transform_tohost_VkRenderPassCreateInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassCreateInfo* toTransform);
 
-void transform_VkCommandPoolCreateInfo(
+void transform_fromhost_VkRenderPassCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassCreateInfo* toTransform);
+
+void transform_tohost_VkCommandPoolCreateInfo(
     ResourceTracker* resourceTracker,
     VkCommandPoolCreateInfo* toTransform);
 
-void transform_VkCommandBufferAllocateInfo(
+void transform_fromhost_VkCommandPoolCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandPoolCreateInfo* toTransform);
+
+void transform_tohost_VkCommandBufferAllocateInfo(
     ResourceTracker* resourceTracker,
     VkCommandBufferAllocateInfo* toTransform);
 
-void transform_VkCommandBufferInheritanceInfo(
+void transform_fromhost_VkCommandBufferAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferAllocateInfo* toTransform);
+
+void transform_tohost_VkCommandBufferInheritanceInfo(
     ResourceTracker* resourceTracker,
     VkCommandBufferInheritanceInfo* toTransform);
 
-void transform_VkCommandBufferBeginInfo(
+void transform_fromhost_VkCommandBufferInheritanceInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferInheritanceInfo* toTransform);
+
+void transform_tohost_VkCommandBufferBeginInfo(
     ResourceTracker* resourceTracker,
     VkCommandBufferBeginInfo* toTransform);
 
-void transform_VkBufferCopy(
+void transform_fromhost_VkCommandBufferBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferBeginInfo* toTransform);
+
+void transform_tohost_VkBufferCopy(
     ResourceTracker* resourceTracker,
     VkBufferCopy* toTransform);
 
-void transform_VkImageSubresourceLayers(
+void transform_fromhost_VkBufferCopy(
+    ResourceTracker* resourceTracker,
+    VkBufferCopy* toTransform);
+
+void transform_tohost_VkImageSubresourceLayers(
     ResourceTracker* resourceTracker,
     VkImageSubresourceLayers* toTransform);
 
-void transform_VkImageCopy(
+void transform_fromhost_VkImageSubresourceLayers(
+    ResourceTracker* resourceTracker,
+    VkImageSubresourceLayers* toTransform);
+
+void transform_tohost_VkImageCopy(
     ResourceTracker* resourceTracker,
     VkImageCopy* toTransform);
 
-void transform_VkImageBlit(
+void transform_fromhost_VkImageCopy(
+    ResourceTracker* resourceTracker,
+    VkImageCopy* toTransform);
+
+void transform_tohost_VkImageBlit(
     ResourceTracker* resourceTracker,
     VkImageBlit* toTransform);
 
-void transform_VkBufferImageCopy(
+void transform_fromhost_VkImageBlit(
+    ResourceTracker* resourceTracker,
+    VkImageBlit* toTransform);
+
+void transform_tohost_VkBufferImageCopy(
     ResourceTracker* resourceTracker,
     VkBufferImageCopy* toTransform);
 
-void transform_VkClearColorValue(
+void transform_fromhost_VkBufferImageCopy(
+    ResourceTracker* resourceTracker,
+    VkBufferImageCopy* toTransform);
+
+void transform_tohost_VkClearColorValue(
     ResourceTracker* resourceTracker,
     VkClearColorValue* toTransform);
 
-void transform_VkClearDepthStencilValue(
+void transform_fromhost_VkClearColorValue(
+    ResourceTracker* resourceTracker,
+    VkClearColorValue* toTransform);
+
+void transform_tohost_VkClearDepthStencilValue(
     ResourceTracker* resourceTracker,
     VkClearDepthStencilValue* toTransform);
 
-void transform_VkClearValue(
+void transform_fromhost_VkClearDepthStencilValue(
+    ResourceTracker* resourceTracker,
+    VkClearDepthStencilValue* toTransform);
+
+void transform_tohost_VkClearValue(
     ResourceTracker* resourceTracker,
     VkClearValue* toTransform);
 
-void transform_VkClearAttachment(
+void transform_fromhost_VkClearValue(
+    ResourceTracker* resourceTracker,
+    VkClearValue* toTransform);
+
+void transform_tohost_VkClearAttachment(
     ResourceTracker* resourceTracker,
     VkClearAttachment* toTransform);
 
-void transform_VkClearRect(
+void transform_fromhost_VkClearAttachment(
+    ResourceTracker* resourceTracker,
+    VkClearAttachment* toTransform);
+
+void transform_tohost_VkClearRect(
     ResourceTracker* resourceTracker,
     VkClearRect* toTransform);
 
-void transform_VkImageResolve(
+void transform_fromhost_VkClearRect(
+    ResourceTracker* resourceTracker,
+    VkClearRect* toTransform);
+
+void transform_tohost_VkImageResolve(
     ResourceTracker* resourceTracker,
     VkImageResolve* toTransform);
 
-void transform_VkMemoryBarrier(
+void transform_fromhost_VkImageResolve(
+    ResourceTracker* resourceTracker,
+    VkImageResolve* toTransform);
+
+void transform_tohost_VkMemoryBarrier(
     ResourceTracker* resourceTracker,
     VkMemoryBarrier* toTransform);
 
-void transform_VkBufferMemoryBarrier(
+void transform_fromhost_VkMemoryBarrier(
+    ResourceTracker* resourceTracker,
+    VkMemoryBarrier* toTransform);
+
+void transform_tohost_VkBufferMemoryBarrier(
     ResourceTracker* resourceTracker,
     VkBufferMemoryBarrier* toTransform);
 
-void transform_VkImageMemoryBarrier(
+void transform_fromhost_VkBufferMemoryBarrier(
+    ResourceTracker* resourceTracker,
+    VkBufferMemoryBarrier* toTransform);
+
+void transform_tohost_VkImageMemoryBarrier(
     ResourceTracker* resourceTracker,
     VkImageMemoryBarrier* toTransform);
 
-void transform_VkRenderPassBeginInfo(
+void transform_fromhost_VkImageMemoryBarrier(
+    ResourceTracker* resourceTracker,
+    VkImageMemoryBarrier* toTransform);
+
+void transform_tohost_VkRenderPassBeginInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassBeginInfo* toTransform);
 
-void transform_VkDispatchIndirectCommand(
+void transform_fromhost_VkRenderPassBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassBeginInfo* toTransform);
+
+void transform_tohost_VkDispatchIndirectCommand(
     ResourceTracker* resourceTracker,
     VkDispatchIndirectCommand* toTransform);
 
-void transform_VkDrawIndexedIndirectCommand(
+void transform_fromhost_VkDispatchIndirectCommand(
+    ResourceTracker* resourceTracker,
+    VkDispatchIndirectCommand* toTransform);
+
+void transform_tohost_VkDrawIndexedIndirectCommand(
     ResourceTracker* resourceTracker,
     VkDrawIndexedIndirectCommand* toTransform);
 
-void transform_VkDrawIndirectCommand(
+void transform_fromhost_VkDrawIndexedIndirectCommand(
+    ResourceTracker* resourceTracker,
+    VkDrawIndexedIndirectCommand* toTransform);
+
+void transform_tohost_VkDrawIndirectCommand(
     ResourceTracker* resourceTracker,
     VkDrawIndirectCommand* toTransform);
 
-void transform_VkBaseOutStructure(
+void transform_fromhost_VkDrawIndirectCommand(
+    ResourceTracker* resourceTracker,
+    VkDrawIndirectCommand* toTransform);
+
+void transform_tohost_VkBaseOutStructure(
     ResourceTracker* resourceTracker,
     VkBaseOutStructure* toTransform);
 
-void transform_VkBaseInStructure(
+void transform_fromhost_VkBaseOutStructure(
+    ResourceTracker* resourceTracker,
+    VkBaseOutStructure* toTransform);
+
+void transform_tohost_VkBaseInStructure(
+    ResourceTracker* resourceTracker,
+    VkBaseInStructure* toTransform);
+
+void transform_fromhost_VkBaseInStructure(
     ResourceTracker* resourceTracker,
     VkBaseInStructure* toTransform);
 
 #endif
 #ifdef VK_VERSION_1_1
-void transform_VkPhysicalDeviceSubgroupProperties(
+void transform_tohost_VkPhysicalDeviceSubgroupProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSubgroupProperties* toTransform);
 
-void transform_VkBindBufferMemoryInfo(
+void transform_fromhost_VkPhysicalDeviceSubgroupProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSubgroupProperties* toTransform);
+
+void transform_tohost_VkBindBufferMemoryInfo(
     ResourceTracker* resourceTracker,
     VkBindBufferMemoryInfo* toTransform);
 
-void transform_VkBindImageMemoryInfo(
+void transform_fromhost_VkBindBufferMemoryInfo(
+    ResourceTracker* resourceTracker,
+    VkBindBufferMemoryInfo* toTransform);
+
+void transform_tohost_VkBindImageMemoryInfo(
     ResourceTracker* resourceTracker,
     VkBindImageMemoryInfo* toTransform);
 
-void transform_VkPhysicalDevice16BitStorageFeatures(
+void transform_fromhost_VkBindImageMemoryInfo(
+    ResourceTracker* resourceTracker,
+    VkBindImageMemoryInfo* toTransform);
+
+void transform_tohost_VkPhysicalDevice16BitStorageFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDevice16BitStorageFeatures* toTransform);
 
-void transform_VkMemoryDedicatedRequirements(
+void transform_fromhost_VkPhysicalDevice16BitStorageFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevice16BitStorageFeatures* toTransform);
+
+void transform_tohost_VkMemoryDedicatedRequirements(
     ResourceTracker* resourceTracker,
     VkMemoryDedicatedRequirements* toTransform);
 
-void transform_VkMemoryDedicatedAllocateInfo(
+void transform_fromhost_VkMemoryDedicatedRequirements(
+    ResourceTracker* resourceTracker,
+    VkMemoryDedicatedRequirements* toTransform);
+
+void transform_tohost_VkMemoryDedicatedAllocateInfo(
     ResourceTracker* resourceTracker,
     VkMemoryDedicatedAllocateInfo* toTransform);
 
-void transform_VkMemoryAllocateFlagsInfo(
+void transform_fromhost_VkMemoryDedicatedAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkMemoryDedicatedAllocateInfo* toTransform);
+
+void transform_tohost_VkMemoryAllocateFlagsInfo(
     ResourceTracker* resourceTracker,
     VkMemoryAllocateFlagsInfo* toTransform);
 
-void transform_VkDeviceGroupRenderPassBeginInfo(
+void transform_fromhost_VkMemoryAllocateFlagsInfo(
+    ResourceTracker* resourceTracker,
+    VkMemoryAllocateFlagsInfo* toTransform);
+
+void transform_tohost_VkDeviceGroupRenderPassBeginInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupRenderPassBeginInfo* toTransform);
 
-void transform_VkDeviceGroupCommandBufferBeginInfo(
+void transform_fromhost_VkDeviceGroupRenderPassBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupRenderPassBeginInfo* toTransform);
+
+void transform_tohost_VkDeviceGroupCommandBufferBeginInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupCommandBufferBeginInfo* toTransform);
 
-void transform_VkDeviceGroupSubmitInfo(
+void transform_fromhost_VkDeviceGroupCommandBufferBeginInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupCommandBufferBeginInfo* toTransform);
+
+void transform_tohost_VkDeviceGroupSubmitInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupSubmitInfo* toTransform);
 
-void transform_VkDeviceGroupBindSparseInfo(
+void transform_fromhost_VkDeviceGroupSubmitInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupSubmitInfo* toTransform);
+
+void transform_tohost_VkDeviceGroupBindSparseInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupBindSparseInfo* toTransform);
 
-void transform_VkBindBufferMemoryDeviceGroupInfo(
+void transform_fromhost_VkDeviceGroupBindSparseInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupBindSparseInfo* toTransform);
+
+void transform_tohost_VkBindBufferMemoryDeviceGroupInfo(
     ResourceTracker* resourceTracker,
     VkBindBufferMemoryDeviceGroupInfo* toTransform);
 
-void transform_VkBindImageMemoryDeviceGroupInfo(
+void transform_fromhost_VkBindBufferMemoryDeviceGroupInfo(
+    ResourceTracker* resourceTracker,
+    VkBindBufferMemoryDeviceGroupInfo* toTransform);
+
+void transform_tohost_VkBindImageMemoryDeviceGroupInfo(
     ResourceTracker* resourceTracker,
     VkBindImageMemoryDeviceGroupInfo* toTransform);
 
-void transform_VkPhysicalDeviceGroupProperties(
+void transform_fromhost_VkBindImageMemoryDeviceGroupInfo(
+    ResourceTracker* resourceTracker,
+    VkBindImageMemoryDeviceGroupInfo* toTransform);
+
+void transform_tohost_VkPhysicalDeviceGroupProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceGroupProperties* toTransform);
 
-void transform_VkDeviceGroupDeviceCreateInfo(
+void transform_fromhost_VkPhysicalDeviceGroupProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceGroupProperties* toTransform);
+
+void transform_tohost_VkDeviceGroupDeviceCreateInfo(
     ResourceTracker* resourceTracker,
     VkDeviceGroupDeviceCreateInfo* toTransform);
 
-void transform_VkBufferMemoryRequirementsInfo2(
+void transform_fromhost_VkDeviceGroupDeviceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupDeviceCreateInfo* toTransform);
+
+void transform_tohost_VkBufferMemoryRequirementsInfo2(
     ResourceTracker* resourceTracker,
     VkBufferMemoryRequirementsInfo2* toTransform);
 
-void transform_VkImageMemoryRequirementsInfo2(
+void transform_fromhost_VkBufferMemoryRequirementsInfo2(
+    ResourceTracker* resourceTracker,
+    VkBufferMemoryRequirementsInfo2* toTransform);
+
+void transform_tohost_VkImageMemoryRequirementsInfo2(
     ResourceTracker* resourceTracker,
     VkImageMemoryRequirementsInfo2* toTransform);
 
-void transform_VkImageSparseMemoryRequirementsInfo2(
+void transform_fromhost_VkImageMemoryRequirementsInfo2(
+    ResourceTracker* resourceTracker,
+    VkImageMemoryRequirementsInfo2* toTransform);
+
+void transform_tohost_VkImageSparseMemoryRequirementsInfo2(
     ResourceTracker* resourceTracker,
     VkImageSparseMemoryRequirementsInfo2* toTransform);
 
-void transform_VkMemoryRequirements2(
+void transform_fromhost_VkImageSparseMemoryRequirementsInfo2(
+    ResourceTracker* resourceTracker,
+    VkImageSparseMemoryRequirementsInfo2* toTransform);
+
+void transform_tohost_VkMemoryRequirements2(
     ResourceTracker* resourceTracker,
     VkMemoryRequirements2* toTransform);
 
-void transform_VkSparseImageMemoryRequirements2(
+void transform_fromhost_VkMemoryRequirements2(
+    ResourceTracker* resourceTracker,
+    VkMemoryRequirements2* toTransform);
+
+void transform_tohost_VkSparseImageMemoryRequirements2(
     ResourceTracker* resourceTracker,
     VkSparseImageMemoryRequirements2* toTransform);
 
-void transform_VkPhysicalDeviceFeatures2(
+void transform_fromhost_VkSparseImageMemoryRequirements2(
+    ResourceTracker* resourceTracker,
+    VkSparseImageMemoryRequirements2* toTransform);
+
+void transform_tohost_VkPhysicalDeviceFeatures2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceFeatures2* toTransform);
 
-void transform_VkPhysicalDeviceProperties2(
+void transform_fromhost_VkPhysicalDeviceFeatures2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceFeatures2* toTransform);
+
+void transform_tohost_VkPhysicalDeviceProperties2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProperties2* toTransform);
 
-void transform_VkFormatProperties2(
+void transform_fromhost_VkPhysicalDeviceProperties2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProperties2* toTransform);
+
+void transform_tohost_VkFormatProperties2(
     ResourceTracker* resourceTracker,
     VkFormatProperties2* toTransform);
 
-void transform_VkImageFormatProperties2(
+void transform_fromhost_VkFormatProperties2(
+    ResourceTracker* resourceTracker,
+    VkFormatProperties2* toTransform);
+
+void transform_tohost_VkImageFormatProperties2(
     ResourceTracker* resourceTracker,
     VkImageFormatProperties2* toTransform);
 
-void transform_VkPhysicalDeviceImageFormatInfo2(
+void transform_fromhost_VkImageFormatProperties2(
+    ResourceTracker* resourceTracker,
+    VkImageFormatProperties2* toTransform);
+
+void transform_tohost_VkPhysicalDeviceImageFormatInfo2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceImageFormatInfo2* toTransform);
 
-void transform_VkQueueFamilyProperties2(
+void transform_fromhost_VkPhysicalDeviceImageFormatInfo2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceImageFormatInfo2* toTransform);
+
+void transform_tohost_VkQueueFamilyProperties2(
     ResourceTracker* resourceTracker,
     VkQueueFamilyProperties2* toTransform);
 
-void transform_VkPhysicalDeviceMemoryProperties2(
+void transform_fromhost_VkQueueFamilyProperties2(
+    ResourceTracker* resourceTracker,
+    VkQueueFamilyProperties2* toTransform);
+
+void transform_tohost_VkPhysicalDeviceMemoryProperties2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMemoryProperties2* toTransform);
 
-void transform_VkSparseImageFormatProperties2(
+void transform_fromhost_VkPhysicalDeviceMemoryProperties2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMemoryProperties2* toTransform);
+
+void transform_tohost_VkSparseImageFormatProperties2(
     ResourceTracker* resourceTracker,
     VkSparseImageFormatProperties2* toTransform);
 
-void transform_VkPhysicalDeviceSparseImageFormatInfo2(
+void transform_fromhost_VkSparseImageFormatProperties2(
+    ResourceTracker* resourceTracker,
+    VkSparseImageFormatProperties2* toTransform);
+
+void transform_tohost_VkPhysicalDeviceSparseImageFormatInfo2(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSparseImageFormatInfo2* toTransform);
 
-void transform_VkPhysicalDevicePointClippingProperties(
+void transform_fromhost_VkPhysicalDeviceSparseImageFormatInfo2(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSparseImageFormatInfo2* toTransform);
+
+void transform_tohost_VkPhysicalDevicePointClippingProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDevicePointClippingProperties* toTransform);
 
-void transform_VkInputAttachmentAspectReference(
+void transform_fromhost_VkPhysicalDevicePointClippingProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevicePointClippingProperties* toTransform);
+
+void transform_tohost_VkInputAttachmentAspectReference(
     ResourceTracker* resourceTracker,
     VkInputAttachmentAspectReference* toTransform);
 
-void transform_VkRenderPassInputAttachmentAspectCreateInfo(
+void transform_fromhost_VkInputAttachmentAspectReference(
+    ResourceTracker* resourceTracker,
+    VkInputAttachmentAspectReference* toTransform);
+
+void transform_tohost_VkRenderPassInputAttachmentAspectCreateInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassInputAttachmentAspectCreateInfo* toTransform);
 
-void transform_VkImageViewUsageCreateInfo(
+void transform_fromhost_VkRenderPassInputAttachmentAspectCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassInputAttachmentAspectCreateInfo* toTransform);
+
+void transform_tohost_VkImageViewUsageCreateInfo(
     ResourceTracker* resourceTracker,
     VkImageViewUsageCreateInfo* toTransform);
 
-void transform_VkPipelineTessellationDomainOriginStateCreateInfo(
+void transform_fromhost_VkImageViewUsageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkImageViewUsageCreateInfo* toTransform);
+
+void transform_tohost_VkPipelineTessellationDomainOriginStateCreateInfo(
     ResourceTracker* resourceTracker,
     VkPipelineTessellationDomainOriginStateCreateInfo* toTransform);
 
-void transform_VkRenderPassMultiviewCreateInfo(
+void transform_fromhost_VkPipelineTessellationDomainOriginStateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkPipelineTessellationDomainOriginStateCreateInfo* toTransform);
+
+void transform_tohost_VkRenderPassMultiviewCreateInfo(
     ResourceTracker* resourceTracker,
     VkRenderPassMultiviewCreateInfo* toTransform);
 
-void transform_VkPhysicalDeviceMultiviewFeatures(
+void transform_fromhost_VkRenderPassMultiviewCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkRenderPassMultiviewCreateInfo* toTransform);
+
+void transform_tohost_VkPhysicalDeviceMultiviewFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMultiviewFeatures* toTransform);
 
-void transform_VkPhysicalDeviceMultiviewProperties(
+void transform_fromhost_VkPhysicalDeviceMultiviewFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMultiviewFeatures* toTransform);
+
+void transform_tohost_VkPhysicalDeviceMultiviewProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMultiviewProperties* toTransform);
 
-void transform_VkPhysicalDeviceVariablePointerFeatures(
+void transform_fromhost_VkPhysicalDeviceMultiviewProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMultiviewProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceVariablePointerFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceVariablePointerFeatures* toTransform);
 
-void transform_VkPhysicalDeviceProtectedMemoryFeatures(
+void transform_fromhost_VkPhysicalDeviceVariablePointerFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceVariablePointerFeatures* toTransform);
+
+void transform_tohost_VkPhysicalDeviceProtectedMemoryFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProtectedMemoryFeatures* toTransform);
 
-void transform_VkPhysicalDeviceProtectedMemoryProperties(
+void transform_fromhost_VkPhysicalDeviceProtectedMemoryFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProtectedMemoryFeatures* toTransform);
+
+void transform_tohost_VkPhysicalDeviceProtectedMemoryProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceProtectedMemoryProperties* toTransform);
 
-void transform_VkDeviceQueueInfo2(
+void transform_fromhost_VkPhysicalDeviceProtectedMemoryProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceProtectedMemoryProperties* toTransform);
+
+void transform_tohost_VkDeviceQueueInfo2(
     ResourceTracker* resourceTracker,
     VkDeviceQueueInfo2* toTransform);
 
-void transform_VkProtectedSubmitInfo(
+void transform_fromhost_VkDeviceQueueInfo2(
+    ResourceTracker* resourceTracker,
+    VkDeviceQueueInfo2* toTransform);
+
+void transform_tohost_VkProtectedSubmitInfo(
     ResourceTracker* resourceTracker,
     VkProtectedSubmitInfo* toTransform);
 
-void transform_VkSamplerYcbcrConversionCreateInfo(
+void transform_fromhost_VkProtectedSubmitInfo(
+    ResourceTracker* resourceTracker,
+    VkProtectedSubmitInfo* toTransform);
+
+void transform_tohost_VkSamplerYcbcrConversionCreateInfo(
     ResourceTracker* resourceTracker,
     VkSamplerYcbcrConversionCreateInfo* toTransform);
 
-void transform_VkSamplerYcbcrConversionInfo(
+void transform_fromhost_VkSamplerYcbcrConversionCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkSamplerYcbcrConversionCreateInfo* toTransform);
+
+void transform_tohost_VkSamplerYcbcrConversionInfo(
     ResourceTracker* resourceTracker,
     VkSamplerYcbcrConversionInfo* toTransform);
 
-void transform_VkBindImagePlaneMemoryInfo(
+void transform_fromhost_VkSamplerYcbcrConversionInfo(
+    ResourceTracker* resourceTracker,
+    VkSamplerYcbcrConversionInfo* toTransform);
+
+void transform_tohost_VkBindImagePlaneMemoryInfo(
     ResourceTracker* resourceTracker,
     VkBindImagePlaneMemoryInfo* toTransform);
 
-void transform_VkImagePlaneMemoryRequirementsInfo(
+void transform_fromhost_VkBindImagePlaneMemoryInfo(
+    ResourceTracker* resourceTracker,
+    VkBindImagePlaneMemoryInfo* toTransform);
+
+void transform_tohost_VkImagePlaneMemoryRequirementsInfo(
     ResourceTracker* resourceTracker,
     VkImagePlaneMemoryRequirementsInfo* toTransform);
 
-void transform_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
+void transform_fromhost_VkImagePlaneMemoryRequirementsInfo(
+    ResourceTracker* resourceTracker,
+    VkImagePlaneMemoryRequirementsInfo* toTransform);
+
+void transform_tohost_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSamplerYcbcrConversionFeatures* toTransform);
 
-void transform_VkSamplerYcbcrConversionImageFormatProperties(
+void transform_fromhost_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSamplerYcbcrConversionFeatures* toTransform);
+
+void transform_tohost_VkSamplerYcbcrConversionImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkSamplerYcbcrConversionImageFormatProperties* toTransform);
 
-void transform_VkDescriptorUpdateTemplateEntry(
+void transform_fromhost_VkSamplerYcbcrConversionImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkSamplerYcbcrConversionImageFormatProperties* toTransform);
+
+void transform_tohost_VkDescriptorUpdateTemplateEntry(
     ResourceTracker* resourceTracker,
     VkDescriptorUpdateTemplateEntry* toTransform);
 
-void transform_VkDescriptorUpdateTemplateCreateInfo(
+void transform_fromhost_VkDescriptorUpdateTemplateEntry(
+    ResourceTracker* resourceTracker,
+    VkDescriptorUpdateTemplateEntry* toTransform);
+
+void transform_tohost_VkDescriptorUpdateTemplateCreateInfo(
     ResourceTracker* resourceTracker,
     VkDescriptorUpdateTemplateCreateInfo* toTransform);
 
-void transform_VkExternalMemoryProperties(
+void transform_fromhost_VkDescriptorUpdateTemplateCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkDescriptorUpdateTemplateCreateInfo* toTransform);
+
+void transform_tohost_VkExternalMemoryProperties(
     ResourceTracker* resourceTracker,
     VkExternalMemoryProperties* toTransform);
 
-void transform_VkPhysicalDeviceExternalImageFormatInfo(
+void transform_fromhost_VkExternalMemoryProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceExternalImageFormatInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalImageFormatInfo* toTransform);
 
-void transform_VkExternalImageFormatProperties(
+void transform_fromhost_VkPhysicalDeviceExternalImageFormatInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalImageFormatInfo* toTransform);
+
+void transform_tohost_VkExternalImageFormatProperties(
     ResourceTracker* resourceTracker,
     VkExternalImageFormatProperties* toTransform);
 
-void transform_VkPhysicalDeviceExternalBufferInfo(
+void transform_fromhost_VkExternalImageFormatProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalImageFormatProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceExternalBufferInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalBufferInfo* toTransform);
 
-void transform_VkExternalBufferProperties(
+void transform_fromhost_VkPhysicalDeviceExternalBufferInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalBufferInfo* toTransform);
+
+void transform_tohost_VkExternalBufferProperties(
     ResourceTracker* resourceTracker,
     VkExternalBufferProperties* toTransform);
 
-void transform_VkPhysicalDeviceIDProperties(
+void transform_fromhost_VkExternalBufferProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalBufferProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceIDProperties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceIDProperties* toTransform);
 
-void transform_VkExternalMemoryImageCreateInfo(
+void transform_fromhost_VkPhysicalDeviceIDProperties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceIDProperties* toTransform);
+
+void transform_tohost_VkExternalMemoryImageCreateInfo(
     ResourceTracker* resourceTracker,
     VkExternalMemoryImageCreateInfo* toTransform);
 
-void transform_VkExternalMemoryBufferCreateInfo(
+void transform_fromhost_VkExternalMemoryImageCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryImageCreateInfo* toTransform);
+
+void transform_tohost_VkExternalMemoryBufferCreateInfo(
     ResourceTracker* resourceTracker,
     VkExternalMemoryBufferCreateInfo* toTransform);
 
-void transform_VkExportMemoryAllocateInfo(
+void transform_fromhost_VkExternalMemoryBufferCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryBufferCreateInfo* toTransform);
+
+void transform_tohost_VkExportMemoryAllocateInfo(
     ResourceTracker* resourceTracker,
     VkExportMemoryAllocateInfo* toTransform);
 
-void transform_VkPhysicalDeviceExternalFenceInfo(
+void transform_fromhost_VkExportMemoryAllocateInfo(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryAllocateInfo* toTransform);
+
+void transform_tohost_VkPhysicalDeviceExternalFenceInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalFenceInfo* toTransform);
 
-void transform_VkExternalFenceProperties(
+void transform_fromhost_VkPhysicalDeviceExternalFenceInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalFenceInfo* toTransform);
+
+void transform_tohost_VkExternalFenceProperties(
     ResourceTracker* resourceTracker,
     VkExternalFenceProperties* toTransform);
 
-void transform_VkExportFenceCreateInfo(
+void transform_fromhost_VkExternalFenceProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalFenceProperties* toTransform);
+
+void transform_tohost_VkExportFenceCreateInfo(
     ResourceTracker* resourceTracker,
     VkExportFenceCreateInfo* toTransform);
 
-void transform_VkExportSemaphoreCreateInfo(
+void transform_fromhost_VkExportFenceCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExportFenceCreateInfo* toTransform);
+
+void transform_tohost_VkExportSemaphoreCreateInfo(
     ResourceTracker* resourceTracker,
     VkExportSemaphoreCreateInfo* toTransform);
 
-void transform_VkPhysicalDeviceExternalSemaphoreInfo(
+void transform_fromhost_VkExportSemaphoreCreateInfo(
+    ResourceTracker* resourceTracker,
+    VkExportSemaphoreCreateInfo* toTransform);
+
+void transform_tohost_VkPhysicalDeviceExternalSemaphoreInfo(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalSemaphoreInfo* toTransform);
 
-void transform_VkExternalSemaphoreProperties(
+void transform_fromhost_VkPhysicalDeviceExternalSemaphoreInfo(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalSemaphoreInfo* toTransform);
+
+void transform_tohost_VkExternalSemaphoreProperties(
     ResourceTracker* resourceTracker,
     VkExternalSemaphoreProperties* toTransform);
 
-void transform_VkPhysicalDeviceMaintenance3Properties(
+void transform_fromhost_VkExternalSemaphoreProperties(
+    ResourceTracker* resourceTracker,
+    VkExternalSemaphoreProperties* toTransform);
+
+void transform_tohost_VkPhysicalDeviceMaintenance3Properties(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMaintenance3Properties* toTransform);
 
-void transform_VkDescriptorSetLayoutSupport(
+void transform_fromhost_VkPhysicalDeviceMaintenance3Properties(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMaintenance3Properties* toTransform);
+
+void transform_tohost_VkDescriptorSetLayoutSupport(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutSupport* toTransform);
 
-void transform_VkPhysicalDeviceShaderDrawParameterFeatures(
+void transform_fromhost_VkDescriptorSetLayoutSupport(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutSupport* toTransform);
+
+void transform_tohost_VkPhysicalDeviceShaderDrawParameterFeatures(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceShaderDrawParameterFeatures* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceShaderDrawParameterFeatures(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceShaderDrawParameterFeatures* toTransform);
 
 #endif
 #ifdef VK_KHR_surface
-void transform_VkSurfaceCapabilitiesKHR(
+void transform_tohost_VkSurfaceCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkSurfaceCapabilitiesKHR* toTransform);
 
-void transform_VkSurfaceFormatKHR(
+void transform_fromhost_VkSurfaceCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceCapabilitiesKHR* toTransform);
+
+void transform_tohost_VkSurfaceFormatKHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceFormatKHR* toTransform);
+
+void transform_fromhost_VkSurfaceFormatKHR(
     ResourceTracker* resourceTracker,
     VkSurfaceFormatKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_swapchain
-void transform_VkSwapchainCreateInfoKHR(
+void transform_tohost_VkSwapchainCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkSwapchainCreateInfoKHR* toTransform);
 
-void transform_VkPresentInfoKHR(
+void transform_fromhost_VkSwapchainCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSwapchainCreateInfoKHR* toTransform);
+
+void transform_tohost_VkPresentInfoKHR(
     ResourceTracker* resourceTracker,
     VkPresentInfoKHR* toTransform);
 
-void transform_VkImageSwapchainCreateInfoKHR(
+void transform_fromhost_VkPresentInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkPresentInfoKHR* toTransform);
+
+void transform_tohost_VkImageSwapchainCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkImageSwapchainCreateInfoKHR* toTransform);
 
-void transform_VkBindImageMemorySwapchainInfoKHR(
+void transform_fromhost_VkImageSwapchainCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImageSwapchainCreateInfoKHR* toTransform);
+
+void transform_tohost_VkBindImageMemorySwapchainInfoKHR(
     ResourceTracker* resourceTracker,
     VkBindImageMemorySwapchainInfoKHR* toTransform);
 
-void transform_VkAcquireNextImageInfoKHR(
+void transform_fromhost_VkBindImageMemorySwapchainInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkBindImageMemorySwapchainInfoKHR* toTransform);
+
+void transform_tohost_VkAcquireNextImageInfoKHR(
     ResourceTracker* resourceTracker,
     VkAcquireNextImageInfoKHR* toTransform);
 
-void transform_VkDeviceGroupPresentCapabilitiesKHR(
+void transform_fromhost_VkAcquireNextImageInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkAcquireNextImageInfoKHR* toTransform);
+
+void transform_tohost_VkDeviceGroupPresentCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkDeviceGroupPresentCapabilitiesKHR* toTransform);
 
-void transform_VkDeviceGroupPresentInfoKHR(
+void transform_fromhost_VkDeviceGroupPresentCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupPresentCapabilitiesKHR* toTransform);
+
+void transform_tohost_VkDeviceGroupPresentInfoKHR(
     ResourceTracker* resourceTracker,
     VkDeviceGroupPresentInfoKHR* toTransform);
 
-void transform_VkDeviceGroupSwapchainCreateInfoKHR(
+void transform_fromhost_VkDeviceGroupPresentInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupPresentInfoKHR* toTransform);
+
+void transform_tohost_VkDeviceGroupSwapchainCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDeviceGroupSwapchainCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkDeviceGroupSwapchainCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkDeviceGroupSwapchainCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_display
-void transform_VkDisplayPropertiesKHR(
+void transform_tohost_VkDisplayPropertiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPropertiesKHR* toTransform);
 
-void transform_VkDisplayModeParametersKHR(
+void transform_fromhost_VkDisplayPropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPropertiesKHR* toTransform);
+
+void transform_tohost_VkDisplayModeParametersKHR(
     ResourceTracker* resourceTracker,
     VkDisplayModeParametersKHR* toTransform);
 
-void transform_VkDisplayModePropertiesKHR(
+void transform_fromhost_VkDisplayModeParametersKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModeParametersKHR* toTransform);
+
+void transform_tohost_VkDisplayModePropertiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayModePropertiesKHR* toTransform);
 
-void transform_VkDisplayModeCreateInfoKHR(
+void transform_fromhost_VkDisplayModePropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModePropertiesKHR* toTransform);
+
+void transform_tohost_VkDisplayModeCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkDisplayModeCreateInfoKHR* toTransform);
 
-void transform_VkDisplayPlaneCapabilitiesKHR(
+void transform_fromhost_VkDisplayModeCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModeCreateInfoKHR* toTransform);
+
+void transform_tohost_VkDisplayPlaneCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneCapabilitiesKHR* toTransform);
 
-void transform_VkDisplayPlanePropertiesKHR(
+void transform_fromhost_VkDisplayPlaneCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneCapabilitiesKHR* toTransform);
+
+void transform_tohost_VkDisplayPlanePropertiesKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlanePropertiesKHR* toTransform);
 
-void transform_VkDisplaySurfaceCreateInfoKHR(
+void transform_fromhost_VkDisplayPlanePropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlanePropertiesKHR* toTransform);
+
+void transform_tohost_VkDisplaySurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplaySurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkDisplaySurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkDisplaySurfaceCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_display_swapchain
-void transform_VkDisplayPresentInfoKHR(
+void transform_tohost_VkDisplayPresentInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPresentInfoKHR* toTransform);
+
+void transform_fromhost_VkDisplayPresentInfoKHR(
     ResourceTracker* resourceTracker,
     VkDisplayPresentInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_xlib_surface
-void transform_VkXlibSurfaceCreateInfoKHR(
+void transform_tohost_VkXlibSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkXlibSurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkXlibSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkXlibSurfaceCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_xcb_surface
-void transform_VkXcbSurfaceCreateInfoKHR(
+void transform_tohost_VkXcbSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkXcbSurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkXcbSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkXcbSurfaceCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_wayland_surface
-void transform_VkWaylandSurfaceCreateInfoKHR(
+void transform_tohost_VkWaylandSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkWaylandSurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkWaylandSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkWaylandSurfaceCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_mir_surface
-void transform_VkMirSurfaceCreateInfoKHR(
+void transform_tohost_VkMirSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkMirSurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkMirSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkMirSurfaceCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_android_surface
-void transform_VkAndroidSurfaceCreateInfoKHR(
+void transform_tohost_VkAndroidSurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkAndroidSurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkAndroidSurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkAndroidSurfaceCreateInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_win32_surface
-void transform_VkWin32SurfaceCreateInfoKHR(
+void transform_tohost_VkWin32SurfaceCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkWin32SurfaceCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkWin32SurfaceCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkWin32SurfaceCreateInfoKHR* toTransform);
 
@@ -881,39 +1686,71 @@
 #ifdef VK_KHR_external_memory
 #endif
 #ifdef VK_KHR_external_memory_win32
-void transform_VkImportMemoryWin32HandleInfoKHR(
+void transform_tohost_VkImportMemoryWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportMemoryWin32HandleInfoKHR* toTransform);
 
-void transform_VkExportMemoryWin32HandleInfoKHR(
+void transform_fromhost_VkImportMemoryWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryWin32HandleInfoKHR* toTransform);
+
+void transform_tohost_VkExportMemoryWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkExportMemoryWin32HandleInfoKHR* toTransform);
 
-void transform_VkMemoryWin32HandlePropertiesKHR(
+void transform_fromhost_VkExportMemoryWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryWin32HandleInfoKHR* toTransform);
+
+void transform_tohost_VkMemoryWin32HandlePropertiesKHR(
     ResourceTracker* resourceTracker,
     VkMemoryWin32HandlePropertiesKHR* toTransform);
 
-void transform_VkMemoryGetWin32HandleInfoKHR(
+void transform_fromhost_VkMemoryWin32HandlePropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryWin32HandlePropertiesKHR* toTransform);
+
+void transform_tohost_VkMemoryGetWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryGetWin32HandleInfoKHR* toTransform);
+
+void transform_fromhost_VkMemoryGetWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkMemoryGetWin32HandleInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_external_memory_fd
-void transform_VkImportMemoryFdInfoKHR(
+void transform_tohost_VkImportMemoryFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportMemoryFdInfoKHR* toTransform);
 
-void transform_VkMemoryFdPropertiesKHR(
+void transform_fromhost_VkImportMemoryFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryFdInfoKHR* toTransform);
+
+void transform_tohost_VkMemoryFdPropertiesKHR(
     ResourceTracker* resourceTracker,
     VkMemoryFdPropertiesKHR* toTransform);
 
-void transform_VkMemoryGetFdInfoKHR(
+void transform_fromhost_VkMemoryFdPropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryFdPropertiesKHR* toTransform);
+
+void transform_tohost_VkMemoryGetFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkMemoryGetFdInfoKHR* toTransform);
+
+void transform_fromhost_VkMemoryGetFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkMemoryGetFdInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_win32_keyed_mutex
-void transform_VkWin32KeyedMutexAcquireReleaseInfoKHR(
+void transform_tohost_VkWin32KeyedMutexAcquireReleaseInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkWin32KeyedMutexAcquireReleaseInfoKHR* toTransform);
+
+void transform_fromhost_VkWin32KeyedMutexAcquireReleaseInfoKHR(
     ResourceTracker* resourceTracker,
     VkWin32KeyedMutexAcquireReleaseInfoKHR* toTransform);
 
@@ -923,35 +1760,63 @@
 #ifdef VK_KHR_external_semaphore
 #endif
 #ifdef VK_KHR_external_semaphore_win32
-void transform_VkImportSemaphoreWin32HandleInfoKHR(
+void transform_tohost_VkImportSemaphoreWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportSemaphoreWin32HandleInfoKHR* toTransform);
 
-void transform_VkExportSemaphoreWin32HandleInfoKHR(
+void transform_fromhost_VkImportSemaphoreWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportSemaphoreWin32HandleInfoKHR* toTransform);
+
+void transform_tohost_VkExportSemaphoreWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkExportSemaphoreWin32HandleInfoKHR* toTransform);
 
-void transform_VkD3D12FenceSubmitInfoKHR(
+void transform_fromhost_VkExportSemaphoreWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkExportSemaphoreWin32HandleInfoKHR* toTransform);
+
+void transform_tohost_VkD3D12FenceSubmitInfoKHR(
     ResourceTracker* resourceTracker,
     VkD3D12FenceSubmitInfoKHR* toTransform);
 
-void transform_VkSemaphoreGetWin32HandleInfoKHR(
+void transform_fromhost_VkD3D12FenceSubmitInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkD3D12FenceSubmitInfoKHR* toTransform);
+
+void transform_tohost_VkSemaphoreGetWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSemaphoreGetWin32HandleInfoKHR* toTransform);
+
+void transform_fromhost_VkSemaphoreGetWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkSemaphoreGetWin32HandleInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_external_semaphore_fd
-void transform_VkImportSemaphoreFdInfoKHR(
+void transform_tohost_VkImportSemaphoreFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportSemaphoreFdInfoKHR* toTransform);
 
-void transform_VkSemaphoreGetFdInfoKHR(
+void transform_fromhost_VkImportSemaphoreFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportSemaphoreFdInfoKHR* toTransform);
+
+void transform_tohost_VkSemaphoreGetFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSemaphoreGetFdInfoKHR* toTransform);
+
+void transform_fromhost_VkSemaphoreGetFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkSemaphoreGetFdInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_push_descriptor
-void transform_VkPhysicalDevicePushDescriptorPropertiesKHR(
+void transform_tohost_VkPhysicalDevicePushDescriptorPropertiesKHR(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevicePushDescriptorPropertiesKHR* toTransform);
+
+void transform_fromhost_VkPhysicalDevicePushDescriptorPropertiesKHR(
     ResourceTracker* resourceTracker,
     VkPhysicalDevicePushDescriptorPropertiesKHR* toTransform);
 
@@ -959,15 +1824,27 @@
 #ifdef VK_KHR_16bit_storage
 #endif
 #ifdef VK_KHR_incremental_present
-void transform_VkRectLayerKHR(
+void transform_tohost_VkRectLayerKHR(
     ResourceTracker* resourceTracker,
     VkRectLayerKHR* toTransform);
 
-void transform_VkPresentRegionKHR(
+void transform_fromhost_VkRectLayerKHR(
+    ResourceTracker* resourceTracker,
+    VkRectLayerKHR* toTransform);
+
+void transform_tohost_VkPresentRegionKHR(
     ResourceTracker* resourceTracker,
     VkPresentRegionKHR* toTransform);
 
-void transform_VkPresentRegionsKHR(
+void transform_fromhost_VkPresentRegionKHR(
+    ResourceTracker* resourceTracker,
+    VkPresentRegionKHR* toTransform);
+
+void transform_tohost_VkPresentRegionsKHR(
+    ResourceTracker* resourceTracker,
+    VkPresentRegionsKHR* toTransform);
+
+void transform_fromhost_VkPresentRegionsKHR(
     ResourceTracker* resourceTracker,
     VkPresentRegionsKHR* toTransform);
 
@@ -975,37 +1852,69 @@
 #ifdef VK_KHR_descriptor_update_template
 #endif
 #ifdef VK_KHR_create_renderpass2
-void transform_VkAttachmentDescription2KHR(
+void transform_tohost_VkAttachmentDescription2KHR(
     ResourceTracker* resourceTracker,
     VkAttachmentDescription2KHR* toTransform);
 
-void transform_VkAttachmentReference2KHR(
+void transform_fromhost_VkAttachmentDescription2KHR(
+    ResourceTracker* resourceTracker,
+    VkAttachmentDescription2KHR* toTransform);
+
+void transform_tohost_VkAttachmentReference2KHR(
     ResourceTracker* resourceTracker,
     VkAttachmentReference2KHR* toTransform);
 
-void transform_VkSubpassDescription2KHR(
+void transform_fromhost_VkAttachmentReference2KHR(
+    ResourceTracker* resourceTracker,
+    VkAttachmentReference2KHR* toTransform);
+
+void transform_tohost_VkSubpassDescription2KHR(
     ResourceTracker* resourceTracker,
     VkSubpassDescription2KHR* toTransform);
 
-void transform_VkSubpassDependency2KHR(
+void transform_fromhost_VkSubpassDescription2KHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassDescription2KHR* toTransform);
+
+void transform_tohost_VkSubpassDependency2KHR(
     ResourceTracker* resourceTracker,
     VkSubpassDependency2KHR* toTransform);
 
-void transform_VkRenderPassCreateInfo2KHR(
+void transform_fromhost_VkSubpassDependency2KHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassDependency2KHR* toTransform);
+
+void transform_tohost_VkRenderPassCreateInfo2KHR(
     ResourceTracker* resourceTracker,
     VkRenderPassCreateInfo2KHR* toTransform);
 
-void transform_VkSubpassBeginInfoKHR(
+void transform_fromhost_VkRenderPassCreateInfo2KHR(
+    ResourceTracker* resourceTracker,
+    VkRenderPassCreateInfo2KHR* toTransform);
+
+void transform_tohost_VkSubpassBeginInfoKHR(
     ResourceTracker* resourceTracker,
     VkSubpassBeginInfoKHR* toTransform);
 
-void transform_VkSubpassEndInfoKHR(
+void transform_fromhost_VkSubpassBeginInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassBeginInfoKHR* toTransform);
+
+void transform_tohost_VkSubpassEndInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkSubpassEndInfoKHR* toTransform);
+
+void transform_fromhost_VkSubpassEndInfoKHR(
     ResourceTracker* resourceTracker,
     VkSubpassEndInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_shared_presentable_image
-void transform_VkSharedPresentSurfaceCapabilitiesKHR(
+void transform_tohost_VkSharedPresentSurfaceCapabilitiesKHR(
+    ResourceTracker* resourceTracker,
+    VkSharedPresentSurfaceCapabilitiesKHR* toTransform);
+
+void transform_fromhost_VkSharedPresentSurfaceCapabilitiesKHR(
     ResourceTracker* resourceTracker,
     VkSharedPresentSurfaceCapabilitiesKHR* toTransform);
 
@@ -1015,25 +1924,45 @@
 #ifdef VK_KHR_external_fence
 #endif
 #ifdef VK_KHR_external_fence_win32
-void transform_VkImportFenceWin32HandleInfoKHR(
+void transform_tohost_VkImportFenceWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportFenceWin32HandleInfoKHR* toTransform);
 
-void transform_VkExportFenceWin32HandleInfoKHR(
+void transform_fromhost_VkImportFenceWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportFenceWin32HandleInfoKHR* toTransform);
+
+void transform_tohost_VkExportFenceWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkExportFenceWin32HandleInfoKHR* toTransform);
 
-void transform_VkFenceGetWin32HandleInfoKHR(
+void transform_fromhost_VkExportFenceWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkExportFenceWin32HandleInfoKHR* toTransform);
+
+void transform_tohost_VkFenceGetWin32HandleInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkFenceGetWin32HandleInfoKHR* toTransform);
+
+void transform_fromhost_VkFenceGetWin32HandleInfoKHR(
     ResourceTracker* resourceTracker,
     VkFenceGetWin32HandleInfoKHR* toTransform);
 
 #endif
 #ifdef VK_KHR_external_fence_fd
-void transform_VkImportFenceFdInfoKHR(
+void transform_tohost_VkImportFenceFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkImportFenceFdInfoKHR* toTransform);
 
-void transform_VkFenceGetFdInfoKHR(
+void transform_fromhost_VkImportFenceFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImportFenceFdInfoKHR* toTransform);
+
+void transform_tohost_VkFenceGetFdInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkFenceGetFdInfoKHR* toTransform);
+
+void transform_fromhost_VkFenceGetFdInfoKHR(
     ResourceTracker* resourceTracker,
     VkFenceGetFdInfoKHR* toTransform);
 
@@ -1041,15 +1970,27 @@
 #ifdef VK_KHR_maintenance2
 #endif
 #ifdef VK_KHR_get_surface_capabilities2
-void transform_VkPhysicalDeviceSurfaceInfo2KHR(
+void transform_tohost_VkPhysicalDeviceSurfaceInfo2KHR(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSurfaceInfo2KHR* toTransform);
 
-void transform_VkSurfaceCapabilities2KHR(
+void transform_fromhost_VkPhysicalDeviceSurfaceInfo2KHR(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSurfaceInfo2KHR* toTransform);
+
+void transform_tohost_VkSurfaceCapabilities2KHR(
     ResourceTracker* resourceTracker,
     VkSurfaceCapabilities2KHR* toTransform);
 
-void transform_VkSurfaceFormat2KHR(
+void transform_fromhost_VkSurfaceCapabilities2KHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceCapabilities2KHR* toTransform);
+
+void transform_tohost_VkSurfaceFormat2KHR(
+    ResourceTracker* resourceTracker,
+    VkSurfaceFormat2KHR* toTransform);
+
+void transform_fromhost_VkSurfaceFormat2KHR(
     ResourceTracker* resourceTracker,
     VkSurfaceFormat2KHR* toTransform);
 
@@ -1057,23 +1998,43 @@
 #ifdef VK_KHR_variable_pointers
 #endif
 #ifdef VK_KHR_get_display_properties2
-void transform_VkDisplayProperties2KHR(
+void transform_tohost_VkDisplayProperties2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayProperties2KHR* toTransform);
 
-void transform_VkDisplayPlaneProperties2KHR(
+void transform_fromhost_VkDisplayProperties2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayProperties2KHR* toTransform);
+
+void transform_tohost_VkDisplayPlaneProperties2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneProperties2KHR* toTransform);
 
-void transform_VkDisplayModeProperties2KHR(
+void transform_fromhost_VkDisplayPlaneProperties2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneProperties2KHR* toTransform);
+
+void transform_tohost_VkDisplayModeProperties2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayModeProperties2KHR* toTransform);
 
-void transform_VkDisplayPlaneInfo2KHR(
+void transform_fromhost_VkDisplayModeProperties2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayModeProperties2KHR* toTransform);
+
+void transform_tohost_VkDisplayPlaneInfo2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneInfo2KHR* toTransform);
 
-void transform_VkDisplayPlaneCapabilities2KHR(
+void transform_fromhost_VkDisplayPlaneInfo2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneInfo2KHR* toTransform);
+
+void transform_tohost_VkDisplayPlaneCapabilities2KHR(
+    ResourceTracker* resourceTracker,
+    VkDisplayPlaneCapabilities2KHR* toTransform);
+
+void transform_fromhost_VkDisplayPlaneCapabilities2KHR(
     ResourceTracker* resourceTracker,
     VkDisplayPlaneCapabilities2KHR* toTransform);
 
@@ -1087,7 +2048,11 @@
 #ifdef VK_KHR_get_memory_requirements2
 #endif
 #ifdef VK_KHR_image_format_list
-void transform_VkImageFormatListCreateInfoKHR(
+void transform_tohost_VkImageFormatListCreateInfoKHR(
+    ResourceTracker* resourceTracker,
+    VkImageFormatListCreateInfoKHR* toTransform);
+
+void transform_fromhost_VkImageFormatListCreateInfoKHR(
     ResourceTracker* resourceTracker,
     VkImageFormatListCreateInfoKHR* toTransform);
 
@@ -1101,19 +2066,31 @@
 #ifdef VK_KHR_draw_indirect_count
 #endif
 #ifdef VK_KHR_8bit_storage
-void transform_VkPhysicalDevice8BitStorageFeaturesKHR(
+void transform_tohost_VkPhysicalDevice8BitStorageFeaturesKHR(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDevice8BitStorageFeaturesKHR* toTransform);
+
+void transform_fromhost_VkPhysicalDevice8BitStorageFeaturesKHR(
     ResourceTracker* resourceTracker,
     VkPhysicalDevice8BitStorageFeaturesKHR* toTransform);
 
 #endif
 #ifdef VK_ANDROID_native_buffer
-void transform_VkNativeBufferANDROID(
+void transform_tohost_VkNativeBufferANDROID(
+    ResourceTracker* resourceTracker,
+    VkNativeBufferANDROID* toTransform);
+
+void transform_fromhost_VkNativeBufferANDROID(
     ResourceTracker* resourceTracker,
     VkNativeBufferANDROID* toTransform);
 
 #endif
 #ifdef VK_EXT_debug_report
-void transform_VkDebugReportCallbackCreateInfoEXT(
+void transform_tohost_VkDebugReportCallbackCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugReportCallbackCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkDebugReportCallbackCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugReportCallbackCreateInfoEXT* toTransform);
 
@@ -1125,7 +2102,11 @@
 #ifdef VK_IMG_filter_cubic
 #endif
 #ifdef VK_AMD_rasterization_order
-void transform_VkPipelineRasterizationStateRasterizationOrderAMD(
+void transform_tohost_VkPipelineRasterizationStateRasterizationOrderAMD(
+    ResourceTracker* resourceTracker,
+    VkPipelineRasterizationStateRasterizationOrderAMD* toTransform);
+
+void transform_fromhost_VkPipelineRasterizationStateRasterizationOrderAMD(
     ResourceTracker* resourceTracker,
     VkPipelineRasterizationStateRasterizationOrderAMD* toTransform);
 
@@ -1135,15 +2116,27 @@
 #ifdef VK_AMD_shader_explicit_vertex_parameter
 #endif
 #ifdef VK_EXT_debug_marker
-void transform_VkDebugMarkerObjectNameInfoEXT(
+void transform_tohost_VkDebugMarkerObjectNameInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugMarkerObjectNameInfoEXT* toTransform);
 
-void transform_VkDebugMarkerObjectTagInfoEXT(
+void transform_fromhost_VkDebugMarkerObjectNameInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugMarkerObjectNameInfoEXT* toTransform);
+
+void transform_tohost_VkDebugMarkerObjectTagInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugMarkerObjectTagInfoEXT* toTransform);
 
-void transform_VkDebugMarkerMarkerInfoEXT(
+void transform_fromhost_VkDebugMarkerObjectTagInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugMarkerObjectTagInfoEXT* toTransform);
+
+void transform_tohost_VkDebugMarkerMarkerInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugMarkerMarkerInfoEXT* toTransform);
+
+void transform_fromhost_VkDebugMarkerMarkerInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugMarkerMarkerInfoEXT* toTransform);
 
@@ -1151,15 +2144,27 @@
 #ifdef VK_AMD_gcn_shader
 #endif
 #ifdef VK_NV_dedicated_allocation
-void transform_VkDedicatedAllocationImageCreateInfoNV(
+void transform_tohost_VkDedicatedAllocationImageCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkDedicatedAllocationImageCreateInfoNV* toTransform);
 
-void transform_VkDedicatedAllocationBufferCreateInfoNV(
+void transform_fromhost_VkDedicatedAllocationImageCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkDedicatedAllocationImageCreateInfoNV* toTransform);
+
+void transform_tohost_VkDedicatedAllocationBufferCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkDedicatedAllocationBufferCreateInfoNV* toTransform);
 
-void transform_VkDedicatedAllocationMemoryAllocateInfoNV(
+void transform_fromhost_VkDedicatedAllocationBufferCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkDedicatedAllocationBufferCreateInfoNV* toTransform);
+
+void transform_tohost_VkDedicatedAllocationMemoryAllocateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkDedicatedAllocationMemoryAllocateInfoNV* toTransform);
+
+void transform_fromhost_VkDedicatedAllocationMemoryAllocateInfoNV(
     ResourceTracker* resourceTracker,
     VkDedicatedAllocationMemoryAllocateInfoNV* toTransform);
 
@@ -1173,17 +2178,29 @@
 #ifdef VK_AMD_shader_ballot
 #endif
 #ifdef VK_AMD_texture_gather_bias_lod
-void transform_VkTextureLODGatherFormatPropertiesAMD(
+void transform_tohost_VkTextureLODGatherFormatPropertiesAMD(
+    ResourceTracker* resourceTracker,
+    VkTextureLODGatherFormatPropertiesAMD* toTransform);
+
+void transform_fromhost_VkTextureLODGatherFormatPropertiesAMD(
     ResourceTracker* resourceTracker,
     VkTextureLODGatherFormatPropertiesAMD* toTransform);
 
 #endif
 #ifdef VK_AMD_shader_info
-void transform_VkShaderResourceUsageAMD(
+void transform_tohost_VkShaderResourceUsageAMD(
     ResourceTracker* resourceTracker,
     VkShaderResourceUsageAMD* toTransform);
 
-void transform_VkShaderStatisticsInfoAMD(
+void transform_fromhost_VkShaderResourceUsageAMD(
+    ResourceTracker* resourceTracker,
+    VkShaderResourceUsageAMD* toTransform);
+
+void transform_tohost_VkShaderStatisticsInfoAMD(
+    ResourceTracker* resourceTracker,
+    VkShaderStatisticsInfoAMD* toTransform);
+
+void transform_fromhost_VkShaderStatisticsInfoAMD(
     ResourceTracker* resourceTracker,
     VkShaderStatisticsInfoAMD* toTransform);
 
@@ -1193,45 +2210,77 @@
 #ifdef VK_IMG_format_pvrtc
 #endif
 #ifdef VK_NV_external_memory_capabilities
-void transform_VkExternalImageFormatPropertiesNV(
+void transform_tohost_VkExternalImageFormatPropertiesNV(
+    ResourceTracker* resourceTracker,
+    VkExternalImageFormatPropertiesNV* toTransform);
+
+void transform_fromhost_VkExternalImageFormatPropertiesNV(
     ResourceTracker* resourceTracker,
     VkExternalImageFormatPropertiesNV* toTransform);
 
 #endif
 #ifdef VK_NV_external_memory
-void transform_VkExternalMemoryImageCreateInfoNV(
+void transform_tohost_VkExternalMemoryImageCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkExternalMemoryImageCreateInfoNV* toTransform);
 
-void transform_VkExportMemoryAllocateInfoNV(
+void transform_fromhost_VkExternalMemoryImageCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkExternalMemoryImageCreateInfoNV* toTransform);
+
+void transform_tohost_VkExportMemoryAllocateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryAllocateInfoNV* toTransform);
+
+void transform_fromhost_VkExportMemoryAllocateInfoNV(
     ResourceTracker* resourceTracker,
     VkExportMemoryAllocateInfoNV* toTransform);
 
 #endif
 #ifdef VK_NV_external_memory_win32
-void transform_VkImportMemoryWin32HandleInfoNV(
+void transform_tohost_VkImportMemoryWin32HandleInfoNV(
     ResourceTracker* resourceTracker,
     VkImportMemoryWin32HandleInfoNV* toTransform);
 
-void transform_VkExportMemoryWin32HandleInfoNV(
+void transform_fromhost_VkImportMemoryWin32HandleInfoNV(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryWin32HandleInfoNV* toTransform);
+
+void transform_tohost_VkExportMemoryWin32HandleInfoNV(
+    ResourceTracker* resourceTracker,
+    VkExportMemoryWin32HandleInfoNV* toTransform);
+
+void transform_fromhost_VkExportMemoryWin32HandleInfoNV(
     ResourceTracker* resourceTracker,
     VkExportMemoryWin32HandleInfoNV* toTransform);
 
 #endif
 #ifdef VK_NV_win32_keyed_mutex
-void transform_VkWin32KeyedMutexAcquireReleaseInfoNV(
+void transform_tohost_VkWin32KeyedMutexAcquireReleaseInfoNV(
+    ResourceTracker* resourceTracker,
+    VkWin32KeyedMutexAcquireReleaseInfoNV* toTransform);
+
+void transform_fromhost_VkWin32KeyedMutexAcquireReleaseInfoNV(
     ResourceTracker* resourceTracker,
     VkWin32KeyedMutexAcquireReleaseInfoNV* toTransform);
 
 #endif
 #ifdef VK_EXT_validation_flags
-void transform_VkValidationFlagsEXT(
+void transform_tohost_VkValidationFlagsEXT(
+    ResourceTracker* resourceTracker,
+    VkValidationFlagsEXT* toTransform);
+
+void transform_fromhost_VkValidationFlagsEXT(
     ResourceTracker* resourceTracker,
     VkValidationFlagsEXT* toTransform);
 
 #endif
 #ifdef VK_NN_vi_surface
-void transform_VkViSurfaceCreateInfoNN(
+void transform_tohost_VkViSurfaceCreateInfoNN(
+    ResourceTracker* resourceTracker,
+    VkViSurfaceCreateInfoNN* toTransform);
+
+void transform_fromhost_VkViSurfaceCreateInfoNN(
     ResourceTracker* resourceTracker,
     VkViSurfaceCreateInfoNN* toTransform);
 
@@ -1241,83 +2290,159 @@
 #ifdef VK_EXT_shader_subgroup_vote
 #endif
 #ifdef VK_EXT_conditional_rendering
-void transform_VkConditionalRenderingBeginInfoEXT(
+void transform_tohost_VkConditionalRenderingBeginInfoEXT(
     ResourceTracker* resourceTracker,
     VkConditionalRenderingBeginInfoEXT* toTransform);
 
-void transform_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
+void transform_fromhost_VkConditionalRenderingBeginInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkConditionalRenderingBeginInfoEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceConditionalRenderingFeaturesEXT* toTransform);
 
-void transform_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
+void transform_fromhost_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceConditionalRenderingFeaturesEXT* toTransform);
+
+void transform_tohost_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkCommandBufferInheritanceConditionalRenderingInfoEXT* toTransform);
+
+void transform_fromhost_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
     ResourceTracker* resourceTracker,
     VkCommandBufferInheritanceConditionalRenderingInfoEXT* toTransform);
 
 #endif
 #ifdef VK_NVX_device_generated_commands
-void transform_VkDeviceGeneratedCommandsFeaturesNVX(
+void transform_tohost_VkDeviceGeneratedCommandsFeaturesNVX(
     ResourceTracker* resourceTracker,
     VkDeviceGeneratedCommandsFeaturesNVX* toTransform);
 
-void transform_VkDeviceGeneratedCommandsLimitsNVX(
+void transform_fromhost_VkDeviceGeneratedCommandsFeaturesNVX(
+    ResourceTracker* resourceTracker,
+    VkDeviceGeneratedCommandsFeaturesNVX* toTransform);
+
+void transform_tohost_VkDeviceGeneratedCommandsLimitsNVX(
     ResourceTracker* resourceTracker,
     VkDeviceGeneratedCommandsLimitsNVX* toTransform);
 
-void transform_VkIndirectCommandsTokenNVX(
+void transform_fromhost_VkDeviceGeneratedCommandsLimitsNVX(
+    ResourceTracker* resourceTracker,
+    VkDeviceGeneratedCommandsLimitsNVX* toTransform);
+
+void transform_tohost_VkIndirectCommandsTokenNVX(
     ResourceTracker* resourceTracker,
     VkIndirectCommandsTokenNVX* toTransform);
 
-void transform_VkIndirectCommandsLayoutTokenNVX(
+void transform_fromhost_VkIndirectCommandsTokenNVX(
+    ResourceTracker* resourceTracker,
+    VkIndirectCommandsTokenNVX* toTransform);
+
+void transform_tohost_VkIndirectCommandsLayoutTokenNVX(
     ResourceTracker* resourceTracker,
     VkIndirectCommandsLayoutTokenNVX* toTransform);
 
-void transform_VkIndirectCommandsLayoutCreateInfoNVX(
+void transform_fromhost_VkIndirectCommandsLayoutTokenNVX(
+    ResourceTracker* resourceTracker,
+    VkIndirectCommandsLayoutTokenNVX* toTransform);
+
+void transform_tohost_VkIndirectCommandsLayoutCreateInfoNVX(
     ResourceTracker* resourceTracker,
     VkIndirectCommandsLayoutCreateInfoNVX* toTransform);
 
-void transform_VkCmdProcessCommandsInfoNVX(
+void transform_fromhost_VkIndirectCommandsLayoutCreateInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkIndirectCommandsLayoutCreateInfoNVX* toTransform);
+
+void transform_tohost_VkCmdProcessCommandsInfoNVX(
     ResourceTracker* resourceTracker,
     VkCmdProcessCommandsInfoNVX* toTransform);
 
-void transform_VkCmdReserveSpaceForCommandsInfoNVX(
+void transform_fromhost_VkCmdProcessCommandsInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkCmdProcessCommandsInfoNVX* toTransform);
+
+void transform_tohost_VkCmdReserveSpaceForCommandsInfoNVX(
     ResourceTracker* resourceTracker,
     VkCmdReserveSpaceForCommandsInfoNVX* toTransform);
 
-void transform_VkObjectTableCreateInfoNVX(
+void transform_fromhost_VkCmdReserveSpaceForCommandsInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkCmdReserveSpaceForCommandsInfoNVX* toTransform);
+
+void transform_tohost_VkObjectTableCreateInfoNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableCreateInfoNVX* toTransform);
 
-void transform_VkObjectTableEntryNVX(
+void transform_fromhost_VkObjectTableCreateInfoNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableCreateInfoNVX* toTransform);
+
+void transform_tohost_VkObjectTableEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableEntryNVX* toTransform);
 
-void transform_VkObjectTablePipelineEntryNVX(
+void transform_fromhost_VkObjectTableEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableEntryNVX* toTransform);
+
+void transform_tohost_VkObjectTablePipelineEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTablePipelineEntryNVX* toTransform);
 
-void transform_VkObjectTableDescriptorSetEntryNVX(
+void transform_fromhost_VkObjectTablePipelineEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTablePipelineEntryNVX* toTransform);
+
+void transform_tohost_VkObjectTableDescriptorSetEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableDescriptorSetEntryNVX* toTransform);
 
-void transform_VkObjectTableVertexBufferEntryNVX(
+void transform_fromhost_VkObjectTableDescriptorSetEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableDescriptorSetEntryNVX* toTransform);
+
+void transform_tohost_VkObjectTableVertexBufferEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableVertexBufferEntryNVX* toTransform);
 
-void transform_VkObjectTableIndexBufferEntryNVX(
+void transform_fromhost_VkObjectTableVertexBufferEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableVertexBufferEntryNVX* toTransform);
+
+void transform_tohost_VkObjectTableIndexBufferEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTableIndexBufferEntryNVX* toTransform);
 
-void transform_VkObjectTablePushConstantEntryNVX(
+void transform_fromhost_VkObjectTableIndexBufferEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTableIndexBufferEntryNVX* toTransform);
+
+void transform_tohost_VkObjectTablePushConstantEntryNVX(
+    ResourceTracker* resourceTracker,
+    VkObjectTablePushConstantEntryNVX* toTransform);
+
+void transform_fromhost_VkObjectTablePushConstantEntryNVX(
     ResourceTracker* resourceTracker,
     VkObjectTablePushConstantEntryNVX* toTransform);
 
 #endif
 #ifdef VK_NV_clip_space_w_scaling
-void transform_VkViewportWScalingNV(
+void transform_tohost_VkViewportWScalingNV(
     ResourceTracker* resourceTracker,
     VkViewportWScalingNV* toTransform);
 
-void transform_VkPipelineViewportWScalingStateCreateInfoNV(
+void transform_fromhost_VkViewportWScalingNV(
+    ResourceTracker* resourceTracker,
+    VkViewportWScalingNV* toTransform);
+
+void transform_tohost_VkPipelineViewportWScalingStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineViewportWScalingStateCreateInfoNV* toTransform);
+
+void transform_fromhost_VkPipelineViewportWScalingStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineViewportWScalingStateCreateInfoNV* toTransform);
 
@@ -1327,43 +2452,79 @@
 #ifdef VK_EXT_acquire_xlib_display
 #endif
 #ifdef VK_EXT_display_surface_counter
-void transform_VkSurfaceCapabilities2EXT(
+void transform_tohost_VkSurfaceCapabilities2EXT(
+    ResourceTracker* resourceTracker,
+    VkSurfaceCapabilities2EXT* toTransform);
+
+void transform_fromhost_VkSurfaceCapabilities2EXT(
     ResourceTracker* resourceTracker,
     VkSurfaceCapabilities2EXT* toTransform);
 
 #endif
 #ifdef VK_EXT_display_control
-void transform_VkDisplayPowerInfoEXT(
+void transform_tohost_VkDisplayPowerInfoEXT(
     ResourceTracker* resourceTracker,
     VkDisplayPowerInfoEXT* toTransform);
 
-void transform_VkDeviceEventInfoEXT(
+void transform_fromhost_VkDisplayPowerInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDisplayPowerInfoEXT* toTransform);
+
+void transform_tohost_VkDeviceEventInfoEXT(
     ResourceTracker* resourceTracker,
     VkDeviceEventInfoEXT* toTransform);
 
-void transform_VkDisplayEventInfoEXT(
+void transform_fromhost_VkDeviceEventInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDeviceEventInfoEXT* toTransform);
+
+void transform_tohost_VkDisplayEventInfoEXT(
     ResourceTracker* resourceTracker,
     VkDisplayEventInfoEXT* toTransform);
 
-void transform_VkSwapchainCounterCreateInfoEXT(
+void transform_fromhost_VkDisplayEventInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDisplayEventInfoEXT* toTransform);
+
+void transform_tohost_VkSwapchainCounterCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkSwapchainCounterCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkSwapchainCounterCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkSwapchainCounterCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_GOOGLE_display_timing
-void transform_VkRefreshCycleDurationGOOGLE(
+void transform_tohost_VkRefreshCycleDurationGOOGLE(
     ResourceTracker* resourceTracker,
     VkRefreshCycleDurationGOOGLE* toTransform);
 
-void transform_VkPastPresentationTimingGOOGLE(
+void transform_fromhost_VkRefreshCycleDurationGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkRefreshCycleDurationGOOGLE* toTransform);
+
+void transform_tohost_VkPastPresentationTimingGOOGLE(
     ResourceTracker* resourceTracker,
     VkPastPresentationTimingGOOGLE* toTransform);
 
-void transform_VkPresentTimeGOOGLE(
+void transform_fromhost_VkPastPresentationTimingGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkPastPresentationTimingGOOGLE* toTransform);
+
+void transform_tohost_VkPresentTimeGOOGLE(
     ResourceTracker* resourceTracker,
     VkPresentTimeGOOGLE* toTransform);
 
-void transform_VkPresentTimesInfoGOOGLE(
+void transform_fromhost_VkPresentTimeGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkPresentTimeGOOGLE* toTransform);
+
+void transform_tohost_VkPresentTimesInfoGOOGLE(
+    ResourceTracker* resourceTracker,
+    VkPresentTimesInfoGOOGLE* toTransform);
+
+void transform_fromhost_VkPresentTimesInfoGOOGLE(
     ResourceTracker* resourceTracker,
     VkPresentTimesInfoGOOGLE* toTransform);
 
@@ -1375,37 +2536,65 @@
 #ifdef VK_NV_viewport_array2
 #endif
 #ifdef VK_NVX_multiview_per_view_attributes
-void transform_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
+void transform_tohost_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* toTransform);
 
 #endif
 #ifdef VK_NV_viewport_swizzle
-void transform_VkViewportSwizzleNV(
+void transform_tohost_VkViewportSwizzleNV(
     ResourceTracker* resourceTracker,
     VkViewportSwizzleNV* toTransform);
 
-void transform_VkPipelineViewportSwizzleStateCreateInfoNV(
+void transform_fromhost_VkViewportSwizzleNV(
+    ResourceTracker* resourceTracker,
+    VkViewportSwizzleNV* toTransform);
+
+void transform_tohost_VkPipelineViewportSwizzleStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineViewportSwizzleStateCreateInfoNV* toTransform);
+
+void transform_fromhost_VkPipelineViewportSwizzleStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineViewportSwizzleStateCreateInfoNV* toTransform);
 
 #endif
 #ifdef VK_EXT_discard_rectangles
-void transform_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
+void transform_tohost_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceDiscardRectanglePropertiesEXT* toTransform);
 
-void transform_VkPipelineDiscardRectangleStateCreateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceDiscardRectanglePropertiesEXT* toTransform);
+
+void transform_tohost_VkPipelineDiscardRectangleStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineDiscardRectangleStateCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkPipelineDiscardRectangleStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineDiscardRectangleStateCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_EXT_conservative_rasterization
-void transform_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
+void transform_tohost_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* toTransform);
 
-void transform_VkPipelineRasterizationConservativeStateCreateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceConservativeRasterizationPropertiesEXT* toTransform);
+
+void transform_tohost_VkPipelineRasterizationConservativeStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineRasterizationConservativeStateCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkPipelineRasterizationConservativeStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineRasterizationConservativeStateCreateInfoEXT* toTransform);
 
@@ -1413,23 +2602,39 @@
 #ifdef VK_EXT_swapchain_colorspace
 #endif
 #ifdef VK_EXT_hdr_metadata
-void transform_VkXYColorEXT(
+void transform_tohost_VkXYColorEXT(
     ResourceTracker* resourceTracker,
     VkXYColorEXT* toTransform);
 
-void transform_VkHdrMetadataEXT(
+void transform_fromhost_VkXYColorEXT(
+    ResourceTracker* resourceTracker,
+    VkXYColorEXT* toTransform);
+
+void transform_tohost_VkHdrMetadataEXT(
+    ResourceTracker* resourceTracker,
+    VkHdrMetadataEXT* toTransform);
+
+void transform_fromhost_VkHdrMetadataEXT(
     ResourceTracker* resourceTracker,
     VkHdrMetadataEXT* toTransform);
 
 #endif
 #ifdef VK_MVK_ios_surface
-void transform_VkIOSSurfaceCreateInfoMVK(
+void transform_tohost_VkIOSSurfaceCreateInfoMVK(
+    ResourceTracker* resourceTracker,
+    VkIOSSurfaceCreateInfoMVK* toTransform);
+
+void transform_fromhost_VkIOSSurfaceCreateInfoMVK(
     ResourceTracker* resourceTracker,
     VkIOSSurfaceCreateInfoMVK* toTransform);
 
 #endif
 #ifdef VK_MVK_macos_surface
-void transform_VkMacOSSurfaceCreateInfoMVK(
+void transform_tohost_VkMacOSSurfaceCreateInfoMVK(
+    ResourceTracker* resourceTracker,
+    VkMacOSSurfaceCreateInfoMVK* toTransform);
+
+void transform_fromhost_VkMacOSSurfaceCreateInfoMVK(
     ResourceTracker* resourceTracker,
     VkMacOSSurfaceCreateInfoMVK* toTransform);
 
@@ -1439,59 +2644,111 @@
 #ifdef VK_EXT_queue_family_foreign
 #endif
 #ifdef VK_EXT_debug_utils
-void transform_VkDebugUtilsObjectNameInfoEXT(
+void transform_tohost_VkDebugUtilsObjectNameInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsObjectNameInfoEXT* toTransform);
 
-void transform_VkDebugUtilsObjectTagInfoEXT(
+void transform_fromhost_VkDebugUtilsObjectNameInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsObjectNameInfoEXT* toTransform);
+
+void transform_tohost_VkDebugUtilsObjectTagInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsObjectTagInfoEXT* toTransform);
 
-void transform_VkDebugUtilsLabelEXT(
+void transform_fromhost_VkDebugUtilsObjectTagInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsObjectTagInfoEXT* toTransform);
+
+void transform_tohost_VkDebugUtilsLabelEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsLabelEXT* toTransform);
 
-void transform_VkDebugUtilsMessengerCallbackDataEXT(
+void transform_fromhost_VkDebugUtilsLabelEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsLabelEXT* toTransform);
+
+void transform_tohost_VkDebugUtilsMessengerCallbackDataEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsMessengerCallbackDataEXT* toTransform);
 
-void transform_VkDebugUtilsMessengerCreateInfoEXT(
+void transform_fromhost_VkDebugUtilsMessengerCallbackDataEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsMessengerCallbackDataEXT* toTransform);
+
+void transform_tohost_VkDebugUtilsMessengerCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDebugUtilsMessengerCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkDebugUtilsMessengerCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDebugUtilsMessengerCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
-void transform_VkAndroidHardwareBufferUsageANDROID(
+void transform_tohost_VkAndroidHardwareBufferUsageANDROID(
     ResourceTracker* resourceTracker,
     VkAndroidHardwareBufferUsageANDROID* toTransform);
 
-void transform_VkAndroidHardwareBufferPropertiesANDROID(
+void transform_fromhost_VkAndroidHardwareBufferUsageANDROID(
+    ResourceTracker* resourceTracker,
+    VkAndroidHardwareBufferUsageANDROID* toTransform);
+
+void transform_tohost_VkAndroidHardwareBufferPropertiesANDROID(
     ResourceTracker* resourceTracker,
     VkAndroidHardwareBufferPropertiesANDROID* toTransform);
 
-void transform_VkAndroidHardwareBufferFormatPropertiesANDROID(
+void transform_fromhost_VkAndroidHardwareBufferPropertiesANDROID(
+    ResourceTracker* resourceTracker,
+    VkAndroidHardwareBufferPropertiesANDROID* toTransform);
+
+void transform_tohost_VkAndroidHardwareBufferFormatPropertiesANDROID(
     ResourceTracker* resourceTracker,
     VkAndroidHardwareBufferFormatPropertiesANDROID* toTransform);
 
-void transform_VkImportAndroidHardwareBufferInfoANDROID(
+void transform_fromhost_VkAndroidHardwareBufferFormatPropertiesANDROID(
+    ResourceTracker* resourceTracker,
+    VkAndroidHardwareBufferFormatPropertiesANDROID* toTransform);
+
+void transform_tohost_VkImportAndroidHardwareBufferInfoANDROID(
     ResourceTracker* resourceTracker,
     VkImportAndroidHardwareBufferInfoANDROID* toTransform);
 
-void transform_VkMemoryGetAndroidHardwareBufferInfoANDROID(
+void transform_fromhost_VkImportAndroidHardwareBufferInfoANDROID(
+    ResourceTracker* resourceTracker,
+    VkImportAndroidHardwareBufferInfoANDROID* toTransform);
+
+void transform_tohost_VkMemoryGetAndroidHardwareBufferInfoANDROID(
     ResourceTracker* resourceTracker,
     VkMemoryGetAndroidHardwareBufferInfoANDROID* toTransform);
 
-void transform_VkExternalFormatANDROID(
+void transform_fromhost_VkMemoryGetAndroidHardwareBufferInfoANDROID(
+    ResourceTracker* resourceTracker,
+    VkMemoryGetAndroidHardwareBufferInfoANDROID* toTransform);
+
+void transform_tohost_VkExternalFormatANDROID(
+    ResourceTracker* resourceTracker,
+    VkExternalFormatANDROID* toTransform);
+
+void transform_fromhost_VkExternalFormatANDROID(
     ResourceTracker* resourceTracker,
     VkExternalFormatANDROID* toTransform);
 
 #endif
 #ifdef VK_EXT_sampler_filter_minmax
-void transform_VkSamplerReductionModeCreateInfoEXT(
+void transform_tohost_VkSamplerReductionModeCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkSamplerReductionModeCreateInfoEXT* toTransform);
 
-void transform_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
+void transform_fromhost_VkSamplerReductionModeCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkSamplerReductionModeCreateInfoEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* toTransform);
 
@@ -1505,61 +2762,113 @@
 #ifdef VK_EXT_shader_stencil_export
 #endif
 #ifdef VK_EXT_sample_locations
-void transform_VkSampleLocationEXT(
+void transform_tohost_VkSampleLocationEXT(
     ResourceTracker* resourceTracker,
     VkSampleLocationEXT* toTransform);
 
-void transform_VkSampleLocationsInfoEXT(
+void transform_fromhost_VkSampleLocationEXT(
+    ResourceTracker* resourceTracker,
+    VkSampleLocationEXT* toTransform);
+
+void transform_tohost_VkSampleLocationsInfoEXT(
     ResourceTracker* resourceTracker,
     VkSampleLocationsInfoEXT* toTransform);
 
-void transform_VkAttachmentSampleLocationsEXT(
+void transform_fromhost_VkSampleLocationsInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkSampleLocationsInfoEXT* toTransform);
+
+void transform_tohost_VkAttachmentSampleLocationsEXT(
     ResourceTracker* resourceTracker,
     VkAttachmentSampleLocationsEXT* toTransform);
 
-void transform_VkSubpassSampleLocationsEXT(
+void transform_fromhost_VkAttachmentSampleLocationsEXT(
+    ResourceTracker* resourceTracker,
+    VkAttachmentSampleLocationsEXT* toTransform);
+
+void transform_tohost_VkSubpassSampleLocationsEXT(
     ResourceTracker* resourceTracker,
     VkSubpassSampleLocationsEXT* toTransform);
 
-void transform_VkRenderPassSampleLocationsBeginInfoEXT(
+void transform_fromhost_VkSubpassSampleLocationsEXT(
+    ResourceTracker* resourceTracker,
+    VkSubpassSampleLocationsEXT* toTransform);
+
+void transform_tohost_VkRenderPassSampleLocationsBeginInfoEXT(
     ResourceTracker* resourceTracker,
     VkRenderPassSampleLocationsBeginInfoEXT* toTransform);
 
-void transform_VkPipelineSampleLocationsStateCreateInfoEXT(
+void transform_fromhost_VkRenderPassSampleLocationsBeginInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkRenderPassSampleLocationsBeginInfoEXT* toTransform);
+
+void transform_tohost_VkPipelineSampleLocationsStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineSampleLocationsStateCreateInfoEXT* toTransform);
 
-void transform_VkPhysicalDeviceSampleLocationsPropertiesEXT(
+void transform_fromhost_VkPipelineSampleLocationsStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineSampleLocationsStateCreateInfoEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceSampleLocationsPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceSampleLocationsPropertiesEXT* toTransform);
 
-void transform_VkMultisamplePropertiesEXT(
+void transform_fromhost_VkPhysicalDeviceSampleLocationsPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceSampleLocationsPropertiesEXT* toTransform);
+
+void transform_tohost_VkMultisamplePropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkMultisamplePropertiesEXT* toTransform);
+
+void transform_fromhost_VkMultisamplePropertiesEXT(
     ResourceTracker* resourceTracker,
     VkMultisamplePropertiesEXT* toTransform);
 
 #endif
 #ifdef VK_EXT_blend_operation_advanced
-void transform_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
+void transform_tohost_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* toTransform);
 
-void transform_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
+void transform_fromhost_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* toTransform);
 
-void transform_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* toTransform);
+
+void transform_tohost_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineColorBlendAdvancedStateCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineColorBlendAdvancedStateCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_NV_fragment_coverage_to_color
-void transform_VkPipelineCoverageToColorStateCreateInfoNV(
+void transform_tohost_VkPipelineCoverageToColorStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineCoverageToColorStateCreateInfoNV* toTransform);
+
+void transform_fromhost_VkPipelineCoverageToColorStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineCoverageToColorStateCreateInfoNV* toTransform);
 
 #endif
 #ifdef VK_NV_framebuffer_mixed_samples
-void transform_VkPipelineCoverageModulationStateCreateInfoNV(
+void transform_tohost_VkPipelineCoverageModulationStateCreateInfoNV(
+    ResourceTracker* resourceTracker,
+    VkPipelineCoverageModulationStateCreateInfoNV* toTransform);
+
+void transform_fromhost_VkPipelineCoverageModulationStateCreateInfoNV(
     ResourceTracker* resourceTracker,
     VkPipelineCoverageModulationStateCreateInfoNV* toTransform);
 
@@ -1569,33 +2878,61 @@
 #ifdef VK_EXT_post_depth_coverage
 #endif
 #ifdef VK_EXT_validation_cache
-void transform_VkValidationCacheCreateInfoEXT(
+void transform_tohost_VkValidationCacheCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkValidationCacheCreateInfoEXT* toTransform);
 
-void transform_VkShaderModuleValidationCacheCreateInfoEXT(
+void transform_fromhost_VkValidationCacheCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkValidationCacheCreateInfoEXT* toTransform);
+
+void transform_tohost_VkShaderModuleValidationCacheCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkShaderModuleValidationCacheCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkShaderModuleValidationCacheCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkShaderModuleValidationCacheCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_EXT_descriptor_indexing
-void transform_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
+void transform_tohost_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* toTransform);
 
-void transform_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
+void transform_fromhost_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceDescriptorIndexingFeaturesEXT* toTransform);
 
-void transform_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
+void transform_fromhost_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceDescriptorIndexingFeaturesEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceDescriptorIndexingPropertiesEXT* toTransform);
 
-void transform_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
+void transform_fromhost_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceDescriptorIndexingPropertiesEXT* toTransform);
+
+void transform_tohost_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* toTransform);
 
-void transform_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
+void transform_fromhost_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* toTransform);
+
+void transform_tohost_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
+    ResourceTracker* resourceTracker,
+    VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* toTransform);
+
+void transform_fromhost_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
     ResourceTracker* resourceTracker,
     VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* toTransform);
 
@@ -1603,21 +2940,37 @@
 #ifdef VK_EXT_shader_viewport_index_layer
 #endif
 #ifdef VK_EXT_global_priority
-void transform_VkDeviceQueueGlobalPriorityCreateInfoEXT(
+void transform_tohost_VkDeviceQueueGlobalPriorityCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkDeviceQueueGlobalPriorityCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkDeviceQueueGlobalPriorityCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkDeviceQueueGlobalPriorityCreateInfoEXT* toTransform);
 
 #endif
 #ifdef VK_EXT_external_memory_host
-void transform_VkImportMemoryHostPointerInfoEXT(
+void transform_tohost_VkImportMemoryHostPointerInfoEXT(
     ResourceTracker* resourceTracker,
     VkImportMemoryHostPointerInfoEXT* toTransform);
 
-void transform_VkMemoryHostPointerPropertiesEXT(
+void transform_fromhost_VkImportMemoryHostPointerInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkImportMemoryHostPointerInfoEXT* toTransform);
+
+void transform_tohost_VkMemoryHostPointerPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkMemoryHostPointerPropertiesEXT* toTransform);
 
-void transform_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
+void transform_fromhost_VkMemoryHostPointerPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkMemoryHostPointerPropertiesEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceExternalMemoryHostPropertiesEXT* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* toTransform);
 
@@ -1625,21 +2978,37 @@
 #ifdef VK_AMD_buffer_marker
 #endif
 #ifdef VK_AMD_shader_core_properties
-void transform_VkPhysicalDeviceShaderCorePropertiesAMD(
+void transform_tohost_VkPhysicalDeviceShaderCorePropertiesAMD(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceShaderCorePropertiesAMD* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceShaderCorePropertiesAMD(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceShaderCorePropertiesAMD* toTransform);
 
 #endif
 #ifdef VK_EXT_vertex_attribute_divisor
-void transform_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
+void transform_tohost_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
     ResourceTracker* resourceTracker,
     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* toTransform);
 
-void transform_VkVertexInputBindingDivisorDescriptionEXT(
+void transform_fromhost_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
+    ResourceTracker* resourceTracker,
+    VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* toTransform);
+
+void transform_tohost_VkVertexInputBindingDivisorDescriptionEXT(
     ResourceTracker* resourceTracker,
     VkVertexInputBindingDivisorDescriptionEXT* toTransform);
 
-void transform_VkPipelineVertexInputDivisorStateCreateInfoEXT(
+void transform_fromhost_VkVertexInputBindingDivisorDescriptionEXT(
+    ResourceTracker* resourceTracker,
+    VkVertexInputBindingDivisorDescriptionEXT* toTransform);
+
+void transform_tohost_VkPipelineVertexInputDivisorStateCreateInfoEXT(
+    ResourceTracker* resourceTracker,
+    VkPipelineVertexInputDivisorStateCreateInfoEXT* toTransform);
+
+void transform_fromhost_VkPipelineVertexInputDivisorStateCreateInfoEXT(
     ResourceTracker* resourceTracker,
     VkPipelineVertexInputDivisorStateCreateInfoEXT* toTransform);
 
@@ -1647,11 +3016,19 @@
 #ifdef VK_NV_shader_subgroup_partitioned
 #endif
 #ifdef VK_NV_device_diagnostic_checkpoints
-void transform_VkQueueFamilyCheckpointPropertiesNV(
+void transform_tohost_VkQueueFamilyCheckpointPropertiesNV(
     ResourceTracker* resourceTracker,
     VkQueueFamilyCheckpointPropertiesNV* toTransform);
 
-void transform_VkCheckpointDataNV(
+void transform_fromhost_VkQueueFamilyCheckpointPropertiesNV(
+    ResourceTracker* resourceTracker,
+    VkQueueFamilyCheckpointPropertiesNV* toTransform);
+
+void transform_tohost_VkCheckpointDataNV(
+    ResourceTracker* resourceTracker,
+    VkCheckpointDataNV* toTransform);
+
+void transform_fromhost_VkCheckpointDataNV(
     ResourceTracker* resourceTracker,
     VkCheckpointDataNV* toTransform);
 
