gfxstream: use standard Vulkan headers and new auto-gen flow

This modifies gfxstream to use standard Vulkan headers,
and updates to 1.3.269.

Previously, the headers were mostly standard, but added in
vk_android_native_buffer into vulkan_core.h.  That breaks down
when using auto-gen scripts from outside gfxstream, which will
happen in a subsequent patchset.

For vk_native_buffer_android, we can simply provide a
vk_android_native_buffer_gfxstream.h.

Long-term, vk_native_buffer_android.h should be deprecated in
favor of VK_ANDROID_external_memory_android_hardware_buffer, in
Android's libvulkan and elsewhere.

For the Vulkan headers, the new procedure is generate them in the
directions found here in the following repos:

https://github.com/KhronosGroup/Vulkan-Headers
https://github.com/KhronosGroup/Vulkan-Hpp

Those headers can be copied over using cp.  For gfxstream encoder
+ decoders, that's still generated via ./generate-gfxstream-vulkan.sh

The only catch is you must use the same vk.xml for Vulkan-Headers,
Vulkan-Hpp, and for the cereal generator.  The recommended flow
is use whatever the xml is in Vulkan-Headers ToT and copy to
Vulkan-Hpp and cerealgenerator.py before running those scripts.

The End2End tests that relied on vk_android_native_buffer were
also modified.  Long-term, the AHB extension could be used
instead of ANB for tests.

BUG=310206667
TEST=launch_cvd --gpu_mode=gfxstream_guest_angle

Change-Id: Ib43d8555cf37a9e9a7189ec7597f78f12cd53b5d
diff --git a/host/vulkan/VkDecoder.cpp b/host/vulkan/VkDecoder.cpp
index a41c2e7..d052848 100644
--- a/host/vulkan/VkDecoder.cpp
+++ b/host/vulkan/VkDecoder.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module VkDecoder
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -17365,6 +17365,245 @@
                 break;
             }
 #endif
+#ifdef VK_KHR_maintenance5
+            case OP_vkCmdBindIndexBuffer2KHR: {
+                android::base::beginTrace("vkCmdBindIndexBuffer2KHR decode");
+                VkCommandBuffer commandBuffer;
+                VkBuffer buffer;
+                VkDeviceSize offset;
+                VkDeviceSize size;
+                VkIndexType indexType;
+                // Begin non wrapped dispatchable handle unboxing for commandBuffer;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkCommandBuffer*)&commandBuffer =
+                    (VkCommandBuffer)(VkCommandBuffer)((VkCommandBuffer)(*&cgen_var_0));
+                auto unboxed_commandBuffer = unbox_VkCommandBuffer(commandBuffer);
+                auto vk = dispatch_VkCommandBuffer(commandBuffer);
+                // End manual dispatchable handle unboxing for commandBuffer;
+                uint64_t cgen_var_1;
+                memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_1));
+                memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
+                *readStreamPtrPtr += sizeof(VkDeviceSize);
+                memcpy((VkDeviceSize*)&size, *readStreamPtrPtr, sizeof(VkDeviceSize));
+                *readStreamPtrPtr += sizeof(VkDeviceSize);
+                memcpy((VkIndexType*)&indexType, *readStreamPtrPtr, sizeof(VkIndexType));
+                *readStreamPtrPtr += sizeof(VkIndexType);
+                if (m_logCalls) {
+                    fprintf(stderr,
+                            "stream %p: call vkCmdBindIndexBuffer2KHR 0x%llx 0x%llx 0x%llx 0x%llx "
+                            "0x%llx \n",
+                            ioStream, (unsigned long long)commandBuffer, (unsigned long long)buffer,
+                            (unsigned long long)offset, (unsigned long long)size,
+                            (unsigned long long)indexType);
+                }
+                vk->vkCmdBindIndexBuffer2KHR(unboxed_commandBuffer, buffer, offset, size,
+                                             indexType);
+                vkStream->unsetHandleMapping();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkCmdBindIndexBuffer2KHR(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool, commandBuffer, buffer,
+                        offset, size, indexType);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkGetRenderingAreaGranularityKHR: {
+                android::base::beginTrace("vkGetRenderingAreaGranularityKHR decode");
+                VkDevice device;
+                const VkRenderingAreaInfoKHR* pRenderingAreaInfo;
+                VkExtent2D* pGranularity;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                vkReadStream->alloc((void**)&pRenderingAreaInfo,
+                                    sizeof(const VkRenderingAreaInfoKHR));
+                reservedunmarshal_VkRenderingAreaInfoKHR(
+                    vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                    (VkRenderingAreaInfoKHR*)(pRenderingAreaInfo), readStreamPtrPtr);
+                // Begin manual dispatchable handle unboxing for pGranularity;
+                vkReadStream->unsetHandleMapping();
+                vkReadStream->alloc((void**)&pGranularity, sizeof(VkExtent2D));
+                reservedunmarshal_VkExtent2D(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                             (VkExtent2D*)(pGranularity), readStreamPtrPtr);
+                if (pRenderingAreaInfo) {
+                    transform_tohost_VkRenderingAreaInfoKHR(
+                        m_state, (VkRenderingAreaInfoKHR*)(pRenderingAreaInfo));
+                }
+                if (pGranularity) {
+                    transform_tohost_VkExtent2D(m_state, (VkExtent2D*)(pGranularity));
+                }
+                if (m_logCalls) {
+                    fprintf(
+                        stderr,
+                        "stream %p: call vkGetRenderingAreaGranularityKHR 0x%llx 0x%llx 0x%llx \n",
+                        ioStream, (unsigned long long)device,
+                        (unsigned long long)pRenderingAreaInfo, (unsigned long long)pGranularity);
+                }
+                vk->vkGetRenderingAreaGranularityKHR(unboxed_device, pRenderingAreaInfo,
+                                                     pGranularity);
+                vkStream->unsetHandleMapping();
+                if (pGranularity) {
+                    transform_fromhost_VkExtent2D(m_state, (VkExtent2D*)(pGranularity));
+                }
+                marshal_VkExtent2D(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                   (VkExtent2D*)(pGranularity));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkGetRenderingAreaGranularityKHR(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pRenderingAreaInfo,
+                        pGranularity);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkGetDeviceImageSubresourceLayoutKHR: {
+                android::base::beginTrace("vkGetDeviceImageSubresourceLayoutKHR decode");
+                VkDevice device;
+                const VkDeviceImageSubresourceInfoKHR* pInfo;
+                VkSubresourceLayout2KHR* pLayout;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                vkReadStream->alloc((void**)&pInfo, sizeof(const VkDeviceImageSubresourceInfoKHR));
+                reservedunmarshal_VkDeviceImageSubresourceInfoKHR(
+                    vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                    (VkDeviceImageSubresourceInfoKHR*)(pInfo), readStreamPtrPtr);
+                // Begin manual dispatchable handle unboxing for pLayout;
+                vkReadStream->unsetHandleMapping();
+                vkReadStream->alloc((void**)&pLayout, sizeof(VkSubresourceLayout2KHR));
+                reservedunmarshal_VkSubresourceLayout2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                          (VkSubresourceLayout2KHR*)(pLayout),
+                                                          readStreamPtrPtr);
+                if (pInfo) {
+                    transform_tohost_VkDeviceImageSubresourceInfoKHR(
+                        m_state, (VkDeviceImageSubresourceInfoKHR*)(pInfo));
+                }
+                if (pLayout) {
+                    transform_tohost_VkSubresourceLayout2KHR(m_state,
+                                                             (VkSubresourceLayout2KHR*)(pLayout));
+                }
+                if (m_logCalls) {
+                    fprintf(stderr,
+                            "stream %p: call vkGetDeviceImageSubresourceLayoutKHR 0x%llx 0x%llx "
+                            "0x%llx \n",
+                            ioStream, (unsigned long long)device, (unsigned long long)pInfo,
+                            (unsigned long long)pLayout);
+                }
+                vk->vkGetDeviceImageSubresourceLayoutKHR(unboxed_device, pInfo, pLayout);
+                vkStream->unsetHandleMapping();
+                if (pLayout) {
+                    transform_fromhost_VkSubresourceLayout2KHR(m_state,
+                                                               (VkSubresourceLayout2KHR*)(pLayout));
+                }
+                marshal_VkSubresourceLayout2KHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                (VkSubresourceLayout2KHR*)(pLayout));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkGetDeviceImageSubresourceLayoutKHR(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, pInfo, pLayout);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkGetImageSubresourceLayout2KHR: {
+                android::base::beginTrace("vkGetImageSubresourceLayout2KHR decode");
+                VkDevice device;
+                VkImage image;
+                const VkImageSubresource2KHR* pSubresource;
+                VkSubresourceLayout2KHR* pLayout;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                uint64_t cgen_var_1;
+                memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
+                vkReadStream->alloc((void**)&pSubresource, sizeof(const VkImageSubresource2KHR));
+                reservedunmarshal_VkImageSubresource2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                         (VkImageSubresource2KHR*)(pSubresource),
+                                                         readStreamPtrPtr);
+                // Begin manual dispatchable handle unboxing for pLayout;
+                vkReadStream->unsetHandleMapping();
+                vkReadStream->alloc((void**)&pLayout, sizeof(VkSubresourceLayout2KHR));
+                reservedunmarshal_VkSubresourceLayout2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                          (VkSubresourceLayout2KHR*)(pLayout),
+                                                          readStreamPtrPtr);
+                if (pSubresource) {
+                    transform_tohost_VkImageSubresource2KHR(
+                        m_state, (VkImageSubresource2KHR*)(pSubresource));
+                }
+                if (pLayout) {
+                    transform_tohost_VkSubresourceLayout2KHR(m_state,
+                                                             (VkSubresourceLayout2KHR*)(pLayout));
+                }
+                if (m_logCalls) {
+                    fprintf(stderr,
+                            "stream %p: call vkGetImageSubresourceLayout2KHR 0x%llx 0x%llx 0x%llx "
+                            "0x%llx \n",
+                            ioStream, (unsigned long long)device, (unsigned long long)image,
+                            (unsigned long long)pSubresource, (unsigned long long)pLayout);
+                }
+                vk->vkGetImageSubresourceLayout2KHR(unboxed_device, image, pSubresource, pLayout);
+                vkStream->unsetHandleMapping();
+                if (pLayout) {
+                    transform_fromhost_VkSubresourceLayout2KHR(m_state,
+                                                               (VkSubresourceLayout2KHR*)(pLayout));
+                }
+                marshal_VkSubresourceLayout2KHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                (VkSubresourceLayout2KHR*)(pLayout));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkGetImageSubresourceLayout2KHR(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, image,
+                        pSubresource, pLayout);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+#endif
 #ifdef VK_ANDROID_native_buffer
             case OP_vkGetSwapchainGrallocUsageANDROID: {
                 android::base::beginTrace("vkGetSwapchainGrallocUsageANDROID decode");
@@ -18736,6 +18975,284 @@
                 break;
             }
 #endif
+#ifdef VK_EXT_host_image_copy
+            case OP_vkCopyMemoryToImageEXT: {
+                android::base::beginTrace("vkCopyMemoryToImageEXT decode");
+                VkDevice device;
+                const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                vkReadStream->alloc((void**)&pCopyMemoryToImageInfo,
+                                    sizeof(const VkCopyMemoryToImageInfoEXT));
+                reservedunmarshal_VkCopyMemoryToImageInfoEXT(
+                    vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                    (VkCopyMemoryToImageInfoEXT*)(pCopyMemoryToImageInfo), readStreamPtrPtr);
+                if (pCopyMemoryToImageInfo) {
+                    transform_tohost_VkCopyMemoryToImageInfoEXT(
+                        m_state, (VkCopyMemoryToImageInfoEXT*)(pCopyMemoryToImageInfo));
+                }
+                if (m_logCalls) {
+                    fprintf(stderr, "stream %p: call vkCopyMemoryToImageEXT 0x%llx 0x%llx \n",
+                            ioStream, (unsigned long long)device,
+                            (unsigned long long)pCopyMemoryToImageInfo);
+                }
+                VkResult vkCopyMemoryToImageEXT_VkResult_return = (VkResult)0;
+                vkCopyMemoryToImageEXT_VkResult_return =
+                    vk->vkCopyMemoryToImageEXT(unboxed_device, pCopyMemoryToImageInfo);
+                if ((vkCopyMemoryToImageEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
+                    m_state->on_DeviceLost();
+                m_state->on_CheckOutOfMemory(vkCopyMemoryToImageEXT_VkResult_return, opcode,
+                                             context);
+                vkStream->unsetHandleMapping();
+                vkStream->write(&vkCopyMemoryToImageEXT_VkResult_return, sizeof(VkResult));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkCopyMemoryToImageEXT(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool,
+                        vkCopyMemoryToImageEXT_VkResult_return, device, pCopyMemoryToImageInfo);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkCopyImageToMemoryEXT: {
+                android::base::beginTrace("vkCopyImageToMemoryEXT decode");
+                VkDevice device;
+                const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                vkReadStream->alloc((void**)&pCopyImageToMemoryInfo,
+                                    sizeof(const VkCopyImageToMemoryInfoEXT));
+                reservedunmarshal_VkCopyImageToMemoryInfoEXT(
+                    vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                    (VkCopyImageToMemoryInfoEXT*)(pCopyImageToMemoryInfo), readStreamPtrPtr);
+                if (pCopyImageToMemoryInfo) {
+                    transform_tohost_VkCopyImageToMemoryInfoEXT(
+                        m_state, (VkCopyImageToMemoryInfoEXT*)(pCopyImageToMemoryInfo));
+                }
+                if (m_logCalls) {
+                    fprintf(stderr, "stream %p: call vkCopyImageToMemoryEXT 0x%llx 0x%llx \n",
+                            ioStream, (unsigned long long)device,
+                            (unsigned long long)pCopyImageToMemoryInfo);
+                }
+                VkResult vkCopyImageToMemoryEXT_VkResult_return = (VkResult)0;
+                vkCopyImageToMemoryEXT_VkResult_return =
+                    vk->vkCopyImageToMemoryEXT(unboxed_device, pCopyImageToMemoryInfo);
+                if ((vkCopyImageToMemoryEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
+                    m_state->on_DeviceLost();
+                m_state->on_CheckOutOfMemory(vkCopyImageToMemoryEXT_VkResult_return, opcode,
+                                             context);
+                vkStream->unsetHandleMapping();
+                vkStream->write(&vkCopyImageToMemoryEXT_VkResult_return, sizeof(VkResult));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkCopyImageToMemoryEXT(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool,
+                        vkCopyImageToMemoryEXT_VkResult_return, device, pCopyImageToMemoryInfo);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkCopyImageToImageEXT: {
+                android::base::beginTrace("vkCopyImageToImageEXT decode");
+                VkDevice device;
+                const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                vkReadStream->alloc((void**)&pCopyImageToImageInfo,
+                                    sizeof(const VkCopyImageToImageInfoEXT));
+                reservedunmarshal_VkCopyImageToImageInfoEXT(
+                    vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                    (VkCopyImageToImageInfoEXT*)(pCopyImageToImageInfo), readStreamPtrPtr);
+                if (pCopyImageToImageInfo) {
+                    transform_tohost_VkCopyImageToImageInfoEXT(
+                        m_state, (VkCopyImageToImageInfoEXT*)(pCopyImageToImageInfo));
+                }
+                if (m_logCalls) {
+                    fprintf(stderr, "stream %p: call vkCopyImageToImageEXT 0x%llx 0x%llx \n",
+                            ioStream, (unsigned long long)device,
+                            (unsigned long long)pCopyImageToImageInfo);
+                }
+                VkResult vkCopyImageToImageEXT_VkResult_return = (VkResult)0;
+                vkCopyImageToImageEXT_VkResult_return =
+                    vk->vkCopyImageToImageEXT(unboxed_device, pCopyImageToImageInfo);
+                if ((vkCopyImageToImageEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
+                    m_state->on_DeviceLost();
+                m_state->on_CheckOutOfMemory(vkCopyImageToImageEXT_VkResult_return, opcode,
+                                             context);
+                vkStream->unsetHandleMapping();
+                vkStream->write(&vkCopyImageToImageEXT_VkResult_return, sizeof(VkResult));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkCopyImageToImageEXT(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool,
+                        vkCopyImageToImageEXT_VkResult_return, device, pCopyImageToImageInfo);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkTransitionImageLayoutEXT: {
+                android::base::beginTrace("vkTransitionImageLayoutEXT decode");
+                VkDevice device;
+                uint32_t transitionCount;
+                const VkHostImageLayoutTransitionInfoEXT* pTransitions;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                memcpy((uint32_t*)&transitionCount, *readStreamPtrPtr, sizeof(uint32_t));
+                *readStreamPtrPtr += sizeof(uint32_t);
+                vkReadStream->alloc(
+                    (void**)&pTransitions,
+                    ((transitionCount)) * sizeof(const VkHostImageLayoutTransitionInfoEXT));
+                for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
+                    reservedunmarshal_VkHostImageLayoutTransitionInfoEXT(
+                        vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                        (VkHostImageLayoutTransitionInfoEXT*)(pTransitions + i), readStreamPtrPtr);
+                }
+                if (pTransitions) {
+                    for (uint32_t i = 0; i < (uint32_t)((transitionCount)); ++i) {
+                        transform_tohost_VkHostImageLayoutTransitionInfoEXT(
+                            m_state, (VkHostImageLayoutTransitionInfoEXT*)(pTransitions + i));
+                    }
+                }
+                if (m_logCalls) {
+                    fprintf(stderr,
+                            "stream %p: call vkTransitionImageLayoutEXT 0x%llx 0x%llx 0x%llx \n",
+                            ioStream, (unsigned long long)device,
+                            (unsigned long long)transitionCount, (unsigned long long)pTransitions);
+                }
+                VkResult vkTransitionImageLayoutEXT_VkResult_return = (VkResult)0;
+                vkTransitionImageLayoutEXT_VkResult_return =
+                    vk->vkTransitionImageLayoutEXT(unboxed_device, transitionCount, pTransitions);
+                if ((vkTransitionImageLayoutEXT_VkResult_return) == VK_ERROR_DEVICE_LOST)
+                    m_state->on_DeviceLost();
+                m_state->on_CheckOutOfMemory(vkTransitionImageLayoutEXT_VkResult_return, opcode,
+                                             context);
+                vkStream->unsetHandleMapping();
+                vkStream->write(&vkTransitionImageLayoutEXT_VkResult_return, sizeof(VkResult));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkTransitionImageLayoutEXT(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool,
+                        vkTransitionImageLayoutEXT_VkResult_return, device, transitionCount,
+                        pTransitions);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+            case OP_vkGetImageSubresourceLayout2EXT: {
+                android::base::beginTrace("vkGetImageSubresourceLayout2EXT decode");
+                VkDevice device;
+                VkImage image;
+                const VkImageSubresource2KHR* pSubresource;
+                VkSubresourceLayout2KHR* pLayout;
+                // Begin non wrapped dispatchable handle unboxing for device;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
+                auto unboxed_device = unbox_VkDevice(device);
+                auto vk = dispatch_VkDevice(device);
+                // End manual dispatchable handle unboxing for device;
+                uint64_t cgen_var_1;
+                memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
+                vkReadStream->alloc((void**)&pSubresource, sizeof(const VkImageSubresource2KHR));
+                reservedunmarshal_VkImageSubresource2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                         (VkImageSubresource2KHR*)(pSubresource),
+                                                         readStreamPtrPtr);
+                // Begin manual dispatchable handle unboxing for pLayout;
+                vkReadStream->unsetHandleMapping();
+                vkReadStream->alloc((void**)&pLayout, sizeof(VkSubresourceLayout2KHR));
+                reservedunmarshal_VkSubresourceLayout2KHR(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                          (VkSubresourceLayout2KHR*)(pLayout),
+                                                          readStreamPtrPtr);
+                if (pSubresource) {
+                    transform_tohost_VkImageSubresource2KHR(
+                        m_state, (VkImageSubresource2KHR*)(pSubresource));
+                }
+                if (pLayout) {
+                    transform_tohost_VkSubresourceLayout2KHR(m_state,
+                                                             (VkSubresourceLayout2KHR*)(pLayout));
+                }
+                if (m_logCalls) {
+                    fprintf(stderr,
+                            "stream %p: call vkGetImageSubresourceLayout2EXT 0x%llx 0x%llx 0x%llx "
+                            "0x%llx \n",
+                            ioStream, (unsigned long long)device, (unsigned long long)image,
+                            (unsigned long long)pSubresource, (unsigned long long)pLayout);
+                }
+                vk->vkGetImageSubresourceLayout2EXT(unboxed_device, image, pSubresource, pLayout);
+                vkStream->unsetHandleMapping();
+                if (pLayout) {
+                    transform_fromhost_VkSubresourceLayout2KHR(m_state,
+                                                               (VkSubresourceLayout2KHR*)(pLayout));
+                }
+                marshal_VkSubresourceLayout2KHR(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
+                                                (VkSubresourceLayout2KHR*)(pLayout));
+                vkStream->commitWrite();
+                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
+                                         (uintptr_t)snapshotTraceBegin);
+                size_t snapshotTraceBytes = vkReadStream->endTrace();
+                if (m_state->snapshotsEnabled()) {
+                    m_state->snapshot()->vkGetImageSubresourceLayout2EXT(
+                        snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, image,
+                        pSubresource, pLayout);
+                }
+                vkReadStream->clearPool();
+                if (queueSubmitWithCommandsEnabled)
+                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
+                android::base::endTrace();
+                break;
+            }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
             case OP_vkReleaseSwapchainImagesEXT: {
                 android::base::beginTrace("vkReleaseSwapchainImagesEXT decode");
@@ -19045,72 +19562,6 @@
 #ifdef VK_EXT_image_robustness
 #endif
 #ifdef VK_EXT_image_compression_control
-            case OP_vkGetImageSubresourceLayout2EXT: {
-                android::base::beginTrace("vkGetImageSubresourceLayout2EXT decode");
-                VkDevice device;
-                VkImage image;
-                const VkImageSubresource2EXT* pSubresource;
-                VkSubresourceLayout2EXT* pLayout;
-                // Begin non wrapped dispatchable handle unboxing for device;
-                uint64_t cgen_var_0;
-                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
-                *readStreamPtrPtr += 1 * 8;
-                *(VkDevice*)&device = (VkDevice)(VkDevice)((VkDevice)(*&cgen_var_0));
-                auto unboxed_device = unbox_VkDevice(device);
-                auto vk = dispatch_VkDevice(device);
-                // End manual dispatchable handle unboxing for device;
-                uint64_t cgen_var_1;
-                memcpy((uint64_t*)&cgen_var_1, *readStreamPtrPtr, 1 * 8);
-                *readStreamPtrPtr += 1 * 8;
-                *(VkImage*)&image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
-                vkReadStream->alloc((void**)&pSubresource, sizeof(const VkImageSubresource2EXT));
-                reservedunmarshal_VkImageSubresource2EXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
-                                                         (VkImageSubresource2EXT*)(pSubresource),
-                                                         readStreamPtrPtr);
-                // Begin manual dispatchable handle unboxing for pLayout;
-                vkReadStream->unsetHandleMapping();
-                vkReadStream->alloc((void**)&pLayout, sizeof(VkSubresourceLayout2EXT));
-                reservedunmarshal_VkSubresourceLayout2EXT(vkReadStream, VK_STRUCTURE_TYPE_MAX_ENUM,
-                                                          (VkSubresourceLayout2EXT*)(pLayout),
-                                                          readStreamPtrPtr);
-                if (pSubresource) {
-                    transform_tohost_VkImageSubresource2EXT(
-                        m_state, (VkImageSubresource2EXT*)(pSubresource));
-                }
-                if (pLayout) {
-                    transform_tohost_VkSubresourceLayout2EXT(m_state,
-                                                             (VkSubresourceLayout2EXT*)(pLayout));
-                }
-                if (m_logCalls) {
-                    fprintf(stderr,
-                            "stream %p: call vkGetImageSubresourceLayout2EXT 0x%llx 0x%llx 0x%llx "
-                            "0x%llx \n",
-                            ioStream, (unsigned long long)device, (unsigned long long)image,
-                            (unsigned long long)pSubresource, (unsigned long long)pLayout);
-                }
-                vk->vkGetImageSubresourceLayout2EXT(unboxed_device, image, pSubresource, pLayout);
-                vkStream->unsetHandleMapping();
-                if (pLayout) {
-                    transform_fromhost_VkSubresourceLayout2EXT(m_state,
-                                                               (VkSubresourceLayout2EXT*)(pLayout));
-                }
-                marshal_VkSubresourceLayout2EXT(vkStream, VK_STRUCTURE_TYPE_MAX_ENUM,
-                                                (VkSubresourceLayout2EXT*)(pLayout));
-                vkStream->commitWrite();
-                vkReadStream->setReadPos((uintptr_t)(*readStreamPtrPtr) -
-                                         (uintptr_t)snapshotTraceBegin);
-                size_t snapshotTraceBytes = vkReadStream->endTrace();
-                if (m_state->snapshotsEnabled()) {
-                    m_state->snapshot()->vkGetImageSubresourceLayout2EXT(
-                        snapshotTraceBegin, snapshotTraceBytes, &m_pool, device, image,
-                        pSubresource, pLayout);
-                }
-                vkReadStream->clearPool();
-                if (queueSubmitWithCommandsEnabled)
-                    seqnoPtr->fetch_add(1, std::memory_order_seq_cst);
-                android::base::endTrace();
-                break;
-            }
 #endif
 #ifdef VK_EXT_4444_formats
 #endif
diff --git a/host/vulkan/VkDecoder.h b/host/vulkan/VkDecoder.h
index 2f0f592..7512e3f 100644
--- a/host/vulkan/VkDecoder.h
+++ b/host/vulkan/VkDecoder.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module VkDecoder
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -35,7 +35,7 @@
 #include <memory>
 
 #include "VkDecoderContext.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace android {
@@ -164,6 +164,8 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+#endif
 #ifdef VK_ANDROID_native_buffer
 #endif
 #ifdef VK_EXT_transform_feedback
@@ -202,6 +204,8 @@
 #endif
 #ifdef VK_EXT_extended_dynamic_state
 #endif
+#ifdef VK_EXT_host_image_copy
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
diff --git a/host/vulkan/VkDecoderSnapshot.cpp b/host/vulkan/VkDecoderSnapshot.cpp
index 39c168f..c0e12da 100644
--- a/host/vulkan/VkDecoderSnapshot.cpp
+++ b/host/vulkan/VkDecoderSnapshot.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module VkDecoderSnapshot
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -2305,6 +2305,35 @@
         // TODO: Implement
     }
 #endif
+#ifdef VK_KHR_maintenance5
+    void vkCmdBindIndexBuffer2KHR(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                  android::base::BumpPool* pool, VkCommandBuffer commandBuffer,
+                                  VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size,
+                                  VkIndexType indexType) {
+        // TODO: Implement
+    }
+    void vkGetRenderingAreaGranularityKHR(const uint8_t* snapshotTraceBegin,
+                                          size_t snapshotTraceBytes, android::base::BumpPool* pool,
+                                          VkDevice device,
+                                          const VkRenderingAreaInfoKHR* pRenderingAreaInfo,
+                                          VkExtent2D* pGranularity) {
+        // TODO: Implement
+    }
+    void vkGetDeviceImageSubresourceLayoutKHR(const uint8_t* snapshotTraceBegin,
+                                              size_t snapshotTraceBytes,
+                                              android::base::BumpPool* pool, VkDevice device,
+                                              const VkDeviceImageSubresourceInfoKHR* pInfo,
+                                              VkSubresourceLayout2KHR* pLayout) {
+        // TODO: Implement
+    }
+    void vkGetImageSubresourceLayout2KHR(const uint8_t* snapshotTraceBegin,
+                                         size_t snapshotTraceBytes, android::base::BumpPool* pool,
+                                         VkDevice device, VkImage image,
+                                         const VkImageSubresource2KHR* pSubresource,
+                                         VkSubresourceLayout2KHR* pLayout) {
+        // TODO: Implement
+    }
+#endif
 #ifdef VK_ANDROID_native_buffer
     void vkGetSwapchainGrallocUsageANDROID(const uint8_t* snapshotTraceBegin,
                                            size_t snapshotTraceBytes, android::base::BumpPool* pool,
@@ -2485,6 +2514,39 @@
         // TODO: Implement
     }
 #endif
+#ifdef VK_EXT_host_image_copy
+    void vkCopyMemoryToImageEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                android::base::BumpPool* pool, VkResult input_result,
+                                VkDevice device,
+                                const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo) {
+        // TODO: Implement
+    }
+    void vkCopyImageToMemoryEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                android::base::BumpPool* pool, VkResult input_result,
+                                VkDevice device,
+                                const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo) {
+        // TODO: Implement
+    }
+    void vkCopyImageToImageEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                               android::base::BumpPool* pool, VkResult input_result,
+                               VkDevice device,
+                               const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo) {
+        // TODO: Implement
+    }
+    void vkTransitionImageLayoutEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                    android::base::BumpPool* pool, VkResult input_result,
+                                    VkDevice device, uint32_t transitionCount,
+                                    const VkHostImageLayoutTransitionInfoEXT* pTransitions) {
+        // TODO: Implement
+    }
+    void vkGetImageSubresourceLayout2EXT(const uint8_t* snapshotTraceBegin,
+                                         size_t snapshotTraceBytes, android::base::BumpPool* pool,
+                                         VkDevice device, VkImage image,
+                                         const VkImageSubresource2KHR* pSubresource,
+                                         VkSubresourceLayout2KHR* pLayout) {
+        // TODO: Implement
+    }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
     void vkReleaseSwapchainImagesEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
                                      android::base::BumpPool* pool, VkResult input_result,
@@ -2537,13 +2599,6 @@
 #ifdef VK_EXT_image_robustness
 #endif
 #ifdef VK_EXT_image_compression_control
-    void vkGetImageSubresourceLayout2EXT(const uint8_t* snapshotTraceBegin,
-                                         size_t snapshotTraceBytes, android::base::BumpPool* pool,
-                                         VkDevice device, VkImage image,
-                                         const VkImageSubresource2EXT* pSubresource,
-                                         VkSubresourceLayout2EXT* pLayout) {
-        // TODO: Implement
-    }
 #endif
 #ifdef VK_EXT_4444_formats
 #endif
@@ -5488,6 +5543,45 @@
                                                        pSparseMemoryRequirements);
 }
 #endif
+#ifdef VK_KHR_maintenance5
+void VkDecoderSnapshot::vkCmdBindIndexBuffer2KHR(const uint8_t* snapshotTraceBegin,
+                                                 size_t snapshotTraceBytes,
+                                                 android::base::BumpPool* pool,
+                                                 VkCommandBuffer commandBuffer, VkBuffer buffer,
+                                                 VkDeviceSize offset, VkDeviceSize size,
+                                                 VkIndexType indexType) {
+    mImpl->vkCmdBindIndexBuffer2KHR(snapshotTraceBegin, snapshotTraceBytes, pool, commandBuffer,
+                                    buffer, offset, size, indexType);
+}
+#endif
+#ifdef VK_KHR_maintenance5
+void VkDecoderSnapshot::vkGetRenderingAreaGranularityKHR(
+    const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+    VkDevice device, const VkRenderingAreaInfoKHR* pRenderingAreaInfo, VkExtent2D* pGranularity) {
+    mImpl->vkGetRenderingAreaGranularityKHR(snapshotTraceBegin, snapshotTraceBytes, pool, device,
+                                            pRenderingAreaInfo, pGranularity);
+}
+#endif
+#ifdef VK_KHR_maintenance5
+void VkDecoderSnapshot::vkGetDeviceImageSubresourceLayoutKHR(
+    const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+    VkDevice device, const VkDeviceImageSubresourceInfoKHR* pInfo,
+    VkSubresourceLayout2KHR* pLayout) {
+    mImpl->vkGetDeviceImageSubresourceLayoutKHR(snapshotTraceBegin, snapshotTraceBytes, pool,
+                                                device, pInfo, pLayout);
+}
+#endif
+#ifdef VK_KHR_maintenance5
+void VkDecoderSnapshot::vkGetImageSubresourceLayout2KHR(const uint8_t* snapshotTraceBegin,
+                                                        size_t snapshotTraceBytes,
+                                                        android::base::BumpPool* pool,
+                                                        VkDevice device, VkImage image,
+                                                        const VkImageSubresource2KHR* pSubresource,
+                                                        VkSubresourceLayout2KHR* pLayout) {
+    mImpl->vkGetImageSubresourceLayout2KHR(snapshotTraceBegin, snapshotTraceBytes, pool, device,
+                                           image, pSubresource, pLayout);
+}
+#endif
 #ifdef VK_ANDROID_native_buffer
 void VkDecoderSnapshot::vkGetSwapchainGrallocUsageANDROID(
     const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
@@ -5722,6 +5816,53 @@
                                 faceMask, failOp, passOp, depthFailOp, compareOp);
 }
 #endif
+#ifdef VK_EXT_host_image_copy
+void VkDecoderSnapshot::vkCopyMemoryToImageEXT(
+    const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+    VkResult input_result, VkDevice device,
+    const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo) {
+    mImpl->vkCopyMemoryToImageEXT(snapshotTraceBegin, snapshotTraceBytes, pool, input_result,
+                                  device, pCopyMemoryToImageInfo);
+}
+#endif
+#ifdef VK_EXT_host_image_copy
+void VkDecoderSnapshot::vkCopyImageToMemoryEXT(
+    const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+    VkResult input_result, VkDevice device,
+    const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo) {
+    mImpl->vkCopyImageToMemoryEXT(snapshotTraceBegin, snapshotTraceBytes, pool, input_result,
+                                  device, pCopyImageToMemoryInfo);
+}
+#endif
+#ifdef VK_EXT_host_image_copy
+void VkDecoderSnapshot::vkCopyImageToImageEXT(
+    const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+    VkResult input_result, VkDevice device,
+    const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo) {
+    mImpl->vkCopyImageToImageEXT(snapshotTraceBegin, snapshotTraceBytes, pool, input_result, device,
+                                 pCopyImageToImageInfo);
+}
+#endif
+#ifdef VK_EXT_host_image_copy
+void VkDecoderSnapshot::vkTransitionImageLayoutEXT(
+    const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
+    VkResult input_result, VkDevice device, uint32_t transitionCount,
+    const VkHostImageLayoutTransitionInfoEXT* pTransitions) {
+    mImpl->vkTransitionImageLayoutEXT(snapshotTraceBegin, snapshotTraceBytes, pool, input_result,
+                                      device, transitionCount, pTransitions);
+}
+#endif
+#ifdef VK_EXT_host_image_copy
+void VkDecoderSnapshot::vkGetImageSubresourceLayout2EXT(const uint8_t* snapshotTraceBegin,
+                                                        size_t snapshotTraceBytes,
+                                                        android::base::BumpPool* pool,
+                                                        VkDevice device, VkImage image,
+                                                        const VkImageSubresource2KHR* pSubresource,
+                                                        VkSubresourceLayout2KHR* pLayout) {
+    mImpl->vkGetImageSubresourceLayout2EXT(snapshotTraceBegin, snapshotTraceBytes, pool, device,
+                                           image, pSubresource, pLayout);
+}
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void VkDecoderSnapshot::vkReleaseSwapchainImagesEXT(
     const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes, android::base::BumpPool* pool,
@@ -5770,17 +5911,6 @@
                                objectHandle, privateDataSlot, pData);
 }
 #endif
-#ifdef VK_EXT_image_compression_control
-void VkDecoderSnapshot::vkGetImageSubresourceLayout2EXT(const uint8_t* snapshotTraceBegin,
-                                                        size_t snapshotTraceBytes,
-                                                        android::base::BumpPool* pool,
-                                                        VkDevice device, VkImage image,
-                                                        const VkImageSubresource2EXT* pSubresource,
-                                                        VkSubresourceLayout2EXT* pLayout) {
-    mImpl->vkGetImageSubresourceLayout2EXT(snapshotTraceBegin, snapshotTraceBytes, pool, device,
-                                           image, pSubresource, pLayout);
-}
-#endif
 #ifdef VK_EXT_extended_dynamic_state2
 void VkDecoderSnapshot::vkCmdSetPatchControlPointsEXT(const uint8_t* snapshotTraceBegin,
                                                       size_t snapshotTraceBytes,
diff --git a/host/vulkan/VkDecoderSnapshot.h b/host/vulkan/VkDecoderSnapshot.h
index ba0d550..28611ff 100644
--- a/host/vulkan/VkDecoderSnapshot.h
+++ b/host/vulkan/VkDecoderSnapshot.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module VkDecoderSnapshot
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -37,7 +37,7 @@
 #include "aemu/base/HealthMonitor.h"
 #include "common/goldfish_vk_private_defs.h"
 #include "utils/GfxApiLogger.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace android {
@@ -1240,6 +1240,27 @@
         uint32_t* pSparseMemoryRequirementCount,
         VkSparseImageMemoryRequirements2* pSparseMemoryRequirements);
 #endif
+#ifdef VK_KHR_maintenance5
+    void vkCmdBindIndexBuffer2KHR(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                  android::base::BumpPool* pool, VkCommandBuffer commandBuffer,
+                                  VkBuffer buffer, VkDeviceSize offset, VkDeviceSize size,
+                                  VkIndexType indexType);
+    void vkGetRenderingAreaGranularityKHR(const uint8_t* snapshotTraceBegin,
+                                          size_t snapshotTraceBytes, android::base::BumpPool* pool,
+                                          VkDevice device,
+                                          const VkRenderingAreaInfoKHR* pRenderingAreaInfo,
+                                          VkExtent2D* pGranularity);
+    void vkGetDeviceImageSubresourceLayoutKHR(const uint8_t* snapshotTraceBegin,
+                                              size_t snapshotTraceBytes,
+                                              android::base::BumpPool* pool, VkDevice device,
+                                              const VkDeviceImageSubresourceInfoKHR* pInfo,
+                                              VkSubresourceLayout2KHR* pLayout);
+    void vkGetImageSubresourceLayout2KHR(const uint8_t* snapshotTraceBegin,
+                                         size_t snapshotTraceBytes, android::base::BumpPool* pool,
+                                         VkDevice device, VkImage image,
+                                         const VkImageSubresource2KHR* pSubresource,
+                                         VkSubresourceLayout2KHR* pLayout);
+#endif
 #ifdef VK_ANDROID_native_buffer
     void vkGetSwapchainGrallocUsageANDROID(const uint8_t* snapshotTraceBegin,
                                            size_t snapshotTraceBytes, android::base::BumpPool* pool,
@@ -1372,6 +1393,29 @@
                               VkStencilFaceFlags faceMask, VkStencilOp failOp, VkStencilOp passOp,
                               VkStencilOp depthFailOp, VkCompareOp compareOp);
 #endif
+#ifdef VK_EXT_host_image_copy
+    void vkCopyMemoryToImageEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                android::base::BumpPool* pool, VkResult input_result,
+                                VkDevice device,
+                                const VkCopyMemoryToImageInfoEXT* pCopyMemoryToImageInfo);
+    void vkCopyImageToMemoryEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                android::base::BumpPool* pool, VkResult input_result,
+                                VkDevice device,
+                                const VkCopyImageToMemoryInfoEXT* pCopyImageToMemoryInfo);
+    void vkCopyImageToImageEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                               android::base::BumpPool* pool, VkResult input_result,
+                               VkDevice device,
+                               const VkCopyImageToImageInfoEXT* pCopyImageToImageInfo);
+    void vkTransitionImageLayoutEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
+                                    android::base::BumpPool* pool, VkResult input_result,
+                                    VkDevice device, uint32_t transitionCount,
+                                    const VkHostImageLayoutTransitionInfoEXT* pTransitions);
+    void vkGetImageSubresourceLayout2EXT(const uint8_t* snapshotTraceBegin,
+                                         size_t snapshotTraceBytes, android::base::BumpPool* pool,
+                                         VkDevice device, VkImage image,
+                                         const VkImageSubresource2KHR* pSubresource,
+                                         VkSubresourceLayout2KHR* pLayout);
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
     void vkReleaseSwapchainImagesEXT(const uint8_t* snapshotTraceBegin, size_t snapshotTraceBytes,
                                      android::base::BumpPool* pool, VkResult input_result,
@@ -1414,11 +1458,6 @@
 #ifdef VK_EXT_image_robustness
 #endif
 #ifdef VK_EXT_image_compression_control
-    void vkGetImageSubresourceLayout2EXT(const uint8_t* snapshotTraceBegin,
-                                         size_t snapshotTraceBytes, android::base::BumpPool* pool,
-                                         VkDevice device, VkImage image,
-                                         const VkImageSubresource2EXT* pSubresource,
-                                         VkSubresourceLayout2EXT* pLayout);
 #endif
 #ifdef VK_EXT_4444_formats
 #endif
diff --git a/host/vulkan/VkSubDecoder.cpp b/host/vulkan/VkSubDecoder.cpp
index b18596e..69eab14 100644
--- a/host/vulkan/VkSubDecoder.cpp
+++ b/host/vulkan/VkSubDecoder.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module VkSubDecoder
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -2454,6 +2454,29 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+            case OP_vkCmdBindIndexBuffer2KHR: {
+                android::base::beginTrace("vkCmdBindIndexBuffer2KHR subdecode");
+                VkBuffer buffer;
+                VkDeviceSize offset;
+                VkDeviceSize size;
+                VkIndexType indexType;
+                uint64_t cgen_var_0;
+                memcpy((uint64_t*)&cgen_var_0, *readStreamPtrPtr, 1 * 8);
+                *readStreamPtrPtr += 1 * 8;
+                *(VkBuffer*)&buffer = (VkBuffer)unbox_VkBuffer((VkBuffer)(*&cgen_var_0));
+                memcpy((VkDeviceSize*)&offset, *readStreamPtrPtr, sizeof(VkDeviceSize));
+                *readStreamPtrPtr += sizeof(VkDeviceSize);
+                memcpy((VkDeviceSize*)&size, *readStreamPtrPtr, sizeof(VkDeviceSize));
+                *readStreamPtrPtr += sizeof(VkDeviceSize);
+                memcpy((VkIndexType*)&indexType, *readStreamPtrPtr, sizeof(VkIndexType));
+                *readStreamPtrPtr += sizeof(VkIndexType);
+                vk->vkCmdBindIndexBuffer2KHR((VkCommandBuffer)dispatchHandle, buffer, offset, size,
+                                             indexType);
+                android::base::endTrace();
+                break;
+            }
+#endif
 #ifdef VK_ANDROID_native_buffer
 #endif
 #ifdef VK_EXT_transform_feedback
@@ -2979,6 +3002,8 @@
                 break;
             }
 #endif
+#ifdef VK_EXT_host_image_copy
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
diff --git a/host/vulkan/cereal/CMakeLists.txt b/host/vulkan/cereal/CMakeLists.txt
index b3a8815..0231ac9 100644
--- a/host/vulkan/cereal/CMakeLists.txt
+++ b/host/vulkan/cereal/CMakeLists.txt
@@ -1,6 +1,6 @@
 
 # Autogenerated makefile
-# codegen/vulkan/vulkan-docs/scripts/genvk.py -registry codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+# codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 # Please do not modify directly;
 # re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
 # or directly from Python by defining:
diff --git a/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp b/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp
index c69010e..65eb18e 100644
--- a/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_deepcopy.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_deepcopy
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -7244,6 +7244,207 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+void deepcopy_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    Allocator* alloc, VkStructureType rootType, const VkPhysicalDeviceMaintenance5FeaturesKHR* from,
+    VkPhysicalDeviceMaintenance5FeaturesKHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    Allocator* alloc, VkStructureType rootType,
+    const VkPhysicalDeviceMaintenance5PropertiesKHR* from,
+    VkPhysicalDeviceMaintenance5PropertiesKHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkRenderingAreaInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                     const VkRenderingAreaInfoKHR* from,
+                                     VkRenderingAreaInfoKHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    to->pColorAttachmentFormats = nullptr;
+    if (from->pColorAttachmentFormats) {
+        to->pColorAttachmentFormats = (VkFormat*)alloc->dupArray(
+            from->pColorAttachmentFormats, from->colorAttachmentCount * sizeof(const VkFormat));
+    }
+}
+
+void deepcopy_VkImageSubresource2KHR(Allocator* alloc, VkStructureType rootType,
+                                     const VkImageSubresource2KHR* from,
+                                     VkImageSubresource2KHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    deepcopy_VkImageSubresource(alloc, rootType, &from->imageSubresource,
+                                (VkImageSubresource*)(&to->imageSubresource));
+}
+
+void deepcopy_VkDeviceImageSubresourceInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                              const VkDeviceImageSubresourceInfoKHR* from,
+                                              VkDeviceImageSubresourceInfoKHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    to->pCreateInfo = nullptr;
+    if (from->pCreateInfo) {
+        to->pCreateInfo = (VkImageCreateInfo*)alloc->alloc(sizeof(const VkImageCreateInfo));
+        deepcopy_VkImageCreateInfo(alloc, rootType, from->pCreateInfo,
+                                   (VkImageCreateInfo*)(to->pCreateInfo));
+    }
+    to->pSubresource = nullptr;
+    if (from->pSubresource) {
+        to->pSubresource =
+            (VkImageSubresource2KHR*)alloc->alloc(sizeof(const VkImageSubresource2KHR));
+        deepcopy_VkImageSubresource2KHR(alloc, rootType, from->pSubresource,
+                                        (VkImageSubresource2KHR*)(to->pSubresource));
+    }
+}
+
+void deepcopy_VkSubresourceLayout2KHR(Allocator* alloc, VkStructureType rootType,
+                                      const VkSubresourceLayout2KHR* from,
+                                      VkSubresourceLayout2KHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    deepcopy_VkSubresourceLayout(alloc, rootType, &from->subresourceLayout,
+                                 (VkSubresourceLayout*)(&to->subresourceLayout));
+}
+
+void deepcopy_VkPipelineCreateFlags2CreateInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                                  const VkPipelineCreateFlags2CreateInfoKHR* from,
+                                                  VkPipelineCreateFlags2CreateInfoKHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkBufferUsageFlags2CreateInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                               const VkBufferUsageFlags2CreateInfoKHR* from,
+                                               VkBufferUsageFlags2CreateInfoKHR* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void deepcopy_VkNativeBufferUsage2ANDROID(Allocator* alloc, VkStructureType rootType,
                                           const VkNativeBufferUsage2ANDROID* from,
@@ -7615,6 +7816,297 @@
 }
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void deepcopy_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    Allocator* alloc, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyFeaturesEXT* from,
+    VkPhysicalDeviceHostImageCopyFeaturesEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    Allocator* alloc, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyPropertiesEXT* from,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    to->pCopySrcLayouts = nullptr;
+    if (from->pCopySrcLayouts) {
+        to->pCopySrcLayouts = (VkImageLayout*)alloc->dupArray(
+            from->pCopySrcLayouts, from->copySrcLayoutCount * sizeof(VkImageLayout));
+    }
+    to->pCopyDstLayouts = nullptr;
+    if (from->pCopyDstLayouts) {
+        to->pCopyDstLayouts = (VkImageLayout*)alloc->dupArray(
+            from->pCopyDstLayouts, from->copyDstLayoutCount * sizeof(VkImageLayout));
+    }
+    memcpy(to->optimalTilingLayoutUUID, from->optimalTilingLayoutUUID,
+           VK_UUID_SIZE * sizeof(uint8_t));
+}
+
+void deepcopy_VkMemoryToImageCopyEXT(Allocator* alloc, VkStructureType rootType,
+                                     const VkMemoryToImageCopyEXT* from,
+                                     VkMemoryToImageCopyEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    to->pHostPointer = nullptr;
+    if (from->pHostPointer) {
+        to->pHostPointer = (void*)alloc->dupArray(from->pHostPointer, sizeof(const uint8_t));
+    }
+    deepcopy_VkImageSubresourceLayers(alloc, rootType, &from->imageSubresource,
+                                      (VkImageSubresourceLayers*)(&to->imageSubresource));
+    deepcopy_VkOffset3D(alloc, rootType, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
+    deepcopy_VkExtent3D(alloc, rootType, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
+}
+
+void deepcopy_VkImageToMemoryCopyEXT(Allocator* alloc, VkStructureType rootType,
+                                     const VkImageToMemoryCopyEXT* from,
+                                     VkImageToMemoryCopyEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    to->pHostPointer = nullptr;
+    if (from->pHostPointer) {
+        to->pHostPointer = (void*)alloc->dupArray(from->pHostPointer, sizeof(uint8_t));
+    }
+    deepcopy_VkImageSubresourceLayers(alloc, rootType, &from->imageSubresource,
+                                      (VkImageSubresourceLayers*)(&to->imageSubresource));
+    deepcopy_VkOffset3D(alloc, rootType, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
+    deepcopy_VkExtent3D(alloc, rootType, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
+}
+
+void deepcopy_VkCopyMemoryToImageInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                         const VkCopyMemoryToImageInfoEXT* from,
+                                         VkCopyMemoryToImageInfoEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    if (from) {
+        to->pRegions = nullptr;
+        if (from->pRegions) {
+            to->pRegions = (VkMemoryToImageCopyEXT*)alloc->alloc(
+                from->regionCount * sizeof(const VkMemoryToImageCopyEXT));
+            to->regionCount = from->regionCount;
+            for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i) {
+                deepcopy_VkMemoryToImageCopyEXT(alloc, rootType, from->pRegions + i,
+                                                (VkMemoryToImageCopyEXT*)(to->pRegions + i));
+            }
+        }
+    }
+}
+
+void deepcopy_VkCopyImageToMemoryInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                         const VkCopyImageToMemoryInfoEXT* from,
+                                         VkCopyImageToMemoryInfoEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    if (from) {
+        to->pRegions = nullptr;
+        if (from->pRegions) {
+            to->pRegions = (VkImageToMemoryCopyEXT*)alloc->alloc(
+                from->regionCount * sizeof(const VkImageToMemoryCopyEXT));
+            to->regionCount = from->regionCount;
+            for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i) {
+                deepcopy_VkImageToMemoryCopyEXT(alloc, rootType, from->pRegions + i,
+                                                (VkImageToMemoryCopyEXT*)(to->pRegions + i));
+            }
+        }
+    }
+}
+
+void deepcopy_VkCopyImageToImageInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                        const VkCopyImageToImageInfoEXT* from,
+                                        VkCopyImageToImageInfoEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    if (from) {
+        to->pRegions = nullptr;
+        if (from->pRegions) {
+            to->pRegions =
+                (VkImageCopy2*)alloc->alloc(from->regionCount * sizeof(const VkImageCopy2));
+            to->regionCount = from->regionCount;
+            for (uint32_t i = 0; i < (uint32_t)from->regionCount; ++i) {
+                deepcopy_VkImageCopy2(alloc, rootType, from->pRegions + i,
+                                      (VkImageCopy2*)(to->pRegions + i));
+            }
+        }
+    }
+}
+
+void deepcopy_VkHostImageLayoutTransitionInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                                 const VkHostImageLayoutTransitionInfoEXT* from,
+                                                 VkHostImageLayoutTransitionInfoEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+    deepcopy_VkImageSubresourceRange(alloc, rootType, &from->subresourceRange,
+                                     (VkImageSubresourceRange*)(&to->subresourceRange));
+}
+
+void deepcopy_VkSubresourceHostMemcpySizeEXT(Allocator* alloc, VkStructureType rootType,
+                                             const VkSubresourceHostMemcpySizeEXT* from,
+                                             VkSubresourceHostMemcpySizeEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+void deepcopy_VkHostImageCopyDevicePerformanceQueryEXT(
+    Allocator* alloc, VkStructureType rootType,
+    const VkHostImageCopyDevicePerformanceQueryEXT* from,
+    VkHostImageCopyDevicePerformanceQueryEXT* to) {
+    (void)alloc;
+    (void)rootType;
+    *to = *from;
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = from->sType;
+    }
+    const void* from_pNext = from;
+    size_t pNext_size = 0u;
+    while (!pNext_size && from_pNext) {
+        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
+        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
+    }
+    to->pNext = nullptr;
+    if (pNext_size) {
+        to->pNext = (void*)alloc->alloc(pNext_size);
+        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
+    }
+}
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void deepcopy_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     Allocator* alloc, VkStructureType rootType,
@@ -8095,54 +8587,6 @@
     }
 }
 
-void deepcopy_VkSubresourceLayout2EXT(Allocator* alloc, VkStructureType rootType,
-                                      const VkSubresourceLayout2EXT* from,
-                                      VkSubresourceLayout2EXT* to) {
-    (void)alloc;
-    (void)rootType;
-    *to = *from;
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = from->sType;
-    }
-    const void* from_pNext = from;
-    size_t pNext_size = 0u;
-    while (!pNext_size && from_pNext) {
-        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
-    }
-    to->pNext = nullptr;
-    if (pNext_size) {
-        to->pNext = (void*)alloc->alloc(pNext_size);
-        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
-    }
-    deepcopy_VkSubresourceLayout(alloc, rootType, &from->subresourceLayout,
-                                 (VkSubresourceLayout*)(&to->subresourceLayout));
-}
-
-void deepcopy_VkImageSubresource2EXT(Allocator* alloc, VkStructureType rootType,
-                                     const VkImageSubresource2EXT* from,
-                                     VkImageSubresource2EXT* to) {
-    (void)alloc;
-    (void)rootType;
-    *to = *from;
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = from->sType;
-    }
-    const void* from_pNext = from;
-    size_t pNext_size = 0u;
-    while (!pNext_size && from_pNext) {
-        from_pNext = static_cast<const vk_struct_common*>(from_pNext)->pNext;
-        pNext_size = goldfish_vk_extension_struct_size(rootType, from_pNext);
-    }
-    to->pNext = nullptr;
-    if (pNext_size) {
-        to->pNext = (void*)alloc->alloc(pNext_size);
-        deepcopy_extension_struct(alloc, rootType, from_pNext, (void*)(to->pNext));
-    }
-    deepcopy_VkImageSubresource(alloc, rootType, &from->imageSubresource,
-                                (VkImageSubresource*)(&to->imageSubresource));
-}
-
 void deepcopy_VkImageCompressionPropertiesEXT(Allocator* alloc, VkStructureType rootType,
                                               const VkImageCompressionPropertiesEXT* from,
                                               VkImageCompressionPropertiesEXT* to) {
@@ -9245,6 +9689,36 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            deepcopy_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                alloc, rootType,
+                reinterpret_cast<const VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension),
+                reinterpret_cast<VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            deepcopy_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                alloc, rootType,
+                reinterpret_cast<const VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension),
+                reinterpret_cast<VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            deepcopy_VkPipelineCreateFlags2CreateInfoKHR(
+                alloc, rootType,
+                reinterpret_cast<const VkPipelineCreateFlags2CreateInfoKHR*>(structExtension),
+                reinterpret_cast<VkPipelineCreateFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            deepcopy_VkBufferUsageFlags2CreateInfoKHR(
+                alloc, rootType,
+                reinterpret_cast<const VkBufferUsageFlags2CreateInfoKHR*>(structExtension),
+                reinterpret_cast<VkBufferUsageFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             deepcopy_VkNativeBufferANDROID(
@@ -9359,6 +9833,37 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            deepcopy_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                alloc, rootType,
+                reinterpret_cast<const VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension),
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            deepcopy_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                alloc, rootType,
+                reinterpret_cast<const VkPhysicalDeviceHostImageCopyPropertiesEXT*>(
+                    structExtension),
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            deepcopy_VkSubresourceHostMemcpySizeEXT(
+                alloc, rootType,
+                reinterpret_cast<const VkSubresourceHostMemcpySizeEXT*>(structExtension),
+                reinterpret_cast<VkSubresourceHostMemcpySizeEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            deepcopy_VkHostImageCopyDevicePerformanceQueryEXT(
+                alloc, rootType,
+                reinterpret_cast<const VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension),
+                reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             deepcopy_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
diff --git a/host/vulkan/cereal/common/goldfish_vk_deepcopy.h b/host/vulkan/cereal/common/goldfish_vk_deepcopy.h
index 51ccb2d..62b7c7a 100644
--- a/host/vulkan/cereal/common/goldfish_vk_deepcopy.h
+++ b/host/vulkan/cereal/common/goldfish_vk_deepcopy.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_deepcopy
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -34,7 +34,7 @@
 
 #include "aemu/base/BumpPool.h"
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 using android::base::Allocator;
 using android::base::BumpPool;
@@ -1600,6 +1600,41 @@
                       deepcopy_VkDeviceImageMemoryRequirementsKHR)
 
 #endif
+#ifdef VK_KHR_maintenance5
+void deepcopy_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    Allocator* alloc, VkStructureType rootType, const VkPhysicalDeviceMaintenance5FeaturesKHR* from,
+    VkPhysicalDeviceMaintenance5FeaturesKHR* to);
+
+void deepcopy_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    Allocator* alloc, VkStructureType rootType,
+    const VkPhysicalDeviceMaintenance5PropertiesKHR* from,
+    VkPhysicalDeviceMaintenance5PropertiesKHR* to);
+
+void deepcopy_VkRenderingAreaInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                     const VkRenderingAreaInfoKHR* from,
+                                     VkRenderingAreaInfoKHR* to);
+
+void deepcopy_VkImageSubresource2KHR(Allocator* alloc, VkStructureType rootType,
+                                     const VkImageSubresource2KHR* from,
+                                     VkImageSubresource2KHR* to);
+
+void deepcopy_VkDeviceImageSubresourceInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                              const VkDeviceImageSubresourceInfoKHR* from,
+                                              VkDeviceImageSubresourceInfoKHR* to);
+
+void deepcopy_VkSubresourceLayout2KHR(Allocator* alloc, VkStructureType rootType,
+                                      const VkSubresourceLayout2KHR* from,
+                                      VkSubresourceLayout2KHR* to);
+
+void deepcopy_VkPipelineCreateFlags2CreateInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                                  const VkPipelineCreateFlags2CreateInfoKHR* from,
+                                                  VkPipelineCreateFlags2CreateInfoKHR* to);
+
+void deepcopy_VkBufferUsageFlags2CreateInfoKHR(Allocator* alloc, VkStructureType rootType,
+                                               const VkBufferUsageFlags2CreateInfoKHR* from,
+                                               VkBufferUsageFlags2CreateInfoKHR* to);
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void deepcopy_VkNativeBufferUsage2ANDROID(Allocator* alloc, VkStructureType rootType,
                                           const VkNativeBufferUsage2ANDROID* from,
@@ -1741,6 +1776,55 @@
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* to);
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void deepcopy_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    Allocator* alloc, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyFeaturesEXT* from,
+    VkPhysicalDeviceHostImageCopyFeaturesEXT* to);
+
+void deepcopy_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    Allocator* alloc, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyPropertiesEXT* from,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* to);
+
+void deepcopy_VkMemoryToImageCopyEXT(Allocator* alloc, VkStructureType rootType,
+                                     const VkMemoryToImageCopyEXT* from,
+                                     VkMemoryToImageCopyEXT* to);
+
+void deepcopy_VkImageToMemoryCopyEXT(Allocator* alloc, VkStructureType rootType,
+                                     const VkImageToMemoryCopyEXT* from,
+                                     VkImageToMemoryCopyEXT* to);
+
+void deepcopy_VkCopyMemoryToImageInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                         const VkCopyMemoryToImageInfoEXT* from,
+                                         VkCopyMemoryToImageInfoEXT* to);
+
+void deepcopy_VkCopyImageToMemoryInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                         const VkCopyImageToMemoryInfoEXT* from,
+                                         VkCopyImageToMemoryInfoEXT* to);
+
+void deepcopy_VkCopyImageToImageInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                        const VkCopyImageToImageInfoEXT* from,
+                                        VkCopyImageToImageInfoEXT* to);
+
+void deepcopy_VkHostImageLayoutTransitionInfoEXT(Allocator* alloc, VkStructureType rootType,
+                                                 const VkHostImageLayoutTransitionInfoEXT* from,
+                                                 VkHostImageLayoutTransitionInfoEXT* to);
+
+void deepcopy_VkSubresourceHostMemcpySizeEXT(Allocator* alloc, VkStructureType rootType,
+                                             const VkSubresourceHostMemcpySizeEXT* from,
+                                             VkSubresourceHostMemcpySizeEXT* to);
+
+void deepcopy_VkHostImageCopyDevicePerformanceQueryEXT(
+    Allocator* alloc, VkStructureType rootType,
+    const VkHostImageCopyDevicePerformanceQueryEXT* from,
+    VkHostImageCopyDevicePerformanceQueryEXT* to);
+
+DEFINE_ALIAS_FUNCTION(deepcopy_VkSubresourceLayout2KHR, deepcopy_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(deepcopy_VkImageSubresource2KHR, deepcopy_VkImageSubresource2EXT)
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void deepcopy_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     Allocator* alloc, VkStructureType rootType,
@@ -1867,14 +1951,6 @@
                                            const VkImageCompressionControlEXT* from,
                                            VkImageCompressionControlEXT* to);
 
-void deepcopy_VkSubresourceLayout2EXT(Allocator* alloc, VkStructureType rootType,
-                                      const VkSubresourceLayout2EXT* from,
-                                      VkSubresourceLayout2EXT* to);
-
-void deepcopy_VkImageSubresource2EXT(Allocator* alloc, VkStructureType rootType,
-                                     const VkImageSubresource2EXT* from,
-                                     VkImageSubresource2EXT* to);
-
 void deepcopy_VkImageCompressionPropertiesEXT(Allocator* alloc, VkStructureType rootType,
                                               const VkImageCompressionPropertiesEXT* from,
                                               VkImageCompressionPropertiesEXT* to);
diff --git a/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp b/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp
index 011d41d..e94cc42 100644
--- a/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_dispatch.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_dispatch
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -135,6 +135,8 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+#endif
 #ifdef VK_ANDROID_native_buffer
 #endif
 #ifdef VK_EXT_transform_feedback
@@ -173,6 +175,8 @@
 #endif
 #ifdef VK_EXT_extended_dynamic_state
 #endif
+#ifdef VK_EXT_host_image_copy
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
@@ -769,6 +773,16 @@
         (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)dlSymFunc(
             lib, "vkGetDeviceImageSparseMemoryRequirementsKHR");
 #endif
+#ifdef VK_KHR_maintenance5
+    out->vkCmdBindIndexBuffer2KHR =
+        (PFN_vkCmdBindIndexBuffer2KHR)dlSymFunc(lib, "vkCmdBindIndexBuffer2KHR");
+    out->vkGetRenderingAreaGranularityKHR =
+        (PFN_vkGetRenderingAreaGranularityKHR)dlSymFunc(lib, "vkGetRenderingAreaGranularityKHR");
+    out->vkGetDeviceImageSubresourceLayoutKHR = (PFN_vkGetDeviceImageSubresourceLayoutKHR)dlSymFunc(
+        lib, "vkGetDeviceImageSubresourceLayoutKHR");
+    out->vkGetImageSubresourceLayout2KHR =
+        (PFN_vkGetImageSubresourceLayout2KHR)dlSymFunc(lib, "vkGetImageSubresourceLayout2KHR");
+#endif
 #ifdef VK_ANDROID_native_buffer
     out->vkGetSwapchainGrallocUsageANDROID =
         (PFN_vkGetSwapchainGrallocUsageANDROID)dlSymFunc(lib, "vkGetSwapchainGrallocUsageANDROID");
@@ -841,6 +855,17 @@
         (PFN_vkCmdSetStencilTestEnableEXT)dlSymFunc(lib, "vkCmdSetStencilTestEnableEXT");
     out->vkCmdSetStencilOpEXT = (PFN_vkCmdSetStencilOpEXT)dlSymFunc(lib, "vkCmdSetStencilOpEXT");
 #endif
+#ifdef VK_EXT_host_image_copy
+    out->vkCopyMemoryToImageEXT =
+        (PFN_vkCopyMemoryToImageEXT)dlSymFunc(lib, "vkCopyMemoryToImageEXT");
+    out->vkCopyImageToMemoryEXT =
+        (PFN_vkCopyImageToMemoryEXT)dlSymFunc(lib, "vkCopyImageToMemoryEXT");
+    out->vkCopyImageToImageEXT = (PFN_vkCopyImageToImageEXT)dlSymFunc(lib, "vkCopyImageToImageEXT");
+    out->vkTransitionImageLayoutEXT =
+        (PFN_vkTransitionImageLayoutEXT)dlSymFunc(lib, "vkTransitionImageLayoutEXT");
+    out->vkGetImageSubresourceLayout2EXT =
+        (PFN_vkGetImageSubresourceLayout2EXT)dlSymFunc(lib, "vkGetImageSubresourceLayout2EXT");
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
     out->vkReleaseSwapchainImagesEXT =
         (PFN_vkReleaseSwapchainImagesEXT)dlSymFunc(lib, "vkReleaseSwapchainImagesEXT");
@@ -853,10 +878,6 @@
     out->vkSetPrivateDataEXT = (PFN_vkSetPrivateDataEXT)dlSymFunc(lib, "vkSetPrivateDataEXT");
     out->vkGetPrivateDataEXT = (PFN_vkGetPrivateDataEXT)dlSymFunc(lib, "vkGetPrivateDataEXT");
 #endif
-#ifdef VK_EXT_image_compression_control
-    out->vkGetImageSubresourceLayout2EXT =
-        (PFN_vkGetImageSubresourceLayout2EXT)dlSymFunc(lib, "vkGetImageSubresourceLayout2EXT");
-#endif
 #ifdef VK_EXT_extended_dynamic_state2
     out->vkCmdSetPatchControlPointsEXT =
         (PFN_vkCmdSetPatchControlPointsEXT)dlSymFunc(lib, "vkCmdSetPatchControlPointsEXT");
@@ -1654,6 +1675,19 @@
         (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)vk->vkGetInstanceProcAddr(
             instance, "vkGetDeviceImageSparseMemoryRequirementsKHR");
 #endif
+#ifdef VK_KHR_maintenance5
+    out->vkCmdBindIndexBuffer2KHR = (PFN_vkCmdBindIndexBuffer2KHR)vk->vkGetInstanceProcAddr(
+        instance, "vkCmdBindIndexBuffer2KHR");
+    out->vkGetRenderingAreaGranularityKHR =
+        (PFN_vkGetRenderingAreaGranularityKHR)vk->vkGetInstanceProcAddr(
+            instance, "vkGetRenderingAreaGranularityKHR");
+    out->vkGetDeviceImageSubresourceLayoutKHR =
+        (PFN_vkGetDeviceImageSubresourceLayoutKHR)vk->vkGetInstanceProcAddr(
+            instance, "vkGetDeviceImageSubresourceLayoutKHR");
+    out->vkGetImageSubresourceLayout2KHR =
+        (PFN_vkGetImageSubresourceLayout2KHR)vk->vkGetInstanceProcAddr(
+            instance, "vkGetImageSubresourceLayout2KHR");
+#endif
 #ifdef VK_ANDROID_native_buffer
     out->vkGetSwapchainGrallocUsageANDROID =
         (PFN_vkGetSwapchainGrallocUsageANDROID)vk->vkGetInstanceProcAddr(
@@ -1741,6 +1775,19 @@
     out->vkCmdSetStencilOpEXT =
         (PFN_vkCmdSetStencilOpEXT)vk->vkGetInstanceProcAddr(instance, "vkCmdSetStencilOpEXT");
 #endif
+#ifdef VK_EXT_host_image_copy
+    out->vkCopyMemoryToImageEXT =
+        (PFN_vkCopyMemoryToImageEXT)vk->vkGetInstanceProcAddr(instance, "vkCopyMemoryToImageEXT");
+    out->vkCopyImageToMemoryEXT =
+        (PFN_vkCopyImageToMemoryEXT)vk->vkGetInstanceProcAddr(instance, "vkCopyImageToMemoryEXT");
+    out->vkCopyImageToImageEXT =
+        (PFN_vkCopyImageToImageEXT)vk->vkGetInstanceProcAddr(instance, "vkCopyImageToImageEXT");
+    out->vkTransitionImageLayoutEXT = (PFN_vkTransitionImageLayoutEXT)vk->vkGetInstanceProcAddr(
+        instance, "vkTransitionImageLayoutEXT");
+    out->vkGetImageSubresourceLayout2EXT =
+        (PFN_vkGetImageSubresourceLayout2EXT)vk->vkGetInstanceProcAddr(
+            instance, "vkGetImageSubresourceLayout2EXT");
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
     out->vkReleaseSwapchainImagesEXT = (PFN_vkReleaseSwapchainImagesEXT)vk->vkGetInstanceProcAddr(
         instance, "vkReleaseSwapchainImagesEXT");
@@ -1755,11 +1802,6 @@
     out->vkGetPrivateDataEXT =
         (PFN_vkGetPrivateDataEXT)vk->vkGetInstanceProcAddr(instance, "vkGetPrivateDataEXT");
 #endif
-#ifdef VK_EXT_image_compression_control
-    out->vkGetImageSubresourceLayout2EXT =
-        (PFN_vkGetImageSubresourceLayout2EXT)vk->vkGetInstanceProcAddr(
-            instance, "vkGetImageSubresourceLayout2EXT");
-#endif
 #ifdef VK_EXT_extended_dynamic_state2
     out->vkCmdSetPatchControlPointsEXT =
         (PFN_vkCmdSetPatchControlPointsEXT)vk->vkGetInstanceProcAddr(
@@ -2553,6 +2595,19 @@
         (PFN_vkGetDeviceImageSparseMemoryRequirementsKHR)vk->vkGetDeviceProcAddr(
             device, "vkGetDeviceImageSparseMemoryRequirementsKHR");
 #endif
+#ifdef VK_KHR_maintenance5
+    out->vkCmdBindIndexBuffer2KHR =
+        (PFN_vkCmdBindIndexBuffer2KHR)vk->vkGetDeviceProcAddr(device, "vkCmdBindIndexBuffer2KHR");
+    out->vkGetRenderingAreaGranularityKHR =
+        (PFN_vkGetRenderingAreaGranularityKHR)vk->vkGetDeviceProcAddr(
+            device, "vkGetRenderingAreaGranularityKHR");
+    out->vkGetDeviceImageSubresourceLayoutKHR =
+        (PFN_vkGetDeviceImageSubresourceLayoutKHR)vk->vkGetDeviceProcAddr(
+            device, "vkGetDeviceImageSubresourceLayoutKHR");
+    out->vkGetImageSubresourceLayout2KHR =
+        (PFN_vkGetImageSubresourceLayout2KHR)vk->vkGetDeviceProcAddr(
+            device, "vkGetImageSubresourceLayout2KHR");
+#endif
 #ifdef VK_ANDROID_native_buffer
     out->vkGetSwapchainGrallocUsageANDROID =
         (PFN_vkGetSwapchainGrallocUsageANDROID)vk->vkGetDeviceProcAddr(
@@ -2638,6 +2693,19 @@
     out->vkCmdSetStencilOpEXT =
         (PFN_vkCmdSetStencilOpEXT)vk->vkGetDeviceProcAddr(device, "vkCmdSetStencilOpEXT");
 #endif
+#ifdef VK_EXT_host_image_copy
+    out->vkCopyMemoryToImageEXT =
+        (PFN_vkCopyMemoryToImageEXT)vk->vkGetDeviceProcAddr(device, "vkCopyMemoryToImageEXT");
+    out->vkCopyImageToMemoryEXT =
+        (PFN_vkCopyImageToMemoryEXT)vk->vkGetDeviceProcAddr(device, "vkCopyImageToMemoryEXT");
+    out->vkCopyImageToImageEXT =
+        (PFN_vkCopyImageToImageEXT)vk->vkGetDeviceProcAddr(device, "vkCopyImageToImageEXT");
+    out->vkTransitionImageLayoutEXT = (PFN_vkTransitionImageLayoutEXT)vk->vkGetDeviceProcAddr(
+        device, "vkTransitionImageLayoutEXT");
+    out->vkGetImageSubresourceLayout2EXT =
+        (PFN_vkGetImageSubresourceLayout2EXT)vk->vkGetDeviceProcAddr(
+            device, "vkGetImageSubresourceLayout2EXT");
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
     out->vkReleaseSwapchainImagesEXT = (PFN_vkReleaseSwapchainImagesEXT)vk->vkGetDeviceProcAddr(
         device, "vkReleaseSwapchainImagesEXT");
@@ -2652,11 +2720,6 @@
     out->vkGetPrivateDataEXT =
         (PFN_vkGetPrivateDataEXT)vk->vkGetDeviceProcAddr(device, "vkGetPrivateDataEXT");
 #endif
-#ifdef VK_EXT_image_compression_control
-    out->vkGetImageSubresourceLayout2EXT =
-        (PFN_vkGetImageSubresourceLayout2EXT)vk->vkGetDeviceProcAddr(
-            device, "vkGetImageSubresourceLayout2EXT");
-#endif
 #ifdef VK_EXT_extended_dynamic_state2
     out->vkCmdSetPatchControlPointsEXT = (PFN_vkCmdSetPatchControlPointsEXT)vk->vkGetDeviceProcAddr(
         device, "vkCmdSetPatchControlPointsEXT");
diff --git a/host/vulkan/cereal/common/goldfish_vk_dispatch.h b/host/vulkan/cereal/common/goldfish_vk_dispatch.h
index 516bbd7..3865e42 100644
--- a/host/vulkan/cereal/common/goldfish_vk_dispatch.h
+++ b/host/vulkan/cereal/common/goldfish_vk_dispatch.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_dispatch
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -33,7 +33,7 @@
 #include <vulkan/vulkan.h>
 
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 namespace gfxstream {
 namespace vk {
@@ -464,6 +464,12 @@
     PFN_vkGetDeviceImageMemoryRequirementsKHR vkGetDeviceImageMemoryRequirementsKHR;
     PFN_vkGetDeviceImageSparseMemoryRequirementsKHR vkGetDeviceImageSparseMemoryRequirementsKHR;
 #endif
+#ifdef VK_KHR_maintenance5
+    PFN_vkCmdBindIndexBuffer2KHR vkCmdBindIndexBuffer2KHR;
+    PFN_vkGetRenderingAreaGranularityKHR vkGetRenderingAreaGranularityKHR;
+    PFN_vkGetDeviceImageSubresourceLayoutKHR vkGetDeviceImageSubresourceLayoutKHR;
+    PFN_vkGetImageSubresourceLayout2KHR vkGetImageSubresourceLayout2KHR;
+#endif
 #ifdef VK_ANDROID_native_buffer
     PFN_vkGetSwapchainGrallocUsageANDROID vkGetSwapchainGrallocUsageANDROID;
     PFN_vkAcquireImageANDROID vkAcquireImageANDROID;
@@ -538,6 +544,13 @@
     PFN_vkCmdSetStencilTestEnableEXT vkCmdSetStencilTestEnableEXT;
     PFN_vkCmdSetStencilOpEXT vkCmdSetStencilOpEXT;
 #endif
+#ifdef VK_EXT_host_image_copy
+    PFN_vkCopyMemoryToImageEXT vkCopyMemoryToImageEXT;
+    PFN_vkCopyImageToMemoryEXT vkCopyImageToMemoryEXT;
+    PFN_vkCopyImageToImageEXT vkCopyImageToImageEXT;
+    PFN_vkTransitionImageLayoutEXT vkTransitionImageLayoutEXT;
+    PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT;
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
     PFN_vkReleaseSwapchainImagesEXT vkReleaseSwapchainImagesEXT;
 #endif
@@ -564,7 +577,6 @@
 #ifdef VK_EXT_image_robustness
 #endif
 #ifdef VK_EXT_image_compression_control
-    PFN_vkGetImageSubresourceLayout2EXT vkGetImageSubresourceLayout2EXT;
 #endif
 #ifdef VK_EXT_4444_formats
 #endif
diff --git a/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp b/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp
index d2f2559..758d350 100644
--- a/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_extension_structs.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_extension_structs
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -130,6 +130,8 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+#endif
 #ifdef VK_ANDROID_native_buffer
 #endif
 #ifdef VK_EXT_transform_feedback
@@ -168,6 +170,8 @@
 #endif
 #ifdef VK_EXT_extended_dynamic_state
 #endif
+#ifdef VK_EXT_host_image_copy
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
@@ -585,6 +589,20 @@
             return sizeof(VkQueueFamilyCheckpointProperties2NV);
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            return sizeof(VkPhysicalDeviceMaintenance5FeaturesKHR);
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            return sizeof(VkPhysicalDeviceMaintenance5PropertiesKHR);
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            return sizeof(VkPipelineCreateFlags2CreateInfoKHR);
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            return sizeof(VkBufferUsageFlags2CreateInfoKHR);
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             return sizeof(VkNativeBufferANDROID);
@@ -633,6 +651,20 @@
             return sizeof(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT);
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            return sizeof(VkPhysicalDeviceHostImageCopyFeaturesEXT);
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            return sizeof(VkPhysicalDeviceHostImageCopyPropertiesEXT);
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            return sizeof(VkSubresourceHostMemcpySizeEXT);
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            return sizeof(VkHostImageCopyDevicePerformanceQueryEXT);
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             return sizeof(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT);
@@ -1122,6 +1154,20 @@
             return sizeof(VkQueueFamilyCheckpointProperties2NV);
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            return sizeof(VkPhysicalDeviceMaintenance5FeaturesKHR);
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            return sizeof(VkPhysicalDeviceMaintenance5PropertiesKHR);
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            return sizeof(VkPipelineCreateFlags2CreateInfoKHR);
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            return sizeof(VkBufferUsageFlags2CreateInfoKHR);
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             return sizeof(VkNativeBufferANDROID);
@@ -1170,6 +1216,20 @@
             return sizeof(VkPhysicalDeviceExtendedDynamicStateFeaturesEXT);
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            return sizeof(VkPhysicalDeviceHostImageCopyFeaturesEXT);
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            return sizeof(VkPhysicalDeviceHostImageCopyPropertiesEXT);
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            return sizeof(VkSubresourceHostMemcpySizeEXT);
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            return sizeof(VkHostImageCopyDevicePerformanceQueryEXT);
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             return sizeof(VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT);
diff --git a/host/vulkan/cereal/common/goldfish_vk_extension_structs.h b/host/vulkan/cereal/common/goldfish_vk_extension_structs.h
index 72bfb7b..ff2aa18 100644
--- a/host/vulkan/cereal/common/goldfish_vk_extension_structs.h
+++ b/host/vulkan/cereal/common/goldfish_vk_extension_structs.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_extension_structs
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -33,7 +33,7 @@
 #include <vulkan/vulkan.h>
 
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace gfxstream {
@@ -143,6 +143,8 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+#endif
 #ifdef VK_ANDROID_native_buffer
 #endif
 #ifdef VK_EXT_transform_feedback
@@ -181,6 +183,8 @@
 #endif
 #ifdef VK_EXT_extended_dynamic_state
 #endif
+#ifdef VK_EXT_host_image_copy
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 #endif
 #ifdef VK_EXT_shader_demote_to_helper_invocation
diff --git a/host/vulkan/cereal/common/goldfish_vk_handlemap.cpp b/host/vulkan/cereal/common/goldfish_vk_handlemap.cpp
index 5e68477..e8be9c4 100644
--- a/host/vulkan/cereal/common/goldfish_vk_handlemap.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_handlemap.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_handlemap
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -3386,6 +3386,88 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+void handlemap_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceMaintenance5FeaturesKHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceMaintenance5PropertiesKHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkRenderingAreaInfoKHR(VulkanHandleMapping* handlemap,
+                                      VkRenderingAreaInfoKHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkImageSubresource2KHR(VulkanHandleMapping* handlemap,
+                                      VkImageSubresource2KHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap_VkImageSubresource(handlemap, (VkImageSubresource*)(&toMap->imageSubresource));
+}
+
+void handlemap_VkDeviceImageSubresourceInfoKHR(VulkanHandleMapping* handlemap,
+                                               VkDeviceImageSubresourceInfoKHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    if (toMap->pCreateInfo) {
+        handlemap_VkImageCreateInfo(handlemap, (VkImageCreateInfo*)(toMap->pCreateInfo));
+    }
+    if (toMap->pSubresource) {
+        handlemap_VkImageSubresource2KHR(handlemap, (VkImageSubresource2KHR*)(toMap->pSubresource));
+    }
+}
+
+void handlemap_VkSubresourceLayout2KHR(VulkanHandleMapping* handlemap,
+                                       VkSubresourceLayout2KHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap_VkSubresourceLayout(handlemap, (VkSubresourceLayout*)(&toMap->subresourceLayout));
+}
+
+void handlemap_VkPipelineCreateFlags2CreateInfoKHR(VulkanHandleMapping* handlemap,
+                                                   VkPipelineCreateFlags2CreateInfoKHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkBufferUsageFlags2CreateInfoKHR(VulkanHandleMapping* handlemap,
+                                                VkBufferUsageFlags2CreateInfoKHR* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void handlemap_VkNativeBufferUsage2ANDROID(VulkanHandleMapping* handlemap,
                                            VkNativeBufferUsage2ANDROID* toMap) {
@@ -3558,6 +3640,136 @@
 }
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void handlemap_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceHostImageCopyFeaturesEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceHostImageCopyPropertiesEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkMemoryToImageCopyEXT(VulkanHandleMapping* handlemap,
+                                      VkMemoryToImageCopyEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap_VkImageSubresourceLayers(handlemap,
+                                       (VkImageSubresourceLayers*)(&toMap->imageSubresource));
+    handlemap_VkOffset3D(handlemap, (VkOffset3D*)(&toMap->imageOffset));
+    handlemap_VkExtent3D(handlemap, (VkExtent3D*)(&toMap->imageExtent));
+}
+
+void handlemap_VkImageToMemoryCopyEXT(VulkanHandleMapping* handlemap,
+                                      VkImageToMemoryCopyEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap_VkImageSubresourceLayers(handlemap,
+                                       (VkImageSubresourceLayers*)(&toMap->imageSubresource));
+    handlemap_VkOffset3D(handlemap, (VkOffset3D*)(&toMap->imageOffset));
+    handlemap_VkExtent3D(handlemap, (VkExtent3D*)(&toMap->imageExtent));
+}
+
+void handlemap_VkCopyMemoryToImageInfoEXT(VulkanHandleMapping* handlemap,
+                                          VkCopyMemoryToImageInfoEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap->mapHandles_VkImage((VkImage*)&toMap->dstImage);
+    if (toMap) {
+        if (toMap->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toMap->regionCount; ++i) {
+                handlemap_VkMemoryToImageCopyEXT(handlemap,
+                                                 (VkMemoryToImageCopyEXT*)(toMap->pRegions + i));
+            }
+        }
+    }
+}
+
+void handlemap_VkCopyImageToMemoryInfoEXT(VulkanHandleMapping* handlemap,
+                                          VkCopyImageToMemoryInfoEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap->mapHandles_VkImage((VkImage*)&toMap->srcImage);
+    if (toMap) {
+        if (toMap->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toMap->regionCount; ++i) {
+                handlemap_VkImageToMemoryCopyEXT(handlemap,
+                                                 (VkImageToMemoryCopyEXT*)(toMap->pRegions + i));
+            }
+        }
+    }
+}
+
+void handlemap_VkCopyImageToImageInfoEXT(VulkanHandleMapping* handlemap,
+                                         VkCopyImageToImageInfoEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap->mapHandles_VkImage((VkImage*)&toMap->srcImage);
+    handlemap->mapHandles_VkImage((VkImage*)&toMap->dstImage);
+    if (toMap) {
+        if (toMap->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toMap->regionCount; ++i) {
+                handlemap_VkImageCopy2(handlemap, (VkImageCopy2*)(toMap->pRegions + i));
+            }
+        }
+    }
+}
+
+void handlemap_VkHostImageLayoutTransitionInfoEXT(VulkanHandleMapping* handlemap,
+                                                  VkHostImageLayoutTransitionInfoEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+    handlemap->mapHandles_VkImage((VkImage*)&toMap->image);
+    handlemap_VkImageSubresourceRange(handlemap,
+                                      (VkImageSubresourceRange*)(&toMap->subresourceRange));
+}
+
+void handlemap_VkSubresourceHostMemcpySizeEXT(VulkanHandleMapping* handlemap,
+                                              VkSubresourceHostMemcpySizeEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+void handlemap_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanHandleMapping* handlemap, VkHostImageCopyDevicePerformanceQueryEXT* toMap) {
+    (void)handlemap;
+    (void)toMap;
+    if (toMap->pNext) {
+        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
+    }
+}
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void handlemap_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VulkanHandleMapping* handlemap, VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT* toMap) {
@@ -3755,26 +3967,6 @@
     }
 }
 
-void handlemap_VkSubresourceLayout2EXT(VulkanHandleMapping* handlemap,
-                                       VkSubresourceLayout2EXT* toMap) {
-    (void)handlemap;
-    (void)toMap;
-    if (toMap->pNext) {
-        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
-    }
-    handlemap_VkSubresourceLayout(handlemap, (VkSubresourceLayout*)(&toMap->subresourceLayout));
-}
-
-void handlemap_VkImageSubresource2EXT(VulkanHandleMapping* handlemap,
-                                      VkImageSubresource2EXT* toMap) {
-    (void)handlemap;
-    (void)toMap;
-    if (toMap->pNext) {
-        handlemap_extension_struct(handlemap, (void*)(toMap->pNext));
-    }
-    handlemap_VkImageSubresource(handlemap, (VkImageSubresource*)(&toMap->imageSubresource));
-}
-
 void handlemap_VkImageCompressionPropertiesEXT(VulkanHandleMapping* handlemap,
                                                VkImageCompressionPropertiesEXT* toMap) {
     (void)handlemap;
@@ -4562,6 +4754,32 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            handlemap_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                handlemap,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            handlemap_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                handlemap,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            handlemap_VkPipelineCreateFlags2CreateInfoKHR(
+                handlemap,
+                reinterpret_cast<VkPipelineCreateFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            handlemap_VkBufferUsageFlags2CreateInfoKHR(
+                handlemap,
+                reinterpret_cast<VkBufferUsageFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             handlemap_VkNativeBufferANDROID(
@@ -4646,6 +4864,31 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            handlemap_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                handlemap,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            handlemap_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                handlemap,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            handlemap_VkSubresourceHostMemcpySizeEXT(
+                handlemap, reinterpret_cast<VkSubresourceHostMemcpySizeEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            handlemap_VkHostImageCopyDevicePerformanceQueryEXT(
+                handlemap,
+                reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             handlemap_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
diff --git a/host/vulkan/cereal/common/goldfish_vk_handlemap.h b/host/vulkan/cereal/common/goldfish_vk_handlemap.h
index bf82449..6421d20 100644
--- a/host/vulkan/cereal/common/goldfish_vk_handlemap.h
+++ b/host/vulkan/cereal/common/goldfish_vk_handlemap.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_handlemap
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -34,7 +34,7 @@
 
 #include "VulkanHandleMapping.h"
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace gfxstream {
@@ -1245,6 +1245,32 @@
                       handlemap_VkDeviceImageMemoryRequirementsKHR)
 
 #endif
+#ifdef VK_KHR_maintenance5
+void handlemap_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceMaintenance5FeaturesKHR* toMap);
+
+void handlemap_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceMaintenance5PropertiesKHR* toMap);
+
+void handlemap_VkRenderingAreaInfoKHR(VulkanHandleMapping* handlemap,
+                                      VkRenderingAreaInfoKHR* toMap);
+
+void handlemap_VkImageSubresource2KHR(VulkanHandleMapping* handlemap,
+                                      VkImageSubresource2KHR* toMap);
+
+void handlemap_VkDeviceImageSubresourceInfoKHR(VulkanHandleMapping* handlemap,
+                                               VkDeviceImageSubresourceInfoKHR* toMap);
+
+void handlemap_VkSubresourceLayout2KHR(VulkanHandleMapping* handlemap,
+                                       VkSubresourceLayout2KHR* toMap);
+
+void handlemap_VkPipelineCreateFlags2CreateInfoKHR(VulkanHandleMapping* handlemap,
+                                                   VkPipelineCreateFlags2CreateInfoKHR* toMap);
+
+void handlemap_VkBufferUsageFlags2CreateInfoKHR(VulkanHandleMapping* handlemap,
+                                                VkBufferUsageFlags2CreateInfoKHR* toMap);
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void handlemap_VkNativeBufferUsage2ANDROID(VulkanHandleMapping* handlemap,
                                            VkNativeBufferUsage2ANDROID* toMap);
@@ -1360,6 +1386,42 @@
     VulkanHandleMapping* handlemap, VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* toMap);
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void handlemap_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceHostImageCopyFeaturesEXT* toMap);
+
+void handlemap_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanHandleMapping* handlemap, VkPhysicalDeviceHostImageCopyPropertiesEXT* toMap);
+
+void handlemap_VkMemoryToImageCopyEXT(VulkanHandleMapping* handlemap,
+                                      VkMemoryToImageCopyEXT* toMap);
+
+void handlemap_VkImageToMemoryCopyEXT(VulkanHandleMapping* handlemap,
+                                      VkImageToMemoryCopyEXT* toMap);
+
+void handlemap_VkCopyMemoryToImageInfoEXT(VulkanHandleMapping* handlemap,
+                                          VkCopyMemoryToImageInfoEXT* toMap);
+
+void handlemap_VkCopyImageToMemoryInfoEXT(VulkanHandleMapping* handlemap,
+                                          VkCopyImageToMemoryInfoEXT* toMap);
+
+void handlemap_VkCopyImageToImageInfoEXT(VulkanHandleMapping* handlemap,
+                                         VkCopyImageToImageInfoEXT* toMap);
+
+void handlemap_VkHostImageLayoutTransitionInfoEXT(VulkanHandleMapping* handlemap,
+                                                  VkHostImageLayoutTransitionInfoEXT* toMap);
+
+void handlemap_VkSubresourceHostMemcpySizeEXT(VulkanHandleMapping* handlemap,
+                                              VkSubresourceHostMemcpySizeEXT* toMap);
+
+void handlemap_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanHandleMapping* handlemap, VkHostImageCopyDevicePerformanceQueryEXT* toMap);
+
+DEFINE_ALIAS_FUNCTION(handlemap_VkSubresourceLayout2KHR, handlemap_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(handlemap_VkImageSubresource2KHR, handlemap_VkImageSubresource2EXT)
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void handlemap_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VulkanHandleMapping* handlemap, VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT* toMap);
@@ -1459,12 +1521,6 @@
 void handlemap_VkImageCompressionControlEXT(VulkanHandleMapping* handlemap,
                                             VkImageCompressionControlEXT* toMap);
 
-void handlemap_VkSubresourceLayout2EXT(VulkanHandleMapping* handlemap,
-                                       VkSubresourceLayout2EXT* toMap);
-
-void handlemap_VkImageSubresource2EXT(VulkanHandleMapping* handlemap,
-                                      VkImageSubresource2EXT* toMap);
-
 void handlemap_VkImageCompressionPropertiesEXT(VulkanHandleMapping* handlemap,
                                                VkImageCompressionPropertiesEXT* toMap);
 
diff --git a/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp b/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp
index f0cefba..734b309 100644
--- a/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_marshaling.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_marshaling
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -14803,6 +14803,341 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+void marshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceMaintenance5FeaturesKHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkBool32*)&forMarshaling->maintenance5, sizeof(VkBool32));
+}
+
+void unmarshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5FeaturesKHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkBool32*)&forUnmarshaling->maintenance5, sizeof(VkBool32));
+}
+
+void marshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceMaintenance5PropertiesKHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkBool32*)&forMarshaling->earlyFragmentMultisampleCoverageAfterSampleCounting,
+                    sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->earlyFragmentSampleMaskTestBeforeSampleCounting,
+                    sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->depthStencilSwizzleOneSupport, sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->polygonModePointSize, sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->nonStrictSinglePixelWideLinesUseParallelogram,
+                    sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->nonStrictWideLinesUseParallelogram,
+                    sizeof(VkBool32));
+}
+
+void unmarshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5PropertiesKHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkBool32*)&forUnmarshaling->earlyFragmentMultisampleCoverageAfterSampleCounting,
+                   sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->earlyFragmentSampleMaskTestBeforeSampleCounting,
+                   sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->depthStencilSwizzleOneSupport, sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->polygonModePointSize, sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->nonStrictSinglePixelWideLinesUseParallelogram,
+                   sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->nonStrictWideLinesUseParallelogram,
+                   sizeof(VkBool32));
+}
+
+void marshal_VkRenderingAreaInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkRenderingAreaInfoKHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((uint32_t*)&forMarshaling->viewMask, sizeof(uint32_t));
+    vkStream->write((uint32_t*)&forMarshaling->colorAttachmentCount, sizeof(uint32_t));
+    // WARNING PTR CHECK
+    uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pColorAttachmentFormats;
+    vkStream->putBe64(cgen_var_0);
+    if (forMarshaling->pColorAttachmentFormats) {
+        vkStream->write((const VkFormat*)forMarshaling->pColorAttachmentFormats,
+                        forMarshaling->colorAttachmentCount * sizeof(const VkFormat));
+    }
+    vkStream->write((VkFormat*)&forMarshaling->depthAttachmentFormat, sizeof(VkFormat));
+    vkStream->write((VkFormat*)&forMarshaling->stencilAttachmentFormat, sizeof(VkFormat));
+}
+
+void unmarshal_VkRenderingAreaInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkRenderingAreaInfoKHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((uint32_t*)&forUnmarshaling->viewMask, sizeof(uint32_t));
+    vkStream->read((uint32_t*)&forUnmarshaling->colorAttachmentCount, sizeof(uint32_t));
+    // WARNING PTR CHECK
+    forUnmarshaling->pColorAttachmentFormats = (const VkFormat*)(uintptr_t)vkStream->getBe64();
+    if (forUnmarshaling->pColorAttachmentFormats) {
+        vkStream->alloc((void**)&forUnmarshaling->pColorAttachmentFormats,
+                        forUnmarshaling->colorAttachmentCount * sizeof(const VkFormat));
+        vkStream->read((VkFormat*)forUnmarshaling->pColorAttachmentFormats,
+                       forUnmarshaling->colorAttachmentCount * sizeof(const VkFormat));
+    }
+    vkStream->read((VkFormat*)&forUnmarshaling->depthAttachmentFormat, sizeof(VkFormat));
+    vkStream->read((VkFormat*)&forUnmarshaling->stencilAttachmentFormat, sizeof(VkFormat));
+}
+
+void marshal_VkImageSubresource2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkImageSubresource2KHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkImageSubresource(vkStream, rootType,
+                               (VkImageSubresource*)(&forMarshaling->imageSubresource));
+}
+
+void unmarshal_VkImageSubresource2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkImageSubresource2KHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    unmarshal_VkImageSubresource(vkStream, rootType,
+                                 (VkImageSubresource*)(&forUnmarshaling->imageSubresource));
+}
+
+void marshal_VkDeviceImageSubresourceInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                             const VkDeviceImageSubresourceInfoKHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkImageCreateInfo(vkStream, rootType,
+                              (const VkImageCreateInfo*)(forMarshaling->pCreateInfo));
+    marshal_VkImageSubresource2KHR(vkStream, rootType,
+                                   (const VkImageSubresource2KHR*)(forMarshaling->pSubresource));
+}
+
+void unmarshal_VkDeviceImageSubresourceInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                               VkDeviceImageSubresourceInfoKHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->alloc((void**)&forUnmarshaling->pCreateInfo, sizeof(const VkImageCreateInfo));
+    unmarshal_VkImageCreateInfo(vkStream, rootType,
+                                (VkImageCreateInfo*)(forUnmarshaling->pCreateInfo));
+    vkStream->alloc((void**)&forUnmarshaling->pSubresource, sizeof(const VkImageSubresource2KHR));
+    unmarshal_VkImageSubresource2KHR(vkStream, rootType,
+                                     (VkImageSubresource2KHR*)(forUnmarshaling->pSubresource));
+}
+
+void marshal_VkSubresourceLayout2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                     const VkSubresourceLayout2KHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    marshal_VkSubresourceLayout(vkStream, rootType,
+                                (VkSubresourceLayout*)(&forMarshaling->subresourceLayout));
+}
+
+void unmarshal_VkSubresourceLayout2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                       VkSubresourceLayout2KHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    unmarshal_VkSubresourceLayout(vkStream, rootType,
+                                  (VkSubresourceLayout*)(&forUnmarshaling->subresourceLayout));
+}
+
+void marshal_VkPipelineCreateFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPipelineCreateFlags2CreateInfoKHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkPipelineCreateFlags2KHR*)&forMarshaling->flags,
+                    sizeof(VkPipelineCreateFlags2KHR));
+}
+
+void unmarshal_VkPipelineCreateFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPipelineCreateFlags2CreateInfoKHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkPipelineCreateFlags2KHR*)&forUnmarshaling->flags,
+                   sizeof(VkPipelineCreateFlags2KHR));
+}
+
+void marshal_VkBufferUsageFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkBufferUsageFlags2CreateInfoKHR* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkBufferUsageFlags2KHR*)&forMarshaling->usage, sizeof(VkBufferUsageFlags2KHR));
+}
+
+void unmarshal_VkBufferUsageFlags2CreateInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                                VkBufferUsageFlags2CreateInfoKHR* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkBufferUsageFlags2KHR*)&forUnmarshaling->usage,
+                   sizeof(VkBufferUsageFlags2KHR));
+}
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void marshal_VkNativeBufferUsage2ANDROID(VulkanStream* vkStream, VkStructureType rootType,
                                          const VkNativeBufferUsage2ANDROID* forMarshaling) {
@@ -15444,6 +15779,525 @@
 }
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void marshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyFeaturesEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkBool32*)&forMarshaling->hostImageCopy, sizeof(VkBool32));
+}
+
+void unmarshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyFeaturesEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkBool32*)&forUnmarshaling->hostImageCopy, sizeof(VkBool32));
+}
+
+void marshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyPropertiesEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((uint32_t*)&forMarshaling->copySrcLayoutCount, sizeof(uint32_t));
+    // WARNING PTR CHECK
+    uint64_t cgen_var_0 = (uint64_t)(uintptr_t)forMarshaling->pCopySrcLayouts;
+    vkStream->putBe64(cgen_var_0);
+    if (forMarshaling->pCopySrcLayouts) {
+        vkStream->write((VkImageLayout*)forMarshaling->pCopySrcLayouts,
+                        forMarshaling->copySrcLayoutCount * sizeof(VkImageLayout));
+    }
+    vkStream->write((uint32_t*)&forMarshaling->copyDstLayoutCount, sizeof(uint32_t));
+    // WARNING PTR CHECK
+    uint64_t cgen_var_1 = (uint64_t)(uintptr_t)forMarshaling->pCopyDstLayouts;
+    vkStream->putBe64(cgen_var_1);
+    if (forMarshaling->pCopyDstLayouts) {
+        vkStream->write((VkImageLayout*)forMarshaling->pCopyDstLayouts,
+                        forMarshaling->copyDstLayoutCount * sizeof(VkImageLayout));
+    }
+    vkStream->write((uint8_t*)forMarshaling->optimalTilingLayoutUUID,
+                    VK_UUID_SIZE * sizeof(uint8_t));
+    vkStream->write((VkBool32*)&forMarshaling->identicalMemoryTypeRequirements, sizeof(VkBool32));
+}
+
+void unmarshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((uint32_t*)&forUnmarshaling->copySrcLayoutCount, sizeof(uint32_t));
+    // WARNING PTR CHECK
+    forUnmarshaling->pCopySrcLayouts = (VkImageLayout*)(uintptr_t)vkStream->getBe64();
+    if (forUnmarshaling->pCopySrcLayouts) {
+        vkStream->alloc((void**)&forUnmarshaling->pCopySrcLayouts,
+                        forUnmarshaling->copySrcLayoutCount * sizeof(VkImageLayout));
+        vkStream->read((VkImageLayout*)forUnmarshaling->pCopySrcLayouts,
+                       forUnmarshaling->copySrcLayoutCount * sizeof(VkImageLayout));
+    }
+    vkStream->read((uint32_t*)&forUnmarshaling->copyDstLayoutCount, sizeof(uint32_t));
+    // WARNING PTR CHECK
+    forUnmarshaling->pCopyDstLayouts = (VkImageLayout*)(uintptr_t)vkStream->getBe64();
+    if (forUnmarshaling->pCopyDstLayouts) {
+        vkStream->alloc((void**)&forUnmarshaling->pCopyDstLayouts,
+                        forUnmarshaling->copyDstLayoutCount * sizeof(VkImageLayout));
+        vkStream->read((VkImageLayout*)forUnmarshaling->pCopyDstLayouts,
+                       forUnmarshaling->copyDstLayoutCount * sizeof(VkImageLayout));
+    }
+    vkStream->read((uint8_t*)forUnmarshaling->optimalTilingLayoutUUID,
+                   VK_UUID_SIZE * sizeof(uint8_t));
+    vkStream->read((VkBool32*)&forUnmarshaling->identicalMemoryTypeRequirements, sizeof(VkBool32));
+}
+
+void marshal_VkMemoryToImageCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkMemoryToImageCopyEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((const void*)forMarshaling->pHostPointer, sizeof(const uint8_t));
+    vkStream->write((uint32_t*)&forMarshaling->memoryRowLength, sizeof(uint32_t));
+    vkStream->write((uint32_t*)&forMarshaling->memoryImageHeight, sizeof(uint32_t));
+    marshal_VkImageSubresourceLayers(vkStream, rootType,
+                                     (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->imageOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageExtent));
+}
+
+void unmarshal_VkMemoryToImageCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkMemoryToImageCopyEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->alloc((void**)&forUnmarshaling->pHostPointer, sizeof(const uint8_t));
+    vkStream->read((void*)forUnmarshaling->pHostPointer, sizeof(const uint8_t));
+    vkStream->read((uint32_t*)&forUnmarshaling->memoryRowLength, sizeof(uint32_t));
+    vkStream->read((uint32_t*)&forUnmarshaling->memoryImageHeight, sizeof(uint32_t));
+    unmarshal_VkImageSubresourceLayers(
+        vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->imageOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageExtent));
+}
+
+void marshal_VkImageToMemoryCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkImageToMemoryCopyEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((void*)forMarshaling->pHostPointer, sizeof(uint8_t));
+    vkStream->write((uint32_t*)&forMarshaling->memoryRowLength, sizeof(uint32_t));
+    vkStream->write((uint32_t*)&forMarshaling->memoryImageHeight, sizeof(uint32_t));
+    marshal_VkImageSubresourceLayers(vkStream, rootType,
+                                     (VkImageSubresourceLayers*)(&forMarshaling->imageSubresource));
+    marshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forMarshaling->imageOffset));
+    marshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forMarshaling->imageExtent));
+}
+
+void unmarshal_VkImageToMemoryCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkImageToMemoryCopyEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->alloc((void**)&forUnmarshaling->pHostPointer, sizeof(uint8_t));
+    vkStream->read((void*)forUnmarshaling->pHostPointer, sizeof(uint8_t));
+    vkStream->read((uint32_t*)&forUnmarshaling->memoryRowLength, sizeof(uint32_t));
+    vkStream->read((uint32_t*)&forUnmarshaling->memoryImageHeight, sizeof(uint32_t));
+    unmarshal_VkImageSubresourceLayers(
+        vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource));
+    unmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->imageOffset));
+    unmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageExtent));
+}
+
+void marshal_VkCopyMemoryToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                        const VkCopyMemoryToImageInfoEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkHostImageCopyFlagsEXT*)&forMarshaling->flags,
+                    sizeof(VkHostImageCopyFlagsEXT));
+    uint64_t cgen_var_0;
+    vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->dstImage, &cgen_var_0, 1);
+    vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->write((VkImageLayout*)&forMarshaling->dstImageLayout, sizeof(VkImageLayout));
+    vkStream->write((uint32_t*)&forMarshaling->regionCount, sizeof(uint32_t));
+    if (forMarshaling) {
+        for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i) {
+            marshal_VkMemoryToImageCopyEXT(
+                vkStream, rootType, (const VkMemoryToImageCopyEXT*)(forMarshaling->pRegions + i));
+        }
+    }
+}
+
+void unmarshal_VkCopyMemoryToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                          VkCopyMemoryToImageInfoEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkHostImageCopyFlagsEXT*)&forUnmarshaling->flags,
+                   sizeof(VkHostImageCopyFlagsEXT));
+    uint64_t cgen_var_0;
+    vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0,
+                                                      (VkImage*)&forUnmarshaling->dstImage, 1);
+    vkStream->read((VkImageLayout*)&forUnmarshaling->dstImageLayout, sizeof(VkImageLayout));
+    vkStream->read((uint32_t*)&forUnmarshaling->regionCount, sizeof(uint32_t));
+    vkStream->alloc((void**)&forUnmarshaling->pRegions,
+                    forUnmarshaling->regionCount * sizeof(const VkMemoryToImageCopyEXT));
+    if (forUnmarshaling) {
+        for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i) {
+            unmarshal_VkMemoryToImageCopyEXT(
+                vkStream, rootType, (VkMemoryToImageCopyEXT*)(forUnmarshaling->pRegions + i));
+        }
+    }
+}
+
+void marshal_VkCopyImageToMemoryInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                        const VkCopyImageToMemoryInfoEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkHostImageCopyFlagsEXT*)&forMarshaling->flags,
+                    sizeof(VkHostImageCopyFlagsEXT));
+    uint64_t cgen_var_0;
+    vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->srcImage, &cgen_var_0, 1);
+    vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->write((VkImageLayout*)&forMarshaling->srcImageLayout, sizeof(VkImageLayout));
+    vkStream->write((uint32_t*)&forMarshaling->regionCount, sizeof(uint32_t));
+    if (forMarshaling) {
+        for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i) {
+            marshal_VkImageToMemoryCopyEXT(
+                vkStream, rootType, (const VkImageToMemoryCopyEXT*)(forMarshaling->pRegions + i));
+        }
+    }
+}
+
+void unmarshal_VkCopyImageToMemoryInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                          VkCopyImageToMemoryInfoEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkHostImageCopyFlagsEXT*)&forUnmarshaling->flags,
+                   sizeof(VkHostImageCopyFlagsEXT));
+    uint64_t cgen_var_0;
+    vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0,
+                                                      (VkImage*)&forUnmarshaling->srcImage, 1);
+    vkStream->read((VkImageLayout*)&forUnmarshaling->srcImageLayout, sizeof(VkImageLayout));
+    vkStream->read((uint32_t*)&forUnmarshaling->regionCount, sizeof(uint32_t));
+    vkStream->alloc((void**)&forUnmarshaling->pRegions,
+                    forUnmarshaling->regionCount * sizeof(const VkImageToMemoryCopyEXT));
+    if (forUnmarshaling) {
+        for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i) {
+            unmarshal_VkImageToMemoryCopyEXT(
+                vkStream, rootType, (VkImageToMemoryCopyEXT*)(forUnmarshaling->pRegions + i));
+        }
+    }
+}
+
+void marshal_VkCopyImageToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                       const VkCopyImageToImageInfoEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkHostImageCopyFlagsEXT*)&forMarshaling->flags,
+                    sizeof(VkHostImageCopyFlagsEXT));
+    uint64_t cgen_var_0;
+    vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->srcImage, &cgen_var_0, 1);
+    vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->write((VkImageLayout*)&forMarshaling->srcImageLayout, sizeof(VkImageLayout));
+    uint64_t cgen_var_1;
+    vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->dstImage, &cgen_var_1, 1);
+    vkStream->write((uint64_t*)&cgen_var_1, 1 * 8);
+    vkStream->write((VkImageLayout*)&forMarshaling->dstImageLayout, sizeof(VkImageLayout));
+    vkStream->write((uint32_t*)&forMarshaling->regionCount, sizeof(uint32_t));
+    if (forMarshaling) {
+        for (uint32_t i = 0; i < (uint32_t)forMarshaling->regionCount; ++i) {
+            marshal_VkImageCopy2(vkStream, rootType,
+                                 (const VkImageCopy2*)(forMarshaling->pRegions + i));
+        }
+    }
+}
+
+void unmarshal_VkCopyImageToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                         VkCopyImageToImageInfoEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkHostImageCopyFlagsEXT*)&forUnmarshaling->flags,
+                   sizeof(VkHostImageCopyFlagsEXT));
+    uint64_t cgen_var_0;
+    vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0,
+                                                      (VkImage*)&forUnmarshaling->srcImage, 1);
+    vkStream->read((VkImageLayout*)&forUnmarshaling->srcImageLayout, sizeof(VkImageLayout));
+    uint64_t cgen_var_1;
+    vkStream->read((uint64_t*)&cgen_var_1, 1 * 8);
+    vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_1,
+                                                      (VkImage*)&forUnmarshaling->dstImage, 1);
+    vkStream->read((VkImageLayout*)&forUnmarshaling->dstImageLayout, sizeof(VkImageLayout));
+    vkStream->read((uint32_t*)&forUnmarshaling->regionCount, sizeof(uint32_t));
+    vkStream->alloc((void**)&forUnmarshaling->pRegions,
+                    forUnmarshaling->regionCount * sizeof(const VkImageCopy2));
+    if (forUnmarshaling) {
+        for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i) {
+            unmarshal_VkImageCopy2(vkStream, rootType,
+                                   (VkImageCopy2*)(forUnmarshaling->pRegions + i));
+        }
+    }
+}
+
+void marshal_VkHostImageLayoutTransitionInfoEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkHostImageLayoutTransitionInfoEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    uint64_t cgen_var_0;
+    vkStream->handleMapping()->mapHandles_VkImage_u64(&forMarshaling->image, &cgen_var_0, 1);
+    vkStream->write((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->write((VkImageLayout*)&forMarshaling->oldLayout, sizeof(VkImageLayout));
+    vkStream->write((VkImageLayout*)&forMarshaling->newLayout, sizeof(VkImageLayout));
+    marshal_VkImageSubresourceRange(vkStream, rootType,
+                                    (VkImageSubresourceRange*)(&forMarshaling->subresourceRange));
+}
+
+void unmarshal_VkHostImageLayoutTransitionInfoEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageLayoutTransitionInfoEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    uint64_t cgen_var_0;
+    vkStream->read((uint64_t*)&cgen_var_0, 1 * 8);
+    vkStream->handleMapping()->mapHandles_u64_VkImage(&cgen_var_0,
+                                                      (VkImage*)&forUnmarshaling->image, 1);
+    vkStream->read((VkImageLayout*)&forUnmarshaling->oldLayout, sizeof(VkImageLayout));
+    vkStream->read((VkImageLayout*)&forUnmarshaling->newLayout, sizeof(VkImageLayout));
+    unmarshal_VkImageSubresourceRange(
+        vkStream, rootType, (VkImageSubresourceRange*)(&forUnmarshaling->subresourceRange));
+}
+
+void marshal_VkSubresourceHostMemcpySizeEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                            const VkSubresourceHostMemcpySizeEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkDeviceSize*)&forMarshaling->size, sizeof(VkDeviceSize));
+}
+
+void unmarshal_VkSubresourceHostMemcpySizeEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkSubresourceHostMemcpySizeEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkDeviceSize*)&forUnmarshaling->size, sizeof(VkDeviceSize));
+}
+
+void marshal_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkHostImageCopyDevicePerformanceQueryEXT* forMarshaling) {
+    (void)rootType;
+    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forMarshaling->sType;
+    }
+    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
+    vkStream->write((VkBool32*)&forMarshaling->optimalDeviceAccess, sizeof(VkBool32));
+    vkStream->write((VkBool32*)&forMarshaling->identicalMemoryLayout, sizeof(VkBool32));
+}
+
+void unmarshal_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageCopyDevicePerformanceQueryEXT* forUnmarshaling) {
+    (void)rootType;
+    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    size_t pNext_size;
+    pNext_size = vkStream->getBe32();
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
+    }
+    vkStream->read((VkBool32*)&forUnmarshaling->optimalDeviceAccess, sizeof(VkBool32));
+    vkStream->read((VkBool32*)&forUnmarshaling->identicalMemoryLayout, sizeof(VkBool32));
+}
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void marshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VulkanStream* vkStream, VkStructureType rootType,
@@ -16256,78 +17110,6 @@
     }
 }
 
-void marshal_VkSubresourceLayout2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                     const VkSubresourceLayout2EXT* forMarshaling) {
-    (void)rootType;
-    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = forMarshaling->sType;
-    }
-    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
-    marshal_VkSubresourceLayout(vkStream, rootType,
-                                (VkSubresourceLayout*)(&forMarshaling->subresourceLayout));
-}
-
-void unmarshal_VkSubresourceLayout2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                       VkSubresourceLayout2EXT* forUnmarshaling) {
-    (void)rootType;
-    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = forUnmarshaling->sType;
-    }
-    size_t pNext_size;
-    pNext_size = vkStream->getBe32();
-    forUnmarshaling->pNext = nullptr;
-    if (pNext_size) {
-        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
-        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
-        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
-        vkStream->alloc((void**)&forUnmarshaling->pNext,
-                        goldfish_vk_extension_struct_size_with_stream_features(
-                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
-        *(VkStructureType*)forUnmarshaling->pNext = extType;
-        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
-    }
-    unmarshal_VkSubresourceLayout(vkStream, rootType,
-                                  (VkSubresourceLayout*)(&forUnmarshaling->subresourceLayout));
-}
-
-void marshal_VkImageSubresource2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                    const VkImageSubresource2EXT* forMarshaling) {
-    (void)rootType;
-    vkStream->write((VkStructureType*)&forMarshaling->sType, sizeof(VkStructureType));
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = forMarshaling->sType;
-    }
-    marshal_extension_struct(vkStream, rootType, forMarshaling->pNext);
-    marshal_VkImageSubresource(vkStream, rootType,
-                               (VkImageSubresource*)(&forMarshaling->imageSubresource));
-}
-
-void unmarshal_VkImageSubresource2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                      VkImageSubresource2EXT* forUnmarshaling) {
-    (void)rootType;
-    vkStream->read((VkStructureType*)&forUnmarshaling->sType, sizeof(VkStructureType));
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = forUnmarshaling->sType;
-    }
-    size_t pNext_size;
-    pNext_size = vkStream->getBe32();
-    forUnmarshaling->pNext = nullptr;
-    if (pNext_size) {
-        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
-        vkStream->read((void*)forUnmarshaling->pNext, sizeof(VkStructureType));
-        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
-        vkStream->alloc((void**)&forUnmarshaling->pNext,
-                        goldfish_vk_extension_struct_size_with_stream_features(
-                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
-        *(VkStructureType*)forUnmarshaling->pNext = extType;
-        unmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext));
-    }
-    unmarshal_VkImageSubresource(vkStream, rootType,
-                                 (VkImageSubresource*)(&forUnmarshaling->imageSubresource));
-}
-
 void marshal_VkImageCompressionPropertiesEXT(VulkanStream* vkStream, VkStructureType rootType,
                                              const VkImageCompressionPropertiesEXT* forMarshaling) {
     (void)rootType;
@@ -17434,6 +18216,33 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            marshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                vkStream, rootType,
+                reinterpret_cast<const VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            marshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                vkStream, rootType,
+                reinterpret_cast<const VkPhysicalDeviceMaintenance5PropertiesKHR*>(
+                    structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            marshal_VkPipelineCreateFlags2CreateInfoKHR(
+                vkStream, rootType,
+                reinterpret_cast<const VkPipelineCreateFlags2CreateInfoKHR*>(structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            marshal_VkBufferUsageFlags2CreateInfoKHR(
+                vkStream, rootType,
+                reinterpret_cast<const VkBufferUsageFlags2CreateInfoKHR*>(structExtension));
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             marshal_VkNativeBufferANDROID(
@@ -17529,6 +18338,33 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            marshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                vkStream, rootType,
+                reinterpret_cast<const VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            marshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                vkStream, rootType,
+                reinterpret_cast<const VkPhysicalDeviceHostImageCopyPropertiesEXT*>(
+                    structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            marshal_VkSubresourceHostMemcpySizeEXT(
+                vkStream, rootType,
+                reinterpret_cast<const VkSubresourceHostMemcpySizeEXT*>(structExtension));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            marshal_VkHostImageCopyDevicePerformanceQueryEXT(
+                vkStream, rootType,
+                reinterpret_cast<const VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension));
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             marshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
@@ -18497,6 +19333,32 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            unmarshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            unmarshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            unmarshal_VkPipelineCreateFlags2CreateInfoKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkPipelineCreateFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            unmarshal_VkBufferUsageFlags2CreateInfoKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkBufferUsageFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             unmarshal_VkNativeBufferANDROID(
@@ -18589,6 +19451,32 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            unmarshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            unmarshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            unmarshal_VkSubresourceHostMemcpySizeEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkSubresourceHostMemcpySizeEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            unmarshal_VkHostImageCopyDevicePerformanceQueryEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             unmarshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
@@ -19505,11 +20393,21 @@
             return "OP_vkGetDeviceBufferMemoryRequirementsKHR";
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case OP_vkCmdBindIndexBuffer2KHR: {
+            return "OP_vkCmdBindIndexBuffer2KHR";
+        }
+#endif
 #ifdef VK_EXT_extended_dynamic_state
         case OP_vkCmdSetScissorWithCountEXT: {
             return "OP_vkCmdSetScissorWithCountEXT";
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case OP_vkCopyImageToMemoryEXT: {
+            return "OP_vkCopyImageToMemoryEXT";
+        }
+#endif
 #ifdef VK_EXT_extended_dynamic_state2
         case OP_vkCmdSetPatchControlPointsEXT: {
             return "OP_vkCmdSetPatchControlPointsEXT";
@@ -19545,6 +20443,11 @@
             return "OP_vkCmdSetDepthWriteEnableEXT";
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case OP_vkCopyMemoryToImageEXT: {
+            return "OP_vkCopyMemoryToImageEXT";
+        }
+#endif
 #ifdef VK_KHR_buffer_device_address
         case OP_vkGetBufferDeviceAddressKHR: {
             return "OP_vkGetBufferDeviceAddressKHR";
@@ -19579,6 +20482,11 @@
             return "OP_vkCmdSetDepthBoundsTestEnableEXT";
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case OP_vkCopyImageToImageEXT: {
+            return "OP_vkCopyImageToImageEXT";
+        }
+#endif
 #ifdef VK_VERSION_1_3
         case OP_vkDestroyPrivateDataSlot: {
             return "OP_vkDestroyPrivateDataSlot";
@@ -19657,6 +20565,13 @@
         case OP_vkGetPrivateData: {
             return "OP_vkGetPrivateData";
         }
+#endif
+#ifdef VK_KHR_maintenance5
+        case OP_vkGetRenderingAreaGranularityKHR: {
+            return "OP_vkGetRenderingAreaGranularityKHR";
+        }
+#endif
+#ifdef VK_VERSION_1_3
         case OP_vkCmdSetDepthWriteEnable: {
             return "OP_vkCmdSetDepthWriteEnable";
         }
@@ -19664,11 +20579,21 @@
             return "OP_vkSetPrivateData";
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case OP_vkTransitionImageLayoutEXT: {
+            return "OP_vkTransitionImageLayoutEXT";
+        }
+#endif
 #ifdef VK_KHR_maintenance4
         case OP_vkGetDeviceImageMemoryRequirementsKHR: {
             return "OP_vkGetDeviceImageMemoryRequirementsKHR";
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case OP_vkGetImageSubresourceLayout2KHR: {
+            return "OP_vkGetImageSubresourceLayout2KHR";
+        }
+#endif
 #ifdef VK_EXT_extended_dynamic_state
         case OP_vkCmdBindVertexBuffers2EXT: {
             return "OP_vkCmdBindVertexBuffers2EXT";
@@ -19748,6 +20673,11 @@
             return "OP_vkCmdWriteTimestamp2KHR";
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case OP_vkGetDeviceImageSubresourceLayoutKHR: {
+            return "OP_vkGetDeviceImageSubresourceLayoutKHR";
+        }
+#endif
 #ifdef VK_KHR_copy_commands2
         case OP_vkCmdResolveImage2KHR: {
             return "OP_vkCmdResolveImage2KHR";
@@ -20008,7 +20938,7 @@
             return "OP_vkGetDeviceMemoryOpaqueCaptureAddressKHR";
         }
 #endif
-#ifdef VK_EXT_image_compression_control
+#ifdef VK_EXT_host_image_copy
         case OP_vkGetImageSubresourceLayout2EXT: {
             return "OP_vkGetImageSubresourceLayout2EXT";
         }
diff --git a/host/vulkan/cereal/common/goldfish_vk_marshaling.h b/host/vulkan/cereal/common/goldfish_vk_marshaling.h
index 15565a6..1518799 100644
--- a/host/vulkan/cereal/common/goldfish_vk_marshaling.h
+++ b/host/vulkan/cereal/common/goldfish_vk_marshaling.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_marshaling
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -35,7 +35,7 @@
 #include "VulkanStream.h"
 #include "aemu/base/files/StreamSerializing.h"
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace gfxstream {
@@ -3034,6 +3034,67 @@
 #define OP_vkGetDeviceImageMemoryRequirementsKHR 243155021
 #define OP_vkGetDeviceImageSparseMemoryRequirementsKHR 275585477
 #endif
+#ifdef VK_KHR_maintenance5
+void marshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceMaintenance5FeaturesKHR* forMarshaling);
+
+void unmarshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5FeaturesKHR* forUnmarshaling);
+
+void marshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceMaintenance5PropertiesKHR* forMarshaling);
+
+void unmarshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5PropertiesKHR* forUnmarshaling);
+
+void marshal_VkRenderingAreaInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkRenderingAreaInfoKHR* forMarshaling);
+
+void unmarshal_VkRenderingAreaInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkRenderingAreaInfoKHR* forUnmarshaling);
+
+void marshal_VkImageSubresource2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkImageSubresource2KHR* forMarshaling);
+
+void unmarshal_VkImageSubresource2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkImageSubresource2KHR* forUnmarshaling);
+
+void marshal_VkDeviceImageSubresourceInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                             const VkDeviceImageSubresourceInfoKHR* forMarshaling);
+
+void unmarshal_VkDeviceImageSubresourceInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                               VkDeviceImageSubresourceInfoKHR* forUnmarshaling);
+
+void marshal_VkSubresourceLayout2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                     const VkSubresourceLayout2KHR* forMarshaling);
+
+void unmarshal_VkSubresourceLayout2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                       VkSubresourceLayout2KHR* forUnmarshaling);
+
+#define OP_vkCmdBindIndexBuffer2KHR 202856085
+#define OP_vkGetRenderingAreaGranularityKHR 238658496
+#define OP_vkGetDeviceImageSubresourceLayoutKHR 252830318
+#define OP_vkGetImageSubresourceLayout2KHR 243334937
+void marshal_VkPipelineCreateFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPipelineCreateFlags2CreateInfoKHR* forMarshaling);
+
+void unmarshal_VkPipelineCreateFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPipelineCreateFlags2CreateInfoKHR* forUnmarshaling);
+
+void marshal_VkBufferUsageFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkBufferUsageFlags2CreateInfoKHR* forMarshaling);
+
+void unmarshal_VkBufferUsageFlags2CreateInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                                VkBufferUsageFlags2CreateInfoKHR* forUnmarshaling);
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void marshal_VkNativeBufferUsage2ANDROID(VulkanStream* vkStream, VkStructureType rootType,
                                          const VkNativeBufferUsage2ANDROID* forMarshaling);
@@ -3276,6 +3337,89 @@
 #define OP_vkCmdSetStencilTestEnableEXT 286438749
 #define OP_vkCmdSetStencilOpEXT 277159578
 #endif
+#ifdef VK_EXT_host_image_copy
+void marshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyFeaturesEXT* forMarshaling);
+
+void unmarshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyFeaturesEXT* forUnmarshaling);
+
+void marshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkPhysicalDeviceHostImageCopyPropertiesEXT* forMarshaling);
+
+void unmarshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* forUnmarshaling);
+
+void marshal_VkMemoryToImageCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkMemoryToImageCopyEXT* forMarshaling);
+
+void unmarshal_VkMemoryToImageCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkMemoryToImageCopyEXT* forUnmarshaling);
+
+void marshal_VkImageToMemoryCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                    const VkImageToMemoryCopyEXT* forMarshaling);
+
+void unmarshal_VkImageToMemoryCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                      VkImageToMemoryCopyEXT* forUnmarshaling);
+
+void marshal_VkCopyMemoryToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                        const VkCopyMemoryToImageInfoEXT* forMarshaling);
+
+void unmarshal_VkCopyMemoryToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                          VkCopyMemoryToImageInfoEXT* forUnmarshaling);
+
+void marshal_VkCopyImageToMemoryInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                        const VkCopyImageToMemoryInfoEXT* forMarshaling);
+
+void unmarshal_VkCopyImageToMemoryInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                          VkCopyImageToMemoryInfoEXT* forUnmarshaling);
+
+void marshal_VkCopyImageToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                       const VkCopyImageToImageInfoEXT* forMarshaling);
+
+void unmarshal_VkCopyImageToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                         VkCopyImageToImageInfoEXT* forUnmarshaling);
+
+void marshal_VkHostImageLayoutTransitionInfoEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkHostImageLayoutTransitionInfoEXT* forMarshaling);
+
+void unmarshal_VkHostImageLayoutTransitionInfoEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageLayoutTransitionInfoEXT* forUnmarshaling);
+
+void marshal_VkSubresourceHostMemcpySizeEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                            const VkSubresourceHostMemcpySizeEXT* forMarshaling);
+
+void unmarshal_VkSubresourceHostMemcpySizeEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkSubresourceHostMemcpySizeEXT* forUnmarshaling);
+
+void marshal_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    const VkHostImageCopyDevicePerformanceQueryEXT* forMarshaling);
+
+void unmarshal_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageCopyDevicePerformanceQueryEXT* forUnmarshaling);
+
+DEFINE_ALIAS_FUNCTION(marshal_VkSubresourceLayout2KHR, marshal_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(unmarshal_VkSubresourceLayout2KHR, unmarshal_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(marshal_VkImageSubresource2KHR, marshal_VkImageSubresource2EXT)
+
+DEFINE_ALIAS_FUNCTION(unmarshal_VkImageSubresource2KHR, unmarshal_VkImageSubresource2EXT)
+
+#define OP_vkCopyMemoryToImageEXT 218832495
+#define OP_vkCopyImageToMemoryEXT 204695490
+#define OP_vkCopyImageToImageEXT 223534798
+#define OP_vkTransitionImageLayoutEXT 242817558
+#define OP_vkGetImageSubresourceLayout2EXT 296152177
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void marshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VulkanStream* vkStream, VkStructureType rootType,
@@ -3487,25 +3631,12 @@
 void unmarshal_VkImageCompressionControlEXT(VulkanStream* vkStream, VkStructureType rootType,
                                             VkImageCompressionControlEXT* forUnmarshaling);
 
-void marshal_VkSubresourceLayout2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                     const VkSubresourceLayout2EXT* forMarshaling);
-
-void unmarshal_VkSubresourceLayout2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                       VkSubresourceLayout2EXT* forUnmarshaling);
-
-void marshal_VkImageSubresource2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                    const VkImageSubresource2EXT* forMarshaling);
-
-void unmarshal_VkImageSubresource2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                      VkImageSubresource2EXT* forUnmarshaling);
-
 void marshal_VkImageCompressionPropertiesEXT(VulkanStream* vkStream, VkStructureType rootType,
                                              const VkImageCompressionPropertiesEXT* forMarshaling);
 
 void unmarshal_VkImageCompressionPropertiesEXT(VulkanStream* vkStream, VkStructureType rootType,
                                                VkImageCompressionPropertiesEXT* forUnmarshaling);
 
-#define OP_vkGetImageSubresourceLayout2EXT 296152177
 #endif
 #ifdef VK_EXT_4444_formats
 void marshal_VkPhysicalDevice4444FormatsFeaturesEXT(
diff --git a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp
index ae252b6..d98dfa7 100644
--- a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_reserved_marshaling
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -11402,6 +11402,275 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+void reservedunmarshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5FeaturesKHR* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkBool32*)&forUnmarshaling->maintenance5, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+}
+
+void reservedunmarshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5PropertiesKHR* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkBool32*)&forUnmarshaling->earlyFragmentMultisampleCoverageAfterSampleCounting, *ptr,
+           sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy((VkBool32*)&forUnmarshaling->earlyFragmentSampleMaskTestBeforeSampleCounting, *ptr,
+           sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy((VkBool32*)&forUnmarshaling->depthStencilSwizzleOneSupport, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy((VkBool32*)&forUnmarshaling->polygonModePointSize, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy((VkBool32*)&forUnmarshaling->nonStrictSinglePixelWideLinesUseParallelogram, *ptr,
+           sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy((VkBool32*)&forUnmarshaling->nonStrictWideLinesUseParallelogram, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+}
+
+void reservedunmarshal_VkRenderingAreaInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkRenderingAreaInfoKHR* forUnmarshaling,
+                                              uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((uint32_t*)&forUnmarshaling->viewMask, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    memcpy((uint32_t*)&forUnmarshaling->colorAttachmentCount, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    // WARNING PTR CHECK
+    memcpy((VkFormat**)&forUnmarshaling->pColorAttachmentFormats, (*ptr), 8);
+    android::base::Stream::fromBe64((uint8_t*)&forUnmarshaling->pColorAttachmentFormats);
+    *ptr += 8;
+    if (forUnmarshaling->pColorAttachmentFormats) {
+        vkStream->alloc((void**)&forUnmarshaling->pColorAttachmentFormats,
+                        forUnmarshaling->colorAttachmentCount * sizeof(const VkFormat));
+        memcpy((VkFormat*)forUnmarshaling->pColorAttachmentFormats, *ptr,
+               forUnmarshaling->colorAttachmentCount * sizeof(const VkFormat));
+        *ptr += forUnmarshaling->colorAttachmentCount * sizeof(const VkFormat);
+    }
+    memcpy((VkFormat*)&forUnmarshaling->depthAttachmentFormat, *ptr, sizeof(VkFormat));
+    *ptr += sizeof(VkFormat);
+    memcpy((VkFormat*)&forUnmarshaling->stencilAttachmentFormat, *ptr, sizeof(VkFormat));
+    *ptr += sizeof(VkFormat);
+}
+
+void reservedunmarshal_VkImageSubresource2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkImageSubresource2KHR* forUnmarshaling,
+                                              uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    reservedunmarshal_VkImageSubresource(
+        vkStream, rootType, (VkImageSubresource*)(&forUnmarshaling->imageSubresource), ptr);
+}
+
+void reservedunmarshal_VkDeviceImageSubresourceInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkDeviceImageSubresourceInfoKHR* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    vkStream->alloc((void**)&forUnmarshaling->pCreateInfo, sizeof(const VkImageCreateInfo));
+    reservedunmarshal_VkImageCreateInfo(vkStream, rootType,
+                                        (VkImageCreateInfo*)(forUnmarshaling->pCreateInfo), ptr);
+    vkStream->alloc((void**)&forUnmarshaling->pSubresource, sizeof(const VkImageSubresource2KHR));
+    reservedunmarshal_VkImageSubresource2KHR(
+        vkStream, rootType, (VkImageSubresource2KHR*)(forUnmarshaling->pSubresource), ptr);
+}
+
+void reservedunmarshal_VkSubresourceLayout2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                               VkSubresourceLayout2KHR* forUnmarshaling,
+                                               uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    reservedunmarshal_VkSubresourceLayout(
+        vkStream, rootType, (VkSubresourceLayout*)(&forUnmarshaling->subresourceLayout), ptr);
+}
+
+void reservedunmarshal_VkPipelineCreateFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPipelineCreateFlags2CreateInfoKHR* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkPipelineCreateFlags2KHR*)&forUnmarshaling->flags, *ptr,
+           sizeof(VkPipelineCreateFlags2KHR));
+    *ptr += sizeof(VkPipelineCreateFlags2KHR);
+}
+
+void reservedunmarshal_VkBufferUsageFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkBufferUsageFlags2CreateInfoKHR* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkBufferUsageFlags2KHR*)&forUnmarshaling->usage, *ptr, sizeof(VkBufferUsageFlags2KHR));
+    *ptr += sizeof(VkBufferUsageFlags2KHR);
+}
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void reservedunmarshal_VkNativeBufferUsage2ANDROID(VulkanStream* vkStream, VkStructureType rootType,
                                                    VkNativeBufferUsage2ANDROID* forUnmarshaling,
@@ -11922,6 +12191,410 @@
 }
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void reservedunmarshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyFeaturesEXT* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkBool32*)&forUnmarshaling->hostImageCopy, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+}
+
+void reservedunmarshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((uint32_t*)&forUnmarshaling->copySrcLayoutCount, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    // WARNING PTR CHECK
+    memcpy((VkImageLayout**)&forUnmarshaling->pCopySrcLayouts, (*ptr), 8);
+    android::base::Stream::fromBe64((uint8_t*)&forUnmarshaling->pCopySrcLayouts);
+    *ptr += 8;
+    if (forUnmarshaling->pCopySrcLayouts) {
+        vkStream->alloc((void**)&forUnmarshaling->pCopySrcLayouts,
+                        forUnmarshaling->copySrcLayoutCount * sizeof(VkImageLayout));
+        memcpy((VkImageLayout*)forUnmarshaling->pCopySrcLayouts, *ptr,
+               forUnmarshaling->copySrcLayoutCount * sizeof(VkImageLayout));
+        *ptr += forUnmarshaling->copySrcLayoutCount * sizeof(VkImageLayout);
+    }
+    memcpy((uint32_t*)&forUnmarshaling->copyDstLayoutCount, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    // WARNING PTR CHECK
+    memcpy((VkImageLayout**)&forUnmarshaling->pCopyDstLayouts, (*ptr), 8);
+    android::base::Stream::fromBe64((uint8_t*)&forUnmarshaling->pCopyDstLayouts);
+    *ptr += 8;
+    if (forUnmarshaling->pCopyDstLayouts) {
+        vkStream->alloc((void**)&forUnmarshaling->pCopyDstLayouts,
+                        forUnmarshaling->copyDstLayoutCount * sizeof(VkImageLayout));
+        memcpy((VkImageLayout*)forUnmarshaling->pCopyDstLayouts, *ptr,
+               forUnmarshaling->copyDstLayoutCount * sizeof(VkImageLayout));
+        *ptr += forUnmarshaling->copyDstLayoutCount * sizeof(VkImageLayout);
+    }
+    memcpy((uint8_t*)forUnmarshaling->optimalTilingLayoutUUID, *ptr,
+           VK_UUID_SIZE * sizeof(uint8_t));
+    *ptr += VK_UUID_SIZE * sizeof(uint8_t);
+    memcpy((VkBool32*)&forUnmarshaling->identicalMemoryTypeRequirements, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+}
+
+void reservedunmarshal_VkMemoryToImageCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkMemoryToImageCopyEXT* forUnmarshaling,
+                                              uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    vkStream->alloc((void**)&forUnmarshaling->pHostPointer, sizeof(const uint8_t));
+    memcpy((void*)forUnmarshaling->pHostPointer, *ptr, sizeof(const uint8_t));
+    *ptr += sizeof(const uint8_t);
+    memcpy((uint32_t*)&forUnmarshaling->memoryRowLength, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    memcpy((uint32_t*)&forUnmarshaling->memoryImageHeight, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    reservedunmarshal_VkImageSubresourceLayers(
+        vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource), ptr);
+    reservedunmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->imageOffset),
+                                 ptr);
+    reservedunmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageExtent),
+                                 ptr);
+}
+
+void reservedunmarshal_VkImageToMemoryCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkImageToMemoryCopyEXT* forUnmarshaling,
+                                              uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    vkStream->alloc((void**)&forUnmarshaling->pHostPointer, sizeof(uint8_t));
+    memcpy((void*)forUnmarshaling->pHostPointer, *ptr, sizeof(uint8_t));
+    *ptr += sizeof(uint8_t);
+    memcpy((uint32_t*)&forUnmarshaling->memoryRowLength, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    memcpy((uint32_t*)&forUnmarshaling->memoryImageHeight, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    reservedunmarshal_VkImageSubresourceLayers(
+        vkStream, rootType, (VkImageSubresourceLayers*)(&forUnmarshaling->imageSubresource), ptr);
+    reservedunmarshal_VkOffset3D(vkStream, rootType, (VkOffset3D*)(&forUnmarshaling->imageOffset),
+                                 ptr);
+    reservedunmarshal_VkExtent3D(vkStream, rootType, (VkExtent3D*)(&forUnmarshaling->imageExtent),
+                                 ptr);
+}
+
+void reservedunmarshal_VkCopyMemoryToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                                  VkCopyMemoryToImageInfoEXT* forUnmarshaling,
+                                                  uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkHostImageCopyFlagsEXT*)&forUnmarshaling->flags, *ptr,
+           sizeof(VkHostImageCopyFlagsEXT));
+    *ptr += sizeof(VkHostImageCopyFlagsEXT);
+    uint64_t cgen_var_0;
+    memcpy((uint64_t*)&cgen_var_0, *ptr, 1 * 8);
+    *ptr += 1 * 8;
+    *(VkImage*)&forUnmarshaling->dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
+    memcpy((VkImageLayout*)&forUnmarshaling->dstImageLayout, *ptr, sizeof(VkImageLayout));
+    *ptr += sizeof(VkImageLayout);
+    memcpy((uint32_t*)&forUnmarshaling->regionCount, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    vkStream->alloc((void**)&forUnmarshaling->pRegions,
+                    forUnmarshaling->regionCount * sizeof(const VkMemoryToImageCopyEXT));
+    for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i) {
+        reservedunmarshal_VkMemoryToImageCopyEXT(
+            vkStream, rootType, (VkMemoryToImageCopyEXT*)(forUnmarshaling->pRegions + i), ptr);
+    }
+}
+
+void reservedunmarshal_VkCopyImageToMemoryInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                                  VkCopyImageToMemoryInfoEXT* forUnmarshaling,
+                                                  uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkHostImageCopyFlagsEXT*)&forUnmarshaling->flags, *ptr,
+           sizeof(VkHostImageCopyFlagsEXT));
+    *ptr += sizeof(VkHostImageCopyFlagsEXT);
+    uint64_t cgen_var_0;
+    memcpy((uint64_t*)&cgen_var_0, *ptr, 1 * 8);
+    *ptr += 1 * 8;
+    *(VkImage*)&forUnmarshaling->srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
+    memcpy((VkImageLayout*)&forUnmarshaling->srcImageLayout, *ptr, sizeof(VkImageLayout));
+    *ptr += sizeof(VkImageLayout);
+    memcpy((uint32_t*)&forUnmarshaling->regionCount, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    vkStream->alloc((void**)&forUnmarshaling->pRegions,
+                    forUnmarshaling->regionCount * sizeof(const VkImageToMemoryCopyEXT));
+    for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i) {
+        reservedunmarshal_VkImageToMemoryCopyEXT(
+            vkStream, rootType, (VkImageToMemoryCopyEXT*)(forUnmarshaling->pRegions + i), ptr);
+    }
+}
+
+void reservedunmarshal_VkCopyImageToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                                 VkCopyImageToImageInfoEXT* forUnmarshaling,
+                                                 uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkHostImageCopyFlagsEXT*)&forUnmarshaling->flags, *ptr,
+           sizeof(VkHostImageCopyFlagsEXT));
+    *ptr += sizeof(VkHostImageCopyFlagsEXT);
+    uint64_t cgen_var_0;
+    memcpy((uint64_t*)&cgen_var_0, *ptr, 1 * 8);
+    *ptr += 1 * 8;
+    *(VkImage*)&forUnmarshaling->srcImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
+    memcpy((VkImageLayout*)&forUnmarshaling->srcImageLayout, *ptr, sizeof(VkImageLayout));
+    *ptr += sizeof(VkImageLayout);
+    uint64_t cgen_var_1;
+    memcpy((uint64_t*)&cgen_var_1, *ptr, 1 * 8);
+    *ptr += 1 * 8;
+    *(VkImage*)&forUnmarshaling->dstImage = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_1));
+    memcpy((VkImageLayout*)&forUnmarshaling->dstImageLayout, *ptr, sizeof(VkImageLayout));
+    *ptr += sizeof(VkImageLayout);
+    memcpy((uint32_t*)&forUnmarshaling->regionCount, *ptr, sizeof(uint32_t));
+    *ptr += sizeof(uint32_t);
+    vkStream->alloc((void**)&forUnmarshaling->pRegions,
+                    forUnmarshaling->regionCount * sizeof(const VkImageCopy2));
+    for (uint32_t i = 0; i < (uint32_t)forUnmarshaling->regionCount; ++i) {
+        reservedunmarshal_VkImageCopy2(vkStream, rootType,
+                                       (VkImageCopy2*)(forUnmarshaling->pRegions + i), ptr);
+    }
+}
+
+void reservedunmarshal_VkHostImageLayoutTransitionInfoEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageLayoutTransitionInfoEXT* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    uint64_t cgen_var_0;
+    memcpy((uint64_t*)&cgen_var_0, *ptr, 1 * 8);
+    *ptr += 1 * 8;
+    *(VkImage*)&forUnmarshaling->image = (VkImage)unbox_VkImage((VkImage)(*&cgen_var_0));
+    memcpy((VkImageLayout*)&forUnmarshaling->oldLayout, *ptr, sizeof(VkImageLayout));
+    *ptr += sizeof(VkImageLayout);
+    memcpy((VkImageLayout*)&forUnmarshaling->newLayout, *ptr, sizeof(VkImageLayout));
+    *ptr += sizeof(VkImageLayout);
+    reservedunmarshal_VkImageSubresourceRange(
+        vkStream, rootType, (VkImageSubresourceRange*)(&forUnmarshaling->subresourceRange), ptr);
+}
+
+void reservedunmarshal_VkSubresourceHostMemcpySizeEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkSubresourceHostMemcpySizeEXT* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkDeviceSize*)&forUnmarshaling->size, *ptr, sizeof(VkDeviceSize));
+    *ptr += sizeof(VkDeviceSize);
+}
+
+void reservedunmarshal_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageCopyDevicePerformanceQueryEXT* forUnmarshaling, uint8_t** ptr) {
+    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
+    *ptr += sizeof(VkStructureType);
+    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
+        rootType = forUnmarshaling->sType;
+    }
+    uint32_t pNext_size;
+    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
+    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
+    *ptr += sizeof(uint32_t);
+    forUnmarshaling->pNext = nullptr;
+    if (pNext_size) {
+        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
+        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
+        *ptr += sizeof(VkStructureType);
+        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
+        vkStream->alloc((void**)&forUnmarshaling->pNext,
+                        goldfish_vk_extension_struct_size_with_stream_features(
+                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
+        *(VkStructureType*)forUnmarshaling->pNext = extType;
+        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
+                                           ptr);
+    }
+    memcpy((VkBool32*)&forUnmarshaling->optimalDeviceAccess, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+    memcpy((VkBool32*)&forUnmarshaling->identicalMemoryLayout, *ptr, sizeof(VkBool32));
+    *ptr += sizeof(VkBool32);
+}
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void reservedunmarshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VulkanStream* vkStream, VkStructureType rootType,
@@ -12583,64 +13256,6 @@
     }
 }
 
-void reservedunmarshal_VkSubresourceLayout2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                               VkSubresourceLayout2EXT* forUnmarshaling,
-                                               uint8_t** ptr) {
-    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
-    *ptr += sizeof(VkStructureType);
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = forUnmarshaling->sType;
-    }
-    uint32_t pNext_size;
-    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
-    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
-    *ptr += sizeof(uint32_t);
-    forUnmarshaling->pNext = nullptr;
-    if (pNext_size) {
-        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
-        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
-        *ptr += sizeof(VkStructureType);
-        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
-        vkStream->alloc((void**)&forUnmarshaling->pNext,
-                        goldfish_vk_extension_struct_size_with_stream_features(
-                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
-        *(VkStructureType*)forUnmarshaling->pNext = extType;
-        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
-                                           ptr);
-    }
-    reservedunmarshal_VkSubresourceLayout(
-        vkStream, rootType, (VkSubresourceLayout*)(&forUnmarshaling->subresourceLayout), ptr);
-}
-
-void reservedunmarshal_VkImageSubresource2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                              VkImageSubresource2EXT* forUnmarshaling,
-                                              uint8_t** ptr) {
-    memcpy((VkStructureType*)&forUnmarshaling->sType, *ptr, sizeof(VkStructureType));
-    *ptr += sizeof(VkStructureType);
-    if (rootType == VK_STRUCTURE_TYPE_MAX_ENUM) {
-        rootType = forUnmarshaling->sType;
-    }
-    uint32_t pNext_size;
-    memcpy((uint32_t*)&pNext_size, *ptr, sizeof(uint32_t));
-    android::base::Stream::fromBe32((uint8_t*)&pNext_size);
-    *ptr += sizeof(uint32_t);
-    forUnmarshaling->pNext = nullptr;
-    if (pNext_size) {
-        vkStream->alloc((void**)&forUnmarshaling->pNext, sizeof(VkStructureType));
-        memcpy((void*)forUnmarshaling->pNext, *ptr, sizeof(VkStructureType));
-        *ptr += sizeof(VkStructureType);
-        VkStructureType extType = *(VkStructureType*)(forUnmarshaling->pNext);
-        vkStream->alloc((void**)&forUnmarshaling->pNext,
-                        goldfish_vk_extension_struct_size_with_stream_features(
-                            vkStream->getFeatureBits(), rootType, forUnmarshaling->pNext));
-        *(VkStructureType*)forUnmarshaling->pNext = extType;
-        reservedunmarshal_extension_struct(vkStream, rootType, (void*)(forUnmarshaling->pNext),
-                                           ptr);
-    }
-    reservedunmarshal_VkImageSubresource(
-        vkStream, rootType, (VkImageSubresource*)(&forUnmarshaling->imageSubresource), ptr);
-}
-
 void reservedunmarshal_VkImageCompressionPropertiesEXT(
     VulkanStream* vkStream, VkStructureType rootType,
     VkImageCompressionPropertiesEXT* forUnmarshaling, uint8_t** ptr) {
@@ -13735,6 +14350,34 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            reservedunmarshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension_out),
+                ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            reservedunmarshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension_out),
+                ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            reservedunmarshal_VkPipelineCreateFlags2CreateInfoKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkPipelineCreateFlags2CreateInfoKHR*>(structExtension_out), ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            reservedunmarshal_VkBufferUsageFlags2CreateInfoKHR(
+                vkStream, rootType,
+                reinterpret_cast<VkBufferUsageFlags2CreateInfoKHR*>(structExtension_out), ptr);
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             reservedunmarshal_VkNativeBufferANDROID(
@@ -13839,6 +14482,35 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            reservedunmarshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension_out),
+                ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            reservedunmarshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT*>(structExtension_out),
+                ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            reservedunmarshal_VkSubresourceHostMemcpySizeEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkSubresourceHostMemcpySizeEXT*>(structExtension_out), ptr);
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            reservedunmarshal_VkHostImageCopyDevicePerformanceQueryEXT(
+                vkStream, rootType,
+                reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension_out),
+                ptr);
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             reservedunmarshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
diff --git a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h
index b7f2355..30bdcbc 100644
--- a/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h
+++ b/host/vulkan/cereal/common/goldfish_vk_reserved_marshaling.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_reserved_marshaling
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -35,7 +35,7 @@
 #include "VulkanStream.h"
 #include "aemu/base/files/StreamSerializing.h"
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace gfxstream {
@@ -1602,6 +1602,40 @@
                       reservedunmarshal_VkDeviceImageMemoryRequirementsKHR)
 
 #endif
+#ifdef VK_KHR_maintenance5
+void reservedunmarshal_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5FeaturesKHR* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceMaintenance5PropertiesKHR* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkRenderingAreaInfoKHR(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkRenderingAreaInfoKHR* forUnmarshaling,
+                                              uint8_t** ptr);
+
+void reservedunmarshal_VkImageSubresource2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkImageSubresource2KHR* forUnmarshaling,
+                                              uint8_t** ptr);
+
+void reservedunmarshal_VkDeviceImageSubresourceInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkDeviceImageSubresourceInfoKHR* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkSubresourceLayout2KHR(VulkanStream* vkStream, VkStructureType rootType,
+                                               VkSubresourceLayout2KHR* forUnmarshaling,
+                                               uint8_t** ptr);
+
+void reservedunmarshal_VkPipelineCreateFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPipelineCreateFlags2CreateInfoKHR* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkBufferUsageFlags2CreateInfoKHR(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkBufferUsageFlags2CreateInfoKHR* forUnmarshaling, uint8_t** ptr);
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void reservedunmarshal_VkNativeBufferUsage2ANDROID(VulkanStream* vkStream, VkStructureType rootType,
                                                    VkNativeBufferUsage2ANDROID* forUnmarshaling,
@@ -1732,6 +1766,54 @@
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* forUnmarshaling, uint8_t** ptr);
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void reservedunmarshal_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyFeaturesEXT* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkMemoryToImageCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkMemoryToImageCopyEXT* forUnmarshaling,
+                                              uint8_t** ptr);
+
+void reservedunmarshal_VkImageToMemoryCopyEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                              VkImageToMemoryCopyEXT* forUnmarshaling,
+                                              uint8_t** ptr);
+
+void reservedunmarshal_VkCopyMemoryToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                                  VkCopyMemoryToImageInfoEXT* forUnmarshaling,
+                                                  uint8_t** ptr);
+
+void reservedunmarshal_VkCopyImageToMemoryInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                                  VkCopyImageToMemoryInfoEXT* forUnmarshaling,
+                                                  uint8_t** ptr);
+
+void reservedunmarshal_VkCopyImageToImageInfoEXT(VulkanStream* vkStream, VkStructureType rootType,
+                                                 VkCopyImageToImageInfoEXT* forUnmarshaling,
+                                                 uint8_t** ptr);
+
+void reservedunmarshal_VkHostImageLayoutTransitionInfoEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageLayoutTransitionInfoEXT* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkSubresourceHostMemcpySizeEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkSubresourceHostMemcpySizeEXT* forUnmarshaling, uint8_t** ptr);
+
+void reservedunmarshal_VkHostImageCopyDevicePerformanceQueryEXT(
+    VulkanStream* vkStream, VkStructureType rootType,
+    VkHostImageCopyDevicePerformanceQueryEXT* forUnmarshaling, uint8_t** ptr);
+
+DEFINE_ALIAS_FUNCTION(reservedunmarshal_VkSubresourceLayout2KHR,
+                      reservedunmarshal_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(reservedunmarshal_VkImageSubresource2KHR,
+                      reservedunmarshal_VkImageSubresource2EXT)
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void reservedunmarshal_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VulkanStream* vkStream, VkStructureType rootType,
@@ -1852,14 +1934,6 @@
                                                     VkImageCompressionControlEXT* forUnmarshaling,
                                                     uint8_t** ptr);
 
-void reservedunmarshal_VkSubresourceLayout2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                               VkSubresourceLayout2EXT* forUnmarshaling,
-                                               uint8_t** ptr);
-
-void reservedunmarshal_VkImageSubresource2EXT(VulkanStream* vkStream, VkStructureType rootType,
-                                              VkImageSubresource2EXT* forUnmarshaling,
-                                              uint8_t** ptr);
-
 void reservedunmarshal_VkImageCompressionPropertiesEXT(
     VulkanStream* vkStream, VkStructureType rootType,
     VkImageCompressionPropertiesEXT* forUnmarshaling, uint8_t** ptr);
diff --git a/host/vulkan/cereal/common/goldfish_vk_transform.cpp b/host/vulkan/cereal/common/goldfish_vk_transform.cpp
index 33a9c9e..b0e4a1a 100644
--- a/host/vulkan/cereal/common/goldfish_vk_transform.cpp
+++ b/host/vulkan/cereal/common/goldfish_vk_transform.cpp
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_transform
 //
-// (impl) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (impl) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -6766,6 +6766,178 @@
 #endif
 #ifdef VK_KHR_maintenance4
 #endif
+#ifdef VK_KHR_maintenance5
+void transform_tohost_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5FeaturesKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5FeaturesKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5PropertiesKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5PropertiesKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkRenderingAreaInfoKHR(VkDecoderGlobalState* resourceTracker,
+                                             VkRenderingAreaInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkRenderingAreaInfoKHR(VkDecoderGlobalState* resourceTracker,
+                                               VkRenderingAreaInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkImageSubresource2KHR(VkDecoderGlobalState* resourceTracker,
+                                             VkImageSubresource2KHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_tohost_VkImageSubresource(resourceTracker,
+                                        (VkImageSubresource*)(&toTransform->imageSubresource));
+}
+
+void transform_fromhost_VkImageSubresource2KHR(VkDecoderGlobalState* resourceTracker,
+                                               VkImageSubresource2KHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkImageSubresource(resourceTracker,
+                                          (VkImageSubresource*)(&toTransform->imageSubresource));
+}
+
+void transform_tohost_VkDeviceImageSubresourceInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkDeviceImageSubresourceInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pCreateInfo) {
+        resourceTracker->transformImpl_VkImageCreateInfo_tohost(toTransform->pCreateInfo, 1);
+        transform_tohost_VkImageCreateInfo(resourceTracker,
+                                           (VkImageCreateInfo*)(toTransform->pCreateInfo));
+    }
+    if (toTransform->pSubresource) {
+        transform_tohost_VkImageSubresource2KHR(
+            resourceTracker, (VkImageSubresource2KHR*)(toTransform->pSubresource));
+    }
+}
+
+void transform_fromhost_VkDeviceImageSubresourceInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkDeviceImageSubresourceInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform->pCreateInfo) {
+        resourceTracker->transformImpl_VkImageCreateInfo_fromhost(toTransform->pCreateInfo, 1);
+        transform_fromhost_VkImageCreateInfo(resourceTracker,
+                                             (VkImageCreateInfo*)(toTransform->pCreateInfo));
+    }
+    if (toTransform->pSubresource) {
+        transform_fromhost_VkImageSubresource2KHR(
+            resourceTracker, (VkImageSubresource2KHR*)(toTransform->pSubresource));
+    }
+}
+
+void transform_tohost_VkSubresourceLayout2KHR(VkDecoderGlobalState* resourceTracker,
+                                              VkSubresourceLayout2KHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_tohost_VkSubresourceLayout(resourceTracker,
+                                         (VkSubresourceLayout*)(&toTransform->subresourceLayout));
+}
+
+void transform_fromhost_VkSubresourceLayout2KHR(VkDecoderGlobalState* resourceTracker,
+                                                VkSubresourceLayout2KHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkSubresourceLayout(resourceTracker,
+                                           (VkSubresourceLayout*)(&toTransform->subresourceLayout));
+}
+
+void transform_tohost_VkPipelineCreateFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkPipelineCreateFlags2CreateInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPipelineCreateFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkPipelineCreateFlags2CreateInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkBufferUsageFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkBufferUsageFlags2CreateInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkBufferUsageFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkBufferUsageFlags2CreateInfoKHR* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void transform_tohost_VkNativeBufferUsage2ANDROID(VkDecoderGlobalState* resourceTracker,
                                                   VkNativeBufferUsage2ANDROID* toTransform) {
@@ -7094,6 +7266,258 @@
 }
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void transform_tohost_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceHostImageCopyFeaturesEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceHostImageCopyFeaturesEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VkDecoderGlobalState* resourceTracker,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VkDecoderGlobalState* resourceTracker,
+    VkPhysicalDeviceHostImageCopyPropertiesEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkMemoryToImageCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                             VkMemoryToImageCopyEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_tohost_VkImageSubresourceLayers(
+        resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
+}
+
+void transform_fromhost_VkMemoryToImageCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                               VkMemoryToImageCopyEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkImageSubresourceLayers(
+        resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
+}
+
+void transform_tohost_VkImageToMemoryCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                             VkImageToMemoryCopyEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_tohost_VkImageSubresourceLayers(
+        resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
+    transform_tohost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
+    transform_tohost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
+}
+
+void transform_fromhost_VkImageToMemoryCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                               VkImageToMemoryCopyEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_fromhost_VkImageSubresourceLayers(
+        resourceTracker, (VkImageSubresourceLayers*)(&toTransform->imageSubresource));
+    transform_fromhost_VkOffset3D(resourceTracker, (VkOffset3D*)(&toTransform->imageOffset));
+    transform_fromhost_VkExtent3D(resourceTracker, (VkExtent3D*)(&toTransform->imageExtent));
+}
+
+void transform_tohost_VkCopyMemoryToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                 VkCopyMemoryToImageInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform) {
+        if (toTransform->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toTransform->regionCount; ++i) {
+                transform_tohost_VkMemoryToImageCopyEXT(
+                    resourceTracker, (VkMemoryToImageCopyEXT*)(toTransform->pRegions + i));
+            }
+        }
+    }
+}
+
+void transform_fromhost_VkCopyMemoryToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                   VkCopyMemoryToImageInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform) {
+        if (toTransform->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toTransform->regionCount; ++i) {
+                transform_fromhost_VkMemoryToImageCopyEXT(
+                    resourceTracker, (VkMemoryToImageCopyEXT*)(toTransform->pRegions + i));
+            }
+        }
+    }
+}
+
+void transform_tohost_VkCopyImageToMemoryInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                 VkCopyImageToMemoryInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform) {
+        if (toTransform->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toTransform->regionCount; ++i) {
+                transform_tohost_VkImageToMemoryCopyEXT(
+                    resourceTracker, (VkImageToMemoryCopyEXT*)(toTransform->pRegions + i));
+            }
+        }
+    }
+}
+
+void transform_fromhost_VkCopyImageToMemoryInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                   VkCopyImageToMemoryInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform) {
+        if (toTransform->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toTransform->regionCount; ++i) {
+                transform_fromhost_VkImageToMemoryCopyEXT(
+                    resourceTracker, (VkImageToMemoryCopyEXT*)(toTransform->pRegions + i));
+            }
+        }
+    }
+}
+
+void transform_tohost_VkCopyImageToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                VkCopyImageToImageInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform) {
+        if (toTransform->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toTransform->regionCount; ++i) {
+                transform_tohost_VkImageCopy2(resourceTracker,
+                                              (VkImageCopy2*)(toTransform->pRegions + i));
+            }
+        }
+    }
+}
+
+void transform_fromhost_VkCopyImageToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                  VkCopyImageToImageInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    if (toTransform) {
+        if (toTransform->pRegions) {
+            for (uint32_t i = 0; i < (uint32_t)toTransform->regionCount; ++i) {
+                transform_fromhost_VkImageCopy2(resourceTracker,
+                                                (VkImageCopy2*)(toTransform->pRegions + i));
+            }
+        }
+    }
+}
+
+void transform_tohost_VkHostImageLayoutTransitionInfoEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageLayoutTransitionInfoEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+    transform_tohost_VkImageSubresourceRange(
+        resourceTracker, (VkImageSubresourceRange*)(&toTransform->subresourceRange));
+}
+
+void transform_fromhost_VkHostImageLayoutTransitionInfoEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageLayoutTransitionInfoEXT* 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_VkSubresourceHostMemcpySizeEXT(VkDecoderGlobalState* resourceTracker,
+                                                     VkSubresourceHostMemcpySizeEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkSubresourceHostMemcpySizeEXT(
+    VkDecoderGlobalState* resourceTracker, VkSubresourceHostMemcpySizeEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_tohost_VkHostImageCopyDevicePerformanceQueryEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageCopyDevicePerformanceQueryEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+void transform_fromhost_VkHostImageCopyDevicePerformanceQueryEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageCopyDevicePerformanceQueryEXT* toTransform) {
+    (void)resourceTracker;
+    (void)toTransform;
+    if (toTransform->pNext) {
+        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
+    }
+}
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void transform_tohost_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VkDecoderGlobalState* resourceTracker,
@@ -7479,50 +7903,6 @@
     }
 }
 
-void transform_tohost_VkSubresourceLayout2EXT(VkDecoderGlobalState* resourceTracker,
-                                              VkSubresourceLayout2EXT* toTransform) {
-    (void)resourceTracker;
-    (void)toTransform;
-    if (toTransform->pNext) {
-        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
-    }
-    transform_tohost_VkSubresourceLayout(resourceTracker,
-                                         (VkSubresourceLayout*)(&toTransform->subresourceLayout));
-}
-
-void transform_fromhost_VkSubresourceLayout2EXT(VkDecoderGlobalState* resourceTracker,
-                                                VkSubresourceLayout2EXT* toTransform) {
-    (void)resourceTracker;
-    (void)toTransform;
-    if (toTransform->pNext) {
-        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
-    }
-    transform_fromhost_VkSubresourceLayout(resourceTracker,
-                                           (VkSubresourceLayout*)(&toTransform->subresourceLayout));
-}
-
-void transform_tohost_VkImageSubresource2EXT(VkDecoderGlobalState* resourceTracker,
-                                             VkImageSubresource2EXT* toTransform) {
-    (void)resourceTracker;
-    (void)toTransform;
-    if (toTransform->pNext) {
-        transform_tohost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
-    }
-    transform_tohost_VkImageSubresource(resourceTracker,
-                                        (VkImageSubresource*)(&toTransform->imageSubresource));
-}
-
-void transform_fromhost_VkImageSubresource2EXT(VkDecoderGlobalState* resourceTracker,
-                                               VkImageSubresource2EXT* toTransform) {
-    (void)resourceTracker;
-    (void)toTransform;
-    if (toTransform->pNext) {
-        transform_fromhost_extension_struct(resourceTracker, (void*)(toTransform->pNext));
-    }
-    transform_fromhost_VkImageSubresource(resourceTracker,
-                                          (VkImageSubresource*)(&toTransform->imageSubresource));
-}
-
 void transform_tohost_VkImageCompressionPropertiesEXT(
     VkDecoderGlobalState* resourceTracker, VkImageCompressionPropertiesEXT* toTransform) {
     (void)resourceTracker;
@@ -8433,6 +8813,32 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            transform_tohost_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            transform_tohost_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            transform_tohost_VkPipelineCreateFlags2CreateInfoKHR(
+                resourceTracker,
+                reinterpret_cast<VkPipelineCreateFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            transform_tohost_VkBufferUsageFlags2CreateInfoKHR(
+                resourceTracker,
+                reinterpret_cast<VkBufferUsageFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             transform_tohost_VkNativeBufferANDROID(
@@ -8517,6 +8923,32 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            transform_tohost_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            transform_tohost_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            transform_tohost_VkSubresourceHostMemcpySizeEXT(
+                resourceTracker,
+                reinterpret_cast<VkSubresourceHostMemcpySizeEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            transform_tohost_VkHostImageCopyDevicePerformanceQueryEXT(
+                resourceTracker,
+                reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             transform_tohost_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
@@ -9449,6 +9881,32 @@
             break;
         }
 #endif
+#ifdef VK_KHR_maintenance5
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_FEATURES_KHR: {
+            transform_fromhost_VkPhysicalDeviceMaintenance5FeaturesKHR(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5FeaturesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_5_PROPERTIES_KHR: {
+            transform_fromhost_VkPhysicalDeviceMaintenance5PropertiesKHR(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceMaintenance5PropertiesKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PIPELINE_CREATE_FLAGS_2_CREATE_INFO_KHR: {
+            transform_fromhost_VkPipelineCreateFlags2CreateInfoKHR(
+                resourceTracker,
+                reinterpret_cast<VkPipelineCreateFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_BUFFER_USAGE_FLAGS_2_CREATE_INFO_KHR: {
+            transform_fromhost_VkBufferUsageFlags2CreateInfoKHR(
+                resourceTracker,
+                reinterpret_cast<VkBufferUsageFlags2CreateInfoKHR*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_ANDROID_native_buffer
         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID: {
             transform_fromhost_VkNativeBufferANDROID(
@@ -9533,6 +9991,32 @@
             break;
         }
 #endif
+#ifdef VK_EXT_host_image_copy
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_FEATURES_EXT: {
+            transform_fromhost_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyFeaturesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_HOST_IMAGE_COPY_PROPERTIES_EXT: {
+            transform_fromhost_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+                resourceTracker,
+                reinterpret_cast<VkPhysicalDeviceHostImageCopyPropertiesEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_SUBRESOURCE_HOST_MEMCPY_SIZE_EXT: {
+            transform_fromhost_VkSubresourceHostMemcpySizeEXT(
+                resourceTracker,
+                reinterpret_cast<VkSubresourceHostMemcpySizeEXT*>(structExtension_out));
+            break;
+        }
+        case VK_STRUCTURE_TYPE_HOST_IMAGE_COPY_DEVICE_PERFORMANCE_QUERY_EXT: {
+            transform_fromhost_VkHostImageCopyDevicePerformanceQueryEXT(
+                resourceTracker,
+                reinterpret_cast<VkHostImageCopyDevicePerformanceQueryEXT*>(structExtension_out));
+            break;
+        }
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SWAPCHAIN_MAINTENANCE_1_FEATURES_EXT: {
             transform_fromhost_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
diff --git a/host/vulkan/cereal/common/goldfish_vk_transform.h b/host/vulkan/cereal/common/goldfish_vk_transform.h
index 9135da1..29c74d3 100644
--- a/host/vulkan/cereal/common/goldfish_vk_transform.h
+++ b/host/vulkan/cereal/common/goldfish_vk_transform.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module goldfish_vk_transform
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
@@ -34,7 +34,7 @@
 
 #include "goldfish_vk_extension_structs.h"
 #include "goldfish_vk_private_defs.h"
-#include "vk_android_native_buffer.h"
+#include "vk_android_native_buffer_gfxstream.h"
 #include "vulkan_gfxstream.h"
 
 namespace gfxstream {
@@ -2668,6 +2668,56 @@
                       transform_fromhost_VkDeviceImageMemoryRequirementsKHR)
 
 #endif
+#ifdef VK_KHR_maintenance5
+void transform_tohost_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5FeaturesKHR* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceMaintenance5FeaturesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5FeaturesKHR* toTransform);
+
+void transform_tohost_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5PropertiesKHR* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceMaintenance5PropertiesKHR(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceMaintenance5PropertiesKHR* toTransform);
+
+void transform_tohost_VkRenderingAreaInfoKHR(VkDecoderGlobalState* resourceTracker,
+                                             VkRenderingAreaInfoKHR* toTransform);
+
+void transform_fromhost_VkRenderingAreaInfoKHR(VkDecoderGlobalState* resourceTracker,
+                                               VkRenderingAreaInfoKHR* toTransform);
+
+void transform_tohost_VkImageSubresource2KHR(VkDecoderGlobalState* resourceTracker,
+                                             VkImageSubresource2KHR* toTransform);
+
+void transform_fromhost_VkImageSubresource2KHR(VkDecoderGlobalState* resourceTracker,
+                                               VkImageSubresource2KHR* toTransform);
+
+void transform_tohost_VkDeviceImageSubresourceInfoKHR(VkDecoderGlobalState* resourceTracker,
+                                                      VkDeviceImageSubresourceInfoKHR* toTransform);
+
+void transform_fromhost_VkDeviceImageSubresourceInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkDeviceImageSubresourceInfoKHR* toTransform);
+
+void transform_tohost_VkSubresourceLayout2KHR(VkDecoderGlobalState* resourceTracker,
+                                              VkSubresourceLayout2KHR* toTransform);
+
+void transform_fromhost_VkSubresourceLayout2KHR(VkDecoderGlobalState* resourceTracker,
+                                                VkSubresourceLayout2KHR* toTransform);
+
+void transform_tohost_VkPipelineCreateFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkPipelineCreateFlags2CreateInfoKHR* toTransform);
+
+void transform_fromhost_VkPipelineCreateFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkPipelineCreateFlags2CreateInfoKHR* toTransform);
+
+void transform_tohost_VkBufferUsageFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkBufferUsageFlags2CreateInfoKHR* toTransform);
+
+void transform_fromhost_VkBufferUsageFlags2CreateInfoKHR(
+    VkDecoderGlobalState* resourceTracker, VkBufferUsageFlags2CreateInfoKHR* toTransform);
+
+#endif
 #ifdef VK_ANDROID_native_buffer
 void transform_tohost_VkNativeBufferUsage2ANDROID(VkDecoderGlobalState* resourceTracker,
                                                   VkNativeBufferUsage2ANDROID* toTransform);
@@ -2882,6 +2932,80 @@
     VkPhysicalDeviceExtendedDynamicStateFeaturesEXT* toTransform);
 
 #endif
+#ifdef VK_EXT_host_image_copy
+void transform_tohost_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceHostImageCopyFeaturesEXT* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceHostImageCopyFeaturesEXT(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceHostImageCopyFeaturesEXT* toTransform);
+
+void transform_tohost_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceHostImageCopyPropertiesEXT* toTransform);
+
+void transform_fromhost_VkPhysicalDeviceHostImageCopyPropertiesEXT(
+    VkDecoderGlobalState* resourceTracker, VkPhysicalDeviceHostImageCopyPropertiesEXT* toTransform);
+
+void transform_tohost_VkMemoryToImageCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                             VkMemoryToImageCopyEXT* toTransform);
+
+void transform_fromhost_VkMemoryToImageCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                               VkMemoryToImageCopyEXT* toTransform);
+
+void transform_tohost_VkImageToMemoryCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                             VkImageToMemoryCopyEXT* toTransform);
+
+void transform_fromhost_VkImageToMemoryCopyEXT(VkDecoderGlobalState* resourceTracker,
+                                               VkImageToMemoryCopyEXT* toTransform);
+
+void transform_tohost_VkCopyMemoryToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                 VkCopyMemoryToImageInfoEXT* toTransform);
+
+void transform_fromhost_VkCopyMemoryToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                   VkCopyMemoryToImageInfoEXT* toTransform);
+
+void transform_tohost_VkCopyImageToMemoryInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                 VkCopyImageToMemoryInfoEXT* toTransform);
+
+void transform_fromhost_VkCopyImageToMemoryInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                   VkCopyImageToMemoryInfoEXT* toTransform);
+
+void transform_tohost_VkCopyImageToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                VkCopyImageToImageInfoEXT* toTransform);
+
+void transform_fromhost_VkCopyImageToImageInfoEXT(VkDecoderGlobalState* resourceTracker,
+                                                  VkCopyImageToImageInfoEXT* toTransform);
+
+void transform_tohost_VkHostImageLayoutTransitionInfoEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageLayoutTransitionInfoEXT* toTransform);
+
+void transform_fromhost_VkHostImageLayoutTransitionInfoEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageLayoutTransitionInfoEXT* toTransform);
+
+void transform_tohost_VkSubresourceHostMemcpySizeEXT(VkDecoderGlobalState* resourceTracker,
+                                                     VkSubresourceHostMemcpySizeEXT* toTransform);
+
+void transform_fromhost_VkSubresourceHostMemcpySizeEXT(VkDecoderGlobalState* resourceTracker,
+                                                       VkSubresourceHostMemcpySizeEXT* toTransform);
+
+void transform_tohost_VkHostImageCopyDevicePerformanceQueryEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageCopyDevicePerformanceQueryEXT* toTransform);
+
+void transform_fromhost_VkHostImageCopyDevicePerformanceQueryEXT(
+    VkDecoderGlobalState* resourceTracker, VkHostImageCopyDevicePerformanceQueryEXT* toTransform);
+
+DEFINE_ALIAS_FUNCTION(transform_tohost_VkSubresourceLayout2KHR,
+                      transform_tohost_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(transform_fromhost_VkSubresourceLayout2KHR,
+                      transform_fromhost_VkSubresourceLayout2EXT)
+
+DEFINE_ALIAS_FUNCTION(transform_tohost_VkImageSubresource2KHR,
+                      transform_tohost_VkImageSubresource2EXT)
+
+DEFINE_ALIAS_FUNCTION(transform_fromhost_VkImageSubresource2KHR,
+                      transform_fromhost_VkImageSubresource2EXT)
+
+#endif
 #ifdef VK_EXT_swapchain_maintenance1
 void transform_tohost_VkPhysicalDeviceSwapchainMaintenance1FeaturesEXT(
     VkDecoderGlobalState* resourceTracker,
@@ -3077,18 +3201,6 @@
 void transform_fromhost_VkImageCompressionControlEXT(VkDecoderGlobalState* resourceTracker,
                                                      VkImageCompressionControlEXT* toTransform);
 
-void transform_tohost_VkSubresourceLayout2EXT(VkDecoderGlobalState* resourceTracker,
-                                              VkSubresourceLayout2EXT* toTransform);
-
-void transform_fromhost_VkSubresourceLayout2EXT(VkDecoderGlobalState* resourceTracker,
-                                                VkSubresourceLayout2EXT* toTransform);
-
-void transform_tohost_VkImageSubresource2EXT(VkDecoderGlobalState* resourceTracker,
-                                             VkImageSubresource2EXT* toTransform);
-
-void transform_fromhost_VkImageSubresource2EXT(VkDecoderGlobalState* resourceTracker,
-                                               VkImageSubresource2EXT* toTransform);
-
 void transform_tohost_VkImageCompressionPropertiesEXT(VkDecoderGlobalState* resourceTracker,
                                                       VkImageCompressionPropertiesEXT* toTransform);
 
diff --git a/host/vulkan/vk_android_native_buffer.h b/host/vulkan/vk_android_native_buffer.h
deleted file mode 100644
index 6e2060b..0000000
--- a/host/vulkan/vk_android_native_buffer.h
+++ /dev/null
@@ -1,116 +0,0 @@
-// Copyright (C) 2022 The Android Open Source Project
-// Copyright (C) 2022 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 header vk_android_native_buffer.h
-// Please do not modify directly;
-// re-run scripts/generate-vulkan-sources.sh,
-// or directly from Python by calling the genvk.py script with correct parameters.
-//
-// This header is generated to support building the Gfxstream host components
-// with system installed Vulkan headers instead of with Gfxstream's generated
-// headers. Gfxstream's generated Vulkan headers include the Android extension
-// in vulkan/vulkan_core.h due to local edits (see `supported="vulkan"`) but
-// standard Vulkan headers do not. However, the host should still be able to
-// support an Android guest. Gfxstream could be updated in the future to always
-// generate and use the separate vulkan/vk_android_native_buffer.h to
-// consolidate the builds.
-
-#pragma once
-#ifndef VK_ANDROID_native_buffer
-#include "vk_android_native_buffer_structure_type.h"
-#endif /* VK_ANDROID_native_buffer */
-
-#ifdef __cplusplus
-extern "C" {
-#endif
-
-#ifndef VK_ANDROID_native_buffer
-
-#define VK_ANDROID_native_buffer 1
-#define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 8
-#define VK_ANDROID_NATIVE_BUFFER_NUMBER 11
-#define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME "VK_ANDROID_native_buffer"
-#define VK_ANDROID_NATIVE_BUFFER_NAME VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME
-
-typedef enum VkSwapchainImageUsageFlagBitsANDROID {
-    VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001,
-    VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM_ANDROID = 0x7FFFFFFF
-} VkSwapchainImageUsageFlagBitsANDROID;
-typedef VkFlags VkSwapchainImageUsageFlagsANDROID;
-typedef struct VkNativeBufferUsage2ANDROID {
-    uint64_t consumer;
-    uint64_t producer;
-} VkNativeBufferUsage2ANDROID;
-
-typedef struct VkNativeBufferANDROID {
-    VkStructureType sType;
-    const void* pNext;
-    const uint32_t* handle;
-    int stride;
-    int format;
-    int usage;
-    VkNativeBufferUsage2ANDROID usage2;
-} VkNativeBufferANDROID;
-
-typedef struct VkSwapchainImageCreateInfoANDROID {
-    VkStructureType sType;
-    const void* pNext;
-    VkSwapchainImageUsageFlagsANDROID usage;
-} VkSwapchainImageCreateInfoANDROID;
-
-typedef struct VkPhysicalDevicePresentationPropertiesANDROID {
-    VkStructureType sType;
-    const void* pNext;
-    VkBool32 sharedImage;
-} VkPhysicalDevicePresentationPropertiesANDROID;
-
-typedef VkResult(VKAPI_PTR* PFN_vkGetSwapchainGrallocUsageANDROID)(VkDevice device, VkFormat format,
-                                                                   VkImageUsageFlags imageUsage,
-                                                                   int* grallocUsage);
-typedef VkResult(VKAPI_PTR* PFN_vkAcquireImageANDROID)(VkDevice device, VkImage image,
-                                                       int nativeFenceFd, VkSemaphore semaphore,
-                                                       VkFence fence);
-typedef VkResult(VKAPI_PTR* PFN_vkQueueSignalReleaseImageANDROID)(
-    VkQueue queue, uint32_t waitSemaphoreCount, const VkSemaphore* pWaitSemaphores, VkImage image,
-    int* pNativeFenceFd);
-typedef VkResult(VKAPI_PTR* PFN_vkGetSwapchainGrallocUsage2ANDROID)(
-    VkDevice device, VkFormat format, VkImageUsageFlags imageUsage,
-    VkSwapchainImageUsageFlagsANDROID swapchainImageUsage, uint64_t* grallocConsumerUsage,
-    uint64_t* grallocProducerUsage);
-
-#ifndef VK_NO_PROTOTYPES
-VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsageANDROID(VkDevice device, VkFormat format,
-                                                                 VkImageUsageFlags imageUsage,
-                                                                 int* grallocUsage);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID(VkDevice device, VkImage image,
-                                                     int nativeFenceFd, VkSemaphore semaphore,
-                                                     VkFence fence);
-
-VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalReleaseImageANDROID(VkQueue queue,
-                                                                uint32_t waitSemaphoreCount,
-                                                                const VkSemaphore* pWaitSemaphores,
-                                                                VkImage image, int* pNativeFenceFd);
-
-VKAPI_ATTR VkResult VKAPI_CALL
-vkGetSwapchainGrallocUsage2ANDROID(VkDevice device, VkFormat format, VkImageUsageFlags imageUsage,
-                                   VkSwapchainImageUsageFlagsANDROID swapchainImageUsage,
-                                   uint64_t* grallocConsumerUsage, uint64_t* grallocProducerUsage);
-#endif
-#endif /* VK_ANDROID_native_buffer */
-
-#ifdef __cplusplus
-}
-#endif
diff --git a/host/vulkan/vk_android_native_buffer_gfxstream.h b/host/vulkan/vk_android_native_buffer_gfxstream.h
new file mode 100644
index 0000000..70f3696
--- /dev/null
+++ b/host/vulkan/vk_android_native_buffer_gfxstream.h
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2015 The Android Open Source Project
+ *
+ * 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.
+ */
+
+#ifndef __VK_ANDROID_NATIVE_BUFFER_H__
+#define __VK_ANDROID_NATIVE_BUFFER_H__
+
+/* MESA: A hack to avoid #ifdefs in driver code. */
+#if defined(ANDROID)
+#include <cutils/native_handle.h>
+#include <vulkan/vulkan.h>
+
+#if ANDROID_API_LEVEL < 28
+/* buffer_handle_t was defined in the deprecated system/window.h */
+typedef const native_handle_t* buffer_handle_t;
+#endif
+
+#else
+typedef void* buffer_handle_t;
+#endif
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+#define VK_ANDROID_native_buffer 1
+
+#define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER 11
+/*
+ * NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 6
+ *
+ * This version of the extension transitions from gralloc0 to gralloc1 usage
+ * flags (int -> 2x uint64_t). The WSI implementation will temporarily continue
+ * to fill out deprecated fields in VkNativeBufferANDROID, and will call the
+ * deprecated vkGetSwapchainGrallocUsageANDROID if the new
+ * vkGetSwapchainGrallocUsage2ANDROID is not supported. This transitionary
+ * backwards-compatibility support is temporary, and will likely be removed
+ * (along with all gralloc0 support) in a future release.
+ */
+/*
+ * NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 8
+ *
+ * This version of the extension doesn't introduce new types or structs, but is
+ * to accommodate the new struct VkBindImageMemorySwapchainInfoKHR added in
+ * VK_KHR_swapchain spec version 69. When VkBindImageMemorySwapchainInfoKHR is
+ * chained in the pNext chain of VkBindImageMemoryInfo, a VkNativeBufferANDROID
+ * that holds the correct gralloc handle according to the imageIndex specified
+ * in VkBindImageMemorySwapchainInfoKHR will be additionally chained to the
+ * pNext chain of VkBindImageMemoryInfo and passed down to the driver.
+ */
+/*
+ * NOTE ON VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 9
+ *
+ * This version of the extension is largely designed to clean up the mix of
+ * GrallocUsage and GrallocUsage2
+ */
+#define VK_ANDROID_NATIVE_BUFFER_SPEC_VERSION 9
+#define VK_ANDROID_NATIVE_BUFFER_EXTENSION_NAME "VK_ANDROID_native_buffer"
+
+#define VK_ANDROID_NATIVE_BUFFER_ENUM(type, id) \
+    ((type)(1000000000 + (1000 * (VK_ANDROID_NATIVE_BUFFER_EXTENSION_NUMBER - 1)) + (id)))
+#define VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 0)
+#define VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID \
+    VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 1)
+#define VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID \
+    VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 2)
+#define VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_ANDROID \
+    VK_ANDROID_NATIVE_BUFFER_ENUM(VkStructureType, 3)
+
+/* clang-format off */
+typedef enum VkSwapchainImageUsageFlagBitsANDROID {
+    VK_SWAPCHAIN_IMAGE_USAGE_SHARED_BIT_ANDROID = 0x00000001,
+    VK_SWAPCHAIN_IMAGE_USAGE_FLAG_BITS_MAX_ENUM = 0x7FFFFFFF
+} VkSwapchainImageUsageFlagBitsANDROID;
+typedef VkFlags VkSwapchainImageUsageFlagsANDROID;
+
+/*
+ * struct VkNativeBufferUsage2ANDROID
+ *
+ * consumer: gralloc1 consumer usage flag
+ * producer: gralloc1 producer usage flag
+ */
+typedef struct {
+    uint64_t                          consumer;
+    uint64_t                          producer;
+} VkNativeBufferUsage2ANDROID;
+
+/*
+ * struct VkNativeBufferANDROID
+ *
+ * sType: VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID
+ * pNext: NULL or a pointer to a structure extending this structure
+ * handle: buffer handle returned from gralloc alloc()
+ * stride: stride returned from gralloc alloc()
+ * format: gralloc format requested when the buffer was allocated
+ * usage: gralloc usage requested when the buffer was allocated
+ * usage2: gralloc usage requested when the buffer was allocated
+ * usage3: gralloc usage requested when the buffer was allocated
+ */
+typedef struct {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    const uint32_t*                   handle;
+    int                               stride;
+    int                               format;
+    int                               usage; /* DEPRECATED in SPEC_VERSION 6 */
+    VkNativeBufferUsage2ANDROID       usage2; /* DEPRECATED in SPEC_VERSION 9 */
+    uint64_t                          usage3; /* ADDED in SPEC_VERSION 9 */
+} VkNativeBufferANDROID;
+
+/*
+ * struct VkSwapchainImageCreateInfoANDROID
+ *
+ * sType: VK_STRUCTURE_TYPE_SWAPCHAIN_IMAGE_CREATE_INFO_ANDROID
+ * pNext: NULL or a pointer to a structure extending this structure
+ * usage: is a bitmask of VkSwapchainImageUsageFlagsANDROID
+ */
+typedef struct {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkSwapchainImageUsageFlagsANDROID usage;
+} VkSwapchainImageCreateInfoANDROID;
+
+/*
+ * struct VkPhysicalDevicePresentationPropertiesANDROID
+ *
+ * sType: VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PRESENTATION_PROPERTIES_ANDROID
+ * pNext: NULL or a pointer to a structure extending this structure
+ * sharedImage: specifies if the image can be shared with the display system
+ */
+typedef struct {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkBool32                          sharedImage;
+} VkPhysicalDevicePresentationPropertiesANDROID;
+
+/*
+ * struct VkGrallocUsageInfoANDROID
+ *
+ * sType: VK_STRUCTURE_TYPE_GRALLOC_USAGE_INFO_ANDROID
+ * pNext: NULL or a pointer to a structure extending this structure
+ * format: value specifying the format the image will be created with
+ * imageUsage: bitmask of VkImageUsageFlagBits describing intended usage
+ */
+typedef struct {
+    VkStructureType                   sType;
+    const void*                       pNext;
+    VkFormat                          format;
+    VkImageUsageFlags                 imageUsage;
+} VkGrallocUsageInfoANDROID;
+
+/* DEPRECATED in SPEC_VERSION 6 */
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsageANDROID)(
+    VkDevice                          device,
+    VkFormat                          format,
+    VkImageUsageFlags                 imageUsage,
+    int*                              grallocUsage);
+
+/* DEPRECATED in SPEC_VERSION 9 */
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage2ANDROID)(
+    VkDevice                          device,
+    VkFormat                          format,
+    VkImageUsageFlags                 imageUsage,
+    VkSwapchainImageUsageFlagsANDROID swapchainImageUsage,
+    uint64_t*                         grallocConsumerUsage,
+    uint64_t*                         grallocProducerUsage);
+
+/* ADDED in SPEC_VERSION 9 */
+typedef VkResult (VKAPI_PTR *PFN_vkGetSwapchainGrallocUsage3ANDROID)(
+    VkDevice                          device,
+    const VkGrallocUsageInfoANDROID*  grallocUsageInfo,
+    uint64_t*                         grallocUsage);
+
+typedef VkResult (VKAPI_PTR *PFN_vkAcquireImageANDROID)(
+    VkDevice                          device,
+    VkImage                           image,
+    int                               nativeFenceFd,
+    VkSemaphore                       semaphore,
+    VkFence                           fence);
+
+typedef VkResult (VKAPI_PTR *PFN_vkQueueSignalReleaseImageANDROID)(
+    VkQueue                           queue,
+    uint32_t                          waitSemaphoreCount,
+    const VkSemaphore*                pWaitSemaphores,
+    VkImage                           image,
+    int*                              pNativeFenceFd);
+
+#ifndef VK_NO_PROTOTYPES
+
+/* DEPRECATED in SPEC_VERSION 6 */
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsageANDROID(
+    VkDevice                          device,
+    VkFormat                          format,
+    VkImageUsageFlags                 imageUsage,
+    int*                              grallocUsage
+);
+
+/* DEPRECATED in SPEC_VERSION 9 */
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage2ANDROID(
+    VkDevice                          device,
+    VkFormat                          format,
+    VkImageUsageFlags                 imageUsage,
+    VkSwapchainImageUsageFlagsANDROID swapchainImageUsage,
+    uint64_t*                         grallocConsumerUsage,
+    uint64_t*                         grallocProducerUsage
+);
+
+/* ADDED in SPEC_VERSION 9 */
+VKAPI_ATTR VkResult VKAPI_CALL vkGetSwapchainGrallocUsage3ANDROID(
+    VkDevice                          device,
+    const VkGrallocUsageInfoANDROID*  grallocUsageInfo,
+    uint64_t*                         grallocUsage
+);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkAcquireImageANDROID(
+    VkDevice                          device,
+    VkImage                           image,
+    int                               nativeFenceFd,
+    VkSemaphore                       semaphore,
+    VkFence                           fence
+);
+
+VKAPI_ATTR VkResult VKAPI_CALL vkQueueSignalReleaseImageANDROID(
+    VkQueue                           queue,
+    uint32_t                          waitSemaphoreCount,
+    const VkSemaphore*                pWaitSemaphores,
+    VkImage                           image,
+    int*                              pNativeFenceFd
+);
+
+#endif
+/* clang-format on */
+
+#ifdef __cplusplus
+}
+#endif
+
+#endif /* __VK_ANDROID_NATIVE_BUFFER_H__ */
diff --git a/host/vulkan/vk_android_native_buffer_structure_type.h b/host/vulkan/vk_android_native_buffer_structure_type.h
index 81accfa..caa7ec6 100644
--- a/host/vulkan/vk_android_native_buffer_structure_type.h
+++ b/host/vulkan/vk_android_native_buffer_structure_type.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module vk_android_native_buffer_structure_type
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
diff --git a/host/vulkan/vulkan_gfxstream.h b/host/vulkan/vulkan_gfxstream.h
index c0e23d5..44ec697 100644
--- a/host/vulkan/vulkan_gfxstream.h
+++ b/host/vulkan/vulkan_gfxstream.h
@@ -1,22 +1,13 @@
-// Copyright (C) 2022 The Android Open Source Project
-// Copyright (C) 2022 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 header vulkan_gfxstream.h
-// Please do not modify directly;
-// re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,
-// or directly from Python by calling the genvk.py script with correct parameters.
+/*
+** Copyright 2015-2023 The Khronos Group Inc.
+**
+** SPDX-License-Identifier: Apache-2.0
+*/
+
+/*
+** This header is generated from the Khronos Vulkan XML API Registry.
+**
+*/
 
 #pragma once
 #ifdef VK_GFXSTREAM_STRUCTURE_TYPE_EXT
@@ -27,6 +18,7 @@
 extern "C" {
 #endif
 
+// VK_GOOGLE_gfxstream is a preprocessor guard. Do not pass it to API calls.
 #define VK_GOOGLE_gfxstream 1
 #define VK_GOOGLE_GFXSTREAM_SPEC_VERSION 0
 #define VK_GOOGLE_GFXSTREAM_NUMBER 386
diff --git a/host/vulkan/vulkan_gfxstream_structure_type.h b/host/vulkan/vulkan_gfxstream_structure_type.h
index 9d89082..7ef8ed8 100644
--- a/host/vulkan/vulkan_gfxstream_structure_type.h
+++ b/host/vulkan/vulkan_gfxstream_structure_type.h
@@ -15,9 +15,9 @@
 
 // Autogenerated module vulkan_gfxstream_structure_type
 //
-// (header) generated by codegen/vulkan/vulkan-docs/scripts/genvk.py -registry
-// codegen/vulkan/vulkan-docs/xml/vk.xml -registryGfxstream
-// codegen/vulkan/vulkan-docs/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
+// (header) generated by codegen/vulkan/vulkan-docs-next/scripts/genvk.py -registry
+// codegen/vulkan/vulkan-docs-next/xml/vk.xml -registryGfxstream
+// codegen/vulkan/vulkan-docs-next/xml/vk_gfxstream.xml cereal -o host/vulkan/cereal
 //
 // Please do not modify directly;
 // re-run gfxstream-protocols/scripts/generate-vulkan-sources.sh,