Home | History | Annotate | Download | only in vulkan_enc
      1 // Copyright (C) 2018 The Android Open Source Project
      2 // Copyright (C) 2018 Google Inc.
      3 //
      4 // Licensed under the Apache License, Version 2.0 (the "License");
      5 // you may not use this file except in compliance with the License.
      6 // You may obtain a copy of the License at
      7 //
      8 // http://www.apache.org/licenses/LICENSE-2.0
      9 //
     10 // Unless required by applicable law or agreed to in writing, software
     11 // distributed under the License is distributed on an "AS IS" BASIS,
     12 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
     13 // See the License for the specific language governing permissions and
     14 // limitations under the License.
     15 
     16 // Autogenerated module goldfish_vk_deepcopy_guest
     17 // (impl) generated by android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/genvk.py -registry android/android-emugl/host/libs/libOpenglRender/vulkan-registry/xml/vk.xml cereal -o android/android-emugl/host/libs/libOpenglRender/vulkan/cereal
     18 // Please do not modify directly;
     19 // re-run android/scripts/generate-vulkan-sources.sh,
     20 // or directly from Python by defining:
     21 // VULKAN_REGISTRY_XML_DIR : Directory containing genvk.py and vk.xml
     22 // CEREAL_OUTPUT_DIR: Where to put the generated sources.
     23 // python3 $VULKAN_REGISTRY_XML_DIR/genvk.py -registry $VULKAN_REGISTRY_XML_DIR/vk.xml cereal -o $CEREAL_OUTPUT_DIR
     24 
     25 #include "goldfish_vk_deepcopy_guest.h"
     26 
     27 
     28 #include "goldfish_vk_extension_structs_guest.h"
     29 #include "goldfish_vk_private_defs.h"
     30 
     31 
     32 namespace goldfish_vk {
     33 
     34 void deepcopy_extension_struct(
     35     Pool* pool,
     36     const void* structExtension,
     37     void* structExtension_out);
     38 
     39 #ifdef VK_VERSION_1_0
     40 void deepcopy_VkApplicationInfo(
     41     Pool* pool,
     42     const VkApplicationInfo* from,
     43     VkApplicationInfo* to)
     44 {
     45     (void)pool;
     46     *to = *from;
     47     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
     48     to->pNext = nullptr;
     49     if (pNext_size)
     50     {
     51         to->pNext = (const void*)pool->alloc(pNext_size);
     52         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
     53     }
     54     to->pApplicationName = nullptr;
     55     if (from->pApplicationName)
     56     {
     57         to->pApplicationName = pool->strDup(from->pApplicationName);
     58     }
     59     to->pEngineName = nullptr;
     60     if (from->pEngineName)
     61     {
     62         to->pEngineName = pool->strDup(from->pEngineName);
     63     }
     64 }
     65 
     66 void deepcopy_VkInstanceCreateInfo(
     67     Pool* pool,
     68     const VkInstanceCreateInfo* from,
     69     VkInstanceCreateInfo* to)
     70 {
     71     (void)pool;
     72     *to = *from;
     73     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
     74     to->pNext = nullptr;
     75     if (pNext_size)
     76     {
     77         to->pNext = (const void*)pool->alloc(pNext_size);
     78         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
     79     }
     80     to->pApplicationInfo = nullptr;
     81     if (from->pApplicationInfo)
     82     {
     83         to->pApplicationInfo = (VkApplicationInfo*)pool->alloc(sizeof(const VkApplicationInfo));
     84         deepcopy_VkApplicationInfo(pool, from->pApplicationInfo, (VkApplicationInfo*)(to->pApplicationInfo));
     85     }
     86     to->ppEnabledLayerNames = nullptr;
     87     if (from->ppEnabledLayerNames && from->enabledLayerCount)
     88     {
     89         to->ppEnabledLayerNames = pool->strDupArray(from->ppEnabledLayerNames, from->enabledLayerCount);
     90     }
     91     to->ppEnabledExtensionNames = nullptr;
     92     if (from->ppEnabledExtensionNames && from->enabledExtensionCount)
     93     {
     94         to->ppEnabledExtensionNames = pool->strDupArray(from->ppEnabledExtensionNames, from->enabledExtensionCount);
     95     }
     96 }
     97 
     98 void deepcopy_VkAllocationCallbacks(
     99     Pool* pool,
    100     const VkAllocationCallbacks* from,
    101     VkAllocationCallbacks* to)
    102 {
    103     (void)pool;
    104     *to = *from;
    105     to->pUserData = nullptr;
    106     if (from->pUserData)
    107     {
    108         to->pUserData = (void*)pool->dupArray(from->pUserData, sizeof(uint8_t));
    109     }
    110 }
    111 
    112 void deepcopy_VkPhysicalDeviceFeatures(
    113     Pool* pool,
    114     const VkPhysicalDeviceFeatures* from,
    115     VkPhysicalDeviceFeatures* to)
    116 {
    117     (void)pool;
    118     *to = *from;
    119 }
    120 
    121 void deepcopy_VkFormatProperties(
    122     Pool* pool,
    123     const VkFormatProperties* from,
    124     VkFormatProperties* to)
    125 {
    126     (void)pool;
    127     *to = *from;
    128 }
    129 
    130 void deepcopy_VkExtent3D(
    131     Pool* pool,
    132     const VkExtent3D* from,
    133     VkExtent3D* to)
    134 {
    135     (void)pool;
    136     *to = *from;
    137 }
    138 
    139 void deepcopy_VkImageFormatProperties(
    140     Pool* pool,
    141     const VkImageFormatProperties* from,
    142     VkImageFormatProperties* to)
    143 {
    144     (void)pool;
    145     *to = *from;
    146     deepcopy_VkExtent3D(pool, &from->maxExtent, (VkExtent3D*)(&to->maxExtent));
    147 }
    148 
    149 void deepcopy_VkPhysicalDeviceLimits(
    150     Pool* pool,
    151     const VkPhysicalDeviceLimits* from,
    152     VkPhysicalDeviceLimits* to)
    153 {
    154     (void)pool;
    155     *to = *from;
    156     memcpy(to->maxComputeWorkGroupCount, from->maxComputeWorkGroupCount, 3 * sizeof(uint32_t));
    157     memcpy(to->maxComputeWorkGroupSize, from->maxComputeWorkGroupSize, 3 * sizeof(uint32_t));
    158     memcpy(to->maxViewportDimensions, from->maxViewportDimensions, 2 * sizeof(uint32_t));
    159     memcpy(to->viewportBoundsRange, from->viewportBoundsRange, 2 * sizeof(float));
    160     memcpy(to->pointSizeRange, from->pointSizeRange, 2 * sizeof(float));
    161     memcpy(to->lineWidthRange, from->lineWidthRange, 2 * sizeof(float));
    162 }
    163 
    164 void deepcopy_VkPhysicalDeviceSparseProperties(
    165     Pool* pool,
    166     const VkPhysicalDeviceSparseProperties* from,
    167     VkPhysicalDeviceSparseProperties* to)
    168 {
    169     (void)pool;
    170     *to = *from;
    171 }
    172 
    173 void deepcopy_VkPhysicalDeviceProperties(
    174     Pool* pool,
    175     const VkPhysicalDeviceProperties* from,
    176     VkPhysicalDeviceProperties* to)
    177 {
    178     (void)pool;
    179     *to = *from;
    180     memcpy(to->deviceName, from->deviceName, VK_MAX_PHYSICAL_DEVICE_NAME_SIZE * sizeof(char));
    181     memcpy(to->pipelineCacheUUID, from->pipelineCacheUUID, VK_UUID_SIZE * sizeof(uint8_t));
    182     deepcopy_VkPhysicalDeviceLimits(pool, &from->limits, (VkPhysicalDeviceLimits*)(&to->limits));
    183     deepcopy_VkPhysicalDeviceSparseProperties(pool, &from->sparseProperties, (VkPhysicalDeviceSparseProperties*)(&to->sparseProperties));
    184 }
    185 
    186 void deepcopy_VkQueueFamilyProperties(
    187     Pool* pool,
    188     const VkQueueFamilyProperties* from,
    189     VkQueueFamilyProperties* to)
    190 {
    191     (void)pool;
    192     *to = *from;
    193     deepcopy_VkExtent3D(pool, &from->minImageTransferGranularity, (VkExtent3D*)(&to->minImageTransferGranularity));
    194 }
    195 
    196 void deepcopy_VkMemoryType(
    197     Pool* pool,
    198     const VkMemoryType* from,
    199     VkMemoryType* to)
    200 {
    201     (void)pool;
    202     *to = *from;
    203 }
    204 
    205 void deepcopy_VkMemoryHeap(
    206     Pool* pool,
    207     const VkMemoryHeap* from,
    208     VkMemoryHeap* to)
    209 {
    210     (void)pool;
    211     *to = *from;
    212 }
    213 
    214 void deepcopy_VkPhysicalDeviceMemoryProperties(
    215     Pool* pool,
    216     const VkPhysicalDeviceMemoryProperties* from,
    217     VkPhysicalDeviceMemoryProperties* to)
    218 {
    219     (void)pool;
    220     *to = *from;
    221     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_TYPES; ++i)
    222     {
    223         deepcopy_VkMemoryType(pool, from->memoryTypes + i, (VkMemoryType*)(to->memoryTypes + i));
    224     }
    225     for (uint32_t i = 0; i < (uint32_t)VK_MAX_MEMORY_HEAPS; ++i)
    226     {
    227         deepcopy_VkMemoryHeap(pool, from->memoryHeaps + i, (VkMemoryHeap*)(to->memoryHeaps + i));
    228     }
    229 }
    230 
    231 void deepcopy_VkDeviceQueueCreateInfo(
    232     Pool* pool,
    233     const VkDeviceQueueCreateInfo* from,
    234     VkDeviceQueueCreateInfo* to)
    235 {
    236     (void)pool;
    237     *to = *from;
    238     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    239     to->pNext = nullptr;
    240     if (pNext_size)
    241     {
    242         to->pNext = (const void*)pool->alloc(pNext_size);
    243         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    244     }
    245     to->pQueuePriorities = nullptr;
    246     if (from->pQueuePriorities)
    247     {
    248         to->pQueuePriorities = (float*)pool->dupArray(from->pQueuePriorities, from->queueCount * sizeof(const float));
    249     }
    250 }
    251 
    252 void deepcopy_VkDeviceCreateInfo(
    253     Pool* pool,
    254     const VkDeviceCreateInfo* from,
    255     VkDeviceCreateInfo* to)
    256 {
    257     (void)pool;
    258     *to = *from;
    259     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    260     to->pNext = nullptr;
    261     if (pNext_size)
    262     {
    263         to->pNext = (const void*)pool->alloc(pNext_size);
    264         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    265     }
    266     to->pQueueCreateInfos = nullptr;
    267     if (from->pQueueCreateInfos)
    268     {
    269         to->pQueueCreateInfos = (VkDeviceQueueCreateInfo*)pool->alloc(from->queueCreateInfoCount * sizeof(const VkDeviceQueueCreateInfo));
    270         to->queueCreateInfoCount = from->queueCreateInfoCount;
    271         for (uint32_t i = 0; i < (uint32_t)from->queueCreateInfoCount; ++i)
    272         {
    273             deepcopy_VkDeviceQueueCreateInfo(pool, from->pQueueCreateInfos + i, (VkDeviceQueueCreateInfo*)(to->pQueueCreateInfos + i));
    274         }
    275     }
    276     to->ppEnabledLayerNames = nullptr;
    277     if (from->ppEnabledLayerNames && from->enabledLayerCount)
    278     {
    279         to->ppEnabledLayerNames = pool->strDupArray(from->ppEnabledLayerNames, from->enabledLayerCount);
    280     }
    281     to->ppEnabledExtensionNames = nullptr;
    282     if (from->ppEnabledExtensionNames && from->enabledExtensionCount)
    283     {
    284         to->ppEnabledExtensionNames = pool->strDupArray(from->ppEnabledExtensionNames, from->enabledExtensionCount);
    285     }
    286     to->pEnabledFeatures = nullptr;
    287     if (from->pEnabledFeatures)
    288     {
    289         to->pEnabledFeatures = (VkPhysicalDeviceFeatures*)pool->alloc(sizeof(const VkPhysicalDeviceFeatures));
    290         deepcopy_VkPhysicalDeviceFeatures(pool, from->pEnabledFeatures, (VkPhysicalDeviceFeatures*)(to->pEnabledFeatures));
    291     }
    292 }
    293 
    294 void deepcopy_VkExtensionProperties(
    295     Pool* pool,
    296     const VkExtensionProperties* from,
    297     VkExtensionProperties* to)
    298 {
    299     (void)pool;
    300     *to = *from;
    301     memcpy(to->extensionName, from->extensionName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
    302 }
    303 
    304 void deepcopy_VkLayerProperties(
    305     Pool* pool,
    306     const VkLayerProperties* from,
    307     VkLayerProperties* to)
    308 {
    309     (void)pool;
    310     *to = *from;
    311     memcpy(to->layerName, from->layerName, VK_MAX_EXTENSION_NAME_SIZE * sizeof(char));
    312     memcpy(to->description, from->description, VK_MAX_DESCRIPTION_SIZE * sizeof(char));
    313 }
    314 
    315 void deepcopy_VkSubmitInfo(
    316     Pool* pool,
    317     const VkSubmitInfo* from,
    318     VkSubmitInfo* to)
    319 {
    320     (void)pool;
    321     *to = *from;
    322     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    323     to->pNext = nullptr;
    324     if (pNext_size)
    325     {
    326         to->pNext = (const void*)pool->alloc(pNext_size);
    327         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    328     }
    329     to->pWaitSemaphores = nullptr;
    330     if (from->pWaitSemaphores)
    331     {
    332         to->pWaitSemaphores = (VkSemaphore*)pool->dupArray(from->pWaitSemaphores, from->waitSemaphoreCount * sizeof(const VkSemaphore));
    333     }
    334     to->pWaitDstStageMask = nullptr;
    335     if (from->pWaitDstStageMask)
    336     {
    337         to->pWaitDstStageMask = (VkPipelineStageFlags*)pool->dupArray(from->pWaitDstStageMask, from->waitSemaphoreCount * sizeof(const VkPipelineStageFlags));
    338     }
    339     to->pCommandBuffers = nullptr;
    340     if (from->pCommandBuffers)
    341     {
    342         to->pCommandBuffers = (VkCommandBuffer*)pool->dupArray(from->pCommandBuffers, from->commandBufferCount * sizeof(const VkCommandBuffer));
    343     }
    344     to->pSignalSemaphores = nullptr;
    345     if (from->pSignalSemaphores)
    346     {
    347         to->pSignalSemaphores = (VkSemaphore*)pool->dupArray(from->pSignalSemaphores, from->signalSemaphoreCount * sizeof(const VkSemaphore));
    348     }
    349 }
    350 
    351 void deepcopy_VkMemoryAllocateInfo(
    352     Pool* pool,
    353     const VkMemoryAllocateInfo* from,
    354     VkMemoryAllocateInfo* to)
    355 {
    356     (void)pool;
    357     *to = *from;
    358     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    359     to->pNext = nullptr;
    360     if (pNext_size)
    361     {
    362         to->pNext = (const void*)pool->alloc(pNext_size);
    363         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    364     }
    365 }
    366 
    367 void deepcopy_VkMappedMemoryRange(
    368     Pool* pool,
    369     const VkMappedMemoryRange* from,
    370     VkMappedMemoryRange* to)
    371 {
    372     (void)pool;
    373     *to = *from;
    374     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    375     to->pNext = nullptr;
    376     if (pNext_size)
    377     {
    378         to->pNext = (const void*)pool->alloc(pNext_size);
    379         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    380     }
    381 }
    382 
    383 void deepcopy_VkMemoryRequirements(
    384     Pool* pool,
    385     const VkMemoryRequirements* from,
    386     VkMemoryRequirements* to)
    387 {
    388     (void)pool;
    389     *to = *from;
    390 }
    391 
    392 void deepcopy_VkSparseImageFormatProperties(
    393     Pool* pool,
    394     const VkSparseImageFormatProperties* from,
    395     VkSparseImageFormatProperties* to)
    396 {
    397     (void)pool;
    398     *to = *from;
    399     deepcopy_VkExtent3D(pool, &from->imageGranularity, (VkExtent3D*)(&to->imageGranularity));
    400 }
    401 
    402 void deepcopy_VkSparseImageMemoryRequirements(
    403     Pool* pool,
    404     const VkSparseImageMemoryRequirements* from,
    405     VkSparseImageMemoryRequirements* to)
    406 {
    407     (void)pool;
    408     *to = *from;
    409     deepcopy_VkSparseImageFormatProperties(pool, &from->formatProperties, (VkSparseImageFormatProperties*)(&to->formatProperties));
    410 }
    411 
    412 void deepcopy_VkSparseMemoryBind(
    413     Pool* pool,
    414     const VkSparseMemoryBind* from,
    415     VkSparseMemoryBind* to)
    416 {
    417     (void)pool;
    418     *to = *from;
    419 }
    420 
    421 void deepcopy_VkSparseBufferMemoryBindInfo(
    422     Pool* pool,
    423     const VkSparseBufferMemoryBindInfo* from,
    424     VkSparseBufferMemoryBindInfo* to)
    425 {
    426     (void)pool;
    427     *to = *from;
    428     to->pBinds = nullptr;
    429     if (from->pBinds)
    430     {
    431         to->pBinds = (VkSparseMemoryBind*)pool->alloc(from->bindCount * sizeof(const VkSparseMemoryBind));
    432         to->bindCount = from->bindCount;
    433         for (uint32_t i = 0; i < (uint32_t)from->bindCount; ++i)
    434         {
    435             deepcopy_VkSparseMemoryBind(pool, from->pBinds + i, (VkSparseMemoryBind*)(to->pBinds + i));
    436         }
    437     }
    438 }
    439 
    440 void deepcopy_VkSparseImageOpaqueMemoryBindInfo(
    441     Pool* pool,
    442     const VkSparseImageOpaqueMemoryBindInfo* from,
    443     VkSparseImageOpaqueMemoryBindInfo* to)
    444 {
    445     (void)pool;
    446     *to = *from;
    447     to->pBinds = nullptr;
    448     if (from->pBinds)
    449     {
    450         to->pBinds = (VkSparseMemoryBind*)pool->alloc(from->bindCount * sizeof(const VkSparseMemoryBind));
    451         to->bindCount = from->bindCount;
    452         for (uint32_t i = 0; i < (uint32_t)from->bindCount; ++i)
    453         {
    454             deepcopy_VkSparseMemoryBind(pool, from->pBinds + i, (VkSparseMemoryBind*)(to->pBinds + i));
    455         }
    456     }
    457 }
    458 
    459 void deepcopy_VkImageSubresource(
    460     Pool* pool,
    461     const VkImageSubresource* from,
    462     VkImageSubresource* to)
    463 {
    464     (void)pool;
    465     *to = *from;
    466 }
    467 
    468 void deepcopy_VkOffset3D(
    469     Pool* pool,
    470     const VkOffset3D* from,
    471     VkOffset3D* to)
    472 {
    473     (void)pool;
    474     *to = *from;
    475 }
    476 
    477 void deepcopy_VkSparseImageMemoryBind(
    478     Pool* pool,
    479     const VkSparseImageMemoryBind* from,
    480     VkSparseImageMemoryBind* to)
    481 {
    482     (void)pool;
    483     *to = *from;
    484     deepcopy_VkImageSubresource(pool, &from->subresource, (VkImageSubresource*)(&to->subresource));
    485     deepcopy_VkOffset3D(pool, &from->offset, (VkOffset3D*)(&to->offset));
    486     deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
    487 }
    488 
    489 void deepcopy_VkSparseImageMemoryBindInfo(
    490     Pool* pool,
    491     const VkSparseImageMemoryBindInfo* from,
    492     VkSparseImageMemoryBindInfo* to)
    493 {
    494     (void)pool;
    495     *to = *from;
    496     to->pBinds = nullptr;
    497     if (from->pBinds)
    498     {
    499         to->pBinds = (VkSparseImageMemoryBind*)pool->alloc(from->bindCount * sizeof(const VkSparseImageMemoryBind));
    500         to->bindCount = from->bindCount;
    501         for (uint32_t i = 0; i < (uint32_t)from->bindCount; ++i)
    502         {
    503             deepcopy_VkSparseImageMemoryBind(pool, from->pBinds + i, (VkSparseImageMemoryBind*)(to->pBinds + i));
    504         }
    505     }
    506 }
    507 
    508 void deepcopy_VkBindSparseInfo(
    509     Pool* pool,
    510     const VkBindSparseInfo* from,
    511     VkBindSparseInfo* to)
    512 {
    513     (void)pool;
    514     *to = *from;
    515     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    516     to->pNext = nullptr;
    517     if (pNext_size)
    518     {
    519         to->pNext = (const void*)pool->alloc(pNext_size);
    520         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    521     }
    522     to->pWaitSemaphores = nullptr;
    523     if (from->pWaitSemaphores)
    524     {
    525         to->pWaitSemaphores = (VkSemaphore*)pool->dupArray(from->pWaitSemaphores, from->waitSemaphoreCount * sizeof(const VkSemaphore));
    526     }
    527     to->pBufferBinds = nullptr;
    528     if (from->pBufferBinds)
    529     {
    530         to->pBufferBinds = (VkSparseBufferMemoryBindInfo*)pool->alloc(from->bufferBindCount * sizeof(const VkSparseBufferMemoryBindInfo));
    531         to->bufferBindCount = from->bufferBindCount;
    532         for (uint32_t i = 0; i < (uint32_t)from->bufferBindCount; ++i)
    533         {
    534             deepcopy_VkSparseBufferMemoryBindInfo(pool, from->pBufferBinds + i, (VkSparseBufferMemoryBindInfo*)(to->pBufferBinds + i));
    535         }
    536     }
    537     to->pImageOpaqueBinds = nullptr;
    538     if (from->pImageOpaqueBinds)
    539     {
    540         to->pImageOpaqueBinds = (VkSparseImageOpaqueMemoryBindInfo*)pool->alloc(from->imageOpaqueBindCount * sizeof(const VkSparseImageOpaqueMemoryBindInfo));
    541         to->imageOpaqueBindCount = from->imageOpaqueBindCount;
    542         for (uint32_t i = 0; i < (uint32_t)from->imageOpaqueBindCount; ++i)
    543         {
    544             deepcopy_VkSparseImageOpaqueMemoryBindInfo(pool, from->pImageOpaqueBinds + i, (VkSparseImageOpaqueMemoryBindInfo*)(to->pImageOpaqueBinds + i));
    545         }
    546     }
    547     to->pImageBinds = nullptr;
    548     if (from->pImageBinds)
    549     {
    550         to->pImageBinds = (VkSparseImageMemoryBindInfo*)pool->alloc(from->imageBindCount * sizeof(const VkSparseImageMemoryBindInfo));
    551         to->imageBindCount = from->imageBindCount;
    552         for (uint32_t i = 0; i < (uint32_t)from->imageBindCount; ++i)
    553         {
    554             deepcopy_VkSparseImageMemoryBindInfo(pool, from->pImageBinds + i, (VkSparseImageMemoryBindInfo*)(to->pImageBinds + i));
    555         }
    556     }
    557     to->pSignalSemaphores = nullptr;
    558     if (from->pSignalSemaphores)
    559     {
    560         to->pSignalSemaphores = (VkSemaphore*)pool->dupArray(from->pSignalSemaphores, from->signalSemaphoreCount * sizeof(const VkSemaphore));
    561     }
    562 }
    563 
    564 void deepcopy_VkFenceCreateInfo(
    565     Pool* pool,
    566     const VkFenceCreateInfo* from,
    567     VkFenceCreateInfo* to)
    568 {
    569     (void)pool;
    570     *to = *from;
    571     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    572     to->pNext = nullptr;
    573     if (pNext_size)
    574     {
    575         to->pNext = (const void*)pool->alloc(pNext_size);
    576         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    577     }
    578 }
    579 
    580 void deepcopy_VkSemaphoreCreateInfo(
    581     Pool* pool,
    582     const VkSemaphoreCreateInfo* from,
    583     VkSemaphoreCreateInfo* to)
    584 {
    585     (void)pool;
    586     *to = *from;
    587     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    588     to->pNext = nullptr;
    589     if (pNext_size)
    590     {
    591         to->pNext = (const void*)pool->alloc(pNext_size);
    592         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    593     }
    594 }
    595 
    596 void deepcopy_VkEventCreateInfo(
    597     Pool* pool,
    598     const VkEventCreateInfo* from,
    599     VkEventCreateInfo* to)
    600 {
    601     (void)pool;
    602     *to = *from;
    603     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    604     to->pNext = nullptr;
    605     if (pNext_size)
    606     {
    607         to->pNext = (const void*)pool->alloc(pNext_size);
    608         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    609     }
    610 }
    611 
    612 void deepcopy_VkQueryPoolCreateInfo(
    613     Pool* pool,
    614     const VkQueryPoolCreateInfo* from,
    615     VkQueryPoolCreateInfo* to)
    616 {
    617     (void)pool;
    618     *to = *from;
    619     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    620     to->pNext = nullptr;
    621     if (pNext_size)
    622     {
    623         to->pNext = (const void*)pool->alloc(pNext_size);
    624         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    625     }
    626 }
    627 
    628 void deepcopy_VkBufferCreateInfo(
    629     Pool* pool,
    630     const VkBufferCreateInfo* from,
    631     VkBufferCreateInfo* to)
    632 {
    633     (void)pool;
    634     *to = *from;
    635     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    636     to->pNext = nullptr;
    637     if (pNext_size)
    638     {
    639         to->pNext = (const void*)pool->alloc(pNext_size);
    640         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    641     }
    642     to->pQueueFamilyIndices = nullptr;
    643     if (from->pQueueFamilyIndices)
    644     {
    645         to->pQueueFamilyIndices = (uint32_t*)pool->dupArray(from->pQueueFamilyIndices, from->queueFamilyIndexCount * sizeof(const uint32_t));
    646     }
    647 }
    648 
    649 void deepcopy_VkBufferViewCreateInfo(
    650     Pool* pool,
    651     const VkBufferViewCreateInfo* from,
    652     VkBufferViewCreateInfo* to)
    653 {
    654     (void)pool;
    655     *to = *from;
    656     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    657     to->pNext = nullptr;
    658     if (pNext_size)
    659     {
    660         to->pNext = (const void*)pool->alloc(pNext_size);
    661         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    662     }
    663 }
    664 
    665 void deepcopy_VkImageCreateInfo(
    666     Pool* pool,
    667     const VkImageCreateInfo* from,
    668     VkImageCreateInfo* to)
    669 {
    670     (void)pool;
    671     *to = *from;
    672     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    673     to->pNext = nullptr;
    674     if (pNext_size)
    675     {
    676         to->pNext = (const void*)pool->alloc(pNext_size);
    677         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    678     }
    679     deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
    680     to->pQueueFamilyIndices = nullptr;
    681     if (from->pQueueFamilyIndices)
    682     {
    683         to->pQueueFamilyIndices = (uint32_t*)pool->dupArray(from->pQueueFamilyIndices, from->queueFamilyIndexCount * sizeof(const uint32_t));
    684     }
    685 }
    686 
    687 void deepcopy_VkSubresourceLayout(
    688     Pool* pool,
    689     const VkSubresourceLayout* from,
    690     VkSubresourceLayout* to)
    691 {
    692     (void)pool;
    693     *to = *from;
    694 }
    695 
    696 void deepcopy_VkComponentMapping(
    697     Pool* pool,
    698     const VkComponentMapping* from,
    699     VkComponentMapping* to)
    700 {
    701     (void)pool;
    702     *to = *from;
    703 }
    704 
    705 void deepcopy_VkImageSubresourceRange(
    706     Pool* pool,
    707     const VkImageSubresourceRange* from,
    708     VkImageSubresourceRange* to)
    709 {
    710     (void)pool;
    711     *to = *from;
    712 }
    713 
    714 void deepcopy_VkImageViewCreateInfo(
    715     Pool* pool,
    716     const VkImageViewCreateInfo* from,
    717     VkImageViewCreateInfo* to)
    718 {
    719     (void)pool;
    720     *to = *from;
    721     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    722     to->pNext = nullptr;
    723     if (pNext_size)
    724     {
    725         to->pNext = (const void*)pool->alloc(pNext_size);
    726         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    727     }
    728     deepcopy_VkComponentMapping(pool, &from->components, (VkComponentMapping*)(&to->components));
    729     deepcopy_VkImageSubresourceRange(pool, &from->subresourceRange, (VkImageSubresourceRange*)(&to->subresourceRange));
    730 }
    731 
    732 void deepcopy_VkShaderModuleCreateInfo(
    733     Pool* pool,
    734     const VkShaderModuleCreateInfo* from,
    735     VkShaderModuleCreateInfo* to)
    736 {
    737     (void)pool;
    738     *to = *from;
    739     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    740     to->pNext = nullptr;
    741     if (pNext_size)
    742     {
    743         to->pNext = (const void*)pool->alloc(pNext_size);
    744         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    745     }
    746     to->pCode = nullptr;
    747     if (from->pCode)
    748     {
    749         to->pCode = (uint32_t*)pool->dupArray(from->pCode, (from->codeSize / 4) * sizeof(const uint32_t));
    750     }
    751 }
    752 
    753 void deepcopy_VkPipelineCacheCreateInfo(
    754     Pool* pool,
    755     const VkPipelineCacheCreateInfo* from,
    756     VkPipelineCacheCreateInfo* to)
    757 {
    758     (void)pool;
    759     *to = *from;
    760     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    761     to->pNext = nullptr;
    762     if (pNext_size)
    763     {
    764         to->pNext = (const void*)pool->alloc(pNext_size);
    765         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    766     }
    767     to->pInitialData = nullptr;
    768     if (from->pInitialData)
    769     {
    770         to->pInitialData = (void*)pool->dupArray(from->pInitialData, from->initialDataSize * sizeof(const uint8_t));
    771     }
    772 }
    773 
    774 void deepcopy_VkSpecializationMapEntry(
    775     Pool* pool,
    776     const VkSpecializationMapEntry* from,
    777     VkSpecializationMapEntry* to)
    778 {
    779     (void)pool;
    780     *to = *from;
    781 }
    782 
    783 void deepcopy_VkSpecializationInfo(
    784     Pool* pool,
    785     const VkSpecializationInfo* from,
    786     VkSpecializationInfo* to)
    787 {
    788     (void)pool;
    789     *to = *from;
    790     to->pMapEntries = nullptr;
    791     if (from->pMapEntries)
    792     {
    793         to->pMapEntries = (VkSpecializationMapEntry*)pool->alloc(from->mapEntryCount * sizeof(const VkSpecializationMapEntry));
    794         to->mapEntryCount = from->mapEntryCount;
    795         for (uint32_t i = 0; i < (uint32_t)from->mapEntryCount; ++i)
    796         {
    797             deepcopy_VkSpecializationMapEntry(pool, from->pMapEntries + i, (VkSpecializationMapEntry*)(to->pMapEntries + i));
    798         }
    799     }
    800     to->pData = nullptr;
    801     if (from->pData)
    802     {
    803         to->pData = (void*)pool->dupArray(from->pData, from->dataSize * sizeof(const uint8_t));
    804     }
    805 }
    806 
    807 void deepcopy_VkPipelineShaderStageCreateInfo(
    808     Pool* pool,
    809     const VkPipelineShaderStageCreateInfo* from,
    810     VkPipelineShaderStageCreateInfo* to)
    811 {
    812     (void)pool;
    813     *to = *from;
    814     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    815     to->pNext = nullptr;
    816     if (pNext_size)
    817     {
    818         to->pNext = (const void*)pool->alloc(pNext_size);
    819         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    820     }
    821     to->pName = nullptr;
    822     if (from->pName)
    823     {
    824         to->pName = pool->strDup(from->pName);
    825     }
    826     to->pSpecializationInfo = nullptr;
    827     if (from->pSpecializationInfo)
    828     {
    829         to->pSpecializationInfo = (VkSpecializationInfo*)pool->alloc(sizeof(const VkSpecializationInfo));
    830         deepcopy_VkSpecializationInfo(pool, from->pSpecializationInfo, (VkSpecializationInfo*)(to->pSpecializationInfo));
    831     }
    832 }
    833 
    834 void deepcopy_VkVertexInputBindingDescription(
    835     Pool* pool,
    836     const VkVertexInputBindingDescription* from,
    837     VkVertexInputBindingDescription* to)
    838 {
    839     (void)pool;
    840     *to = *from;
    841 }
    842 
    843 void deepcopy_VkVertexInputAttributeDescription(
    844     Pool* pool,
    845     const VkVertexInputAttributeDescription* from,
    846     VkVertexInputAttributeDescription* to)
    847 {
    848     (void)pool;
    849     *to = *from;
    850 }
    851 
    852 void deepcopy_VkPipelineVertexInputStateCreateInfo(
    853     Pool* pool,
    854     const VkPipelineVertexInputStateCreateInfo* from,
    855     VkPipelineVertexInputStateCreateInfo* to)
    856 {
    857     (void)pool;
    858     *to = *from;
    859     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    860     to->pNext = nullptr;
    861     if (pNext_size)
    862     {
    863         to->pNext = (const void*)pool->alloc(pNext_size);
    864         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    865     }
    866     to->pVertexBindingDescriptions = nullptr;
    867     if (from->pVertexBindingDescriptions)
    868     {
    869         to->pVertexBindingDescriptions = (VkVertexInputBindingDescription*)pool->alloc(from->vertexBindingDescriptionCount * sizeof(const VkVertexInputBindingDescription));
    870         to->vertexBindingDescriptionCount = from->vertexBindingDescriptionCount;
    871         for (uint32_t i = 0; i < (uint32_t)from->vertexBindingDescriptionCount; ++i)
    872         {
    873             deepcopy_VkVertexInputBindingDescription(pool, from->pVertexBindingDescriptions + i, (VkVertexInputBindingDescription*)(to->pVertexBindingDescriptions + i));
    874         }
    875     }
    876     to->pVertexAttributeDescriptions = nullptr;
    877     if (from->pVertexAttributeDescriptions)
    878     {
    879         to->pVertexAttributeDescriptions = (VkVertexInputAttributeDescription*)pool->alloc(from->vertexAttributeDescriptionCount * sizeof(const VkVertexInputAttributeDescription));
    880         to->vertexAttributeDescriptionCount = from->vertexAttributeDescriptionCount;
    881         for (uint32_t i = 0; i < (uint32_t)from->vertexAttributeDescriptionCount; ++i)
    882         {
    883             deepcopy_VkVertexInputAttributeDescription(pool, from->pVertexAttributeDescriptions + i, (VkVertexInputAttributeDescription*)(to->pVertexAttributeDescriptions + i));
    884         }
    885     }
    886 }
    887 
    888 void deepcopy_VkPipelineInputAssemblyStateCreateInfo(
    889     Pool* pool,
    890     const VkPipelineInputAssemblyStateCreateInfo* from,
    891     VkPipelineInputAssemblyStateCreateInfo* to)
    892 {
    893     (void)pool;
    894     *to = *from;
    895     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    896     to->pNext = nullptr;
    897     if (pNext_size)
    898     {
    899         to->pNext = (const void*)pool->alloc(pNext_size);
    900         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    901     }
    902 }
    903 
    904 void deepcopy_VkPipelineTessellationStateCreateInfo(
    905     Pool* pool,
    906     const VkPipelineTessellationStateCreateInfo* from,
    907     VkPipelineTessellationStateCreateInfo* to)
    908 {
    909     (void)pool;
    910     *to = *from;
    911     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    912     to->pNext = nullptr;
    913     if (pNext_size)
    914     {
    915         to->pNext = (const void*)pool->alloc(pNext_size);
    916         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    917     }
    918 }
    919 
    920 void deepcopy_VkViewport(
    921     Pool* pool,
    922     const VkViewport* from,
    923     VkViewport* to)
    924 {
    925     (void)pool;
    926     *to = *from;
    927 }
    928 
    929 void deepcopy_VkOffset2D(
    930     Pool* pool,
    931     const VkOffset2D* from,
    932     VkOffset2D* to)
    933 {
    934     (void)pool;
    935     *to = *from;
    936 }
    937 
    938 void deepcopy_VkExtent2D(
    939     Pool* pool,
    940     const VkExtent2D* from,
    941     VkExtent2D* to)
    942 {
    943     (void)pool;
    944     *to = *from;
    945 }
    946 
    947 void deepcopy_VkRect2D(
    948     Pool* pool,
    949     const VkRect2D* from,
    950     VkRect2D* to)
    951 {
    952     (void)pool;
    953     *to = *from;
    954     deepcopy_VkOffset2D(pool, &from->offset, (VkOffset2D*)(&to->offset));
    955     deepcopy_VkExtent2D(pool, &from->extent, (VkExtent2D*)(&to->extent));
    956 }
    957 
    958 void deepcopy_VkPipelineViewportStateCreateInfo(
    959     Pool* pool,
    960     const VkPipelineViewportStateCreateInfo* from,
    961     VkPipelineViewportStateCreateInfo* to)
    962 {
    963     (void)pool;
    964     *to = *from;
    965     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
    966     to->pNext = nullptr;
    967     if (pNext_size)
    968     {
    969         to->pNext = (const void*)pool->alloc(pNext_size);
    970         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
    971     }
    972     to->pViewports = nullptr;
    973     if (from->pViewports)
    974     {
    975         to->pViewports = (VkViewport*)pool->alloc(from->viewportCount * sizeof(const VkViewport));
    976         to->viewportCount = from->viewportCount;
    977         for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
    978         {
    979             deepcopy_VkViewport(pool, from->pViewports + i, (VkViewport*)(to->pViewports + i));
    980         }
    981     }
    982     to->pScissors = nullptr;
    983     if (from->pScissors)
    984     {
    985         to->pScissors = (VkRect2D*)pool->alloc(from->scissorCount * sizeof(const VkRect2D));
    986         to->scissorCount = from->scissorCount;
    987         for (uint32_t i = 0; i < (uint32_t)from->scissorCount; ++i)
    988         {
    989             deepcopy_VkRect2D(pool, from->pScissors + i, (VkRect2D*)(to->pScissors + i));
    990         }
    991     }
    992 }
    993 
    994 void deepcopy_VkPipelineRasterizationStateCreateInfo(
    995     Pool* pool,
    996     const VkPipelineRasterizationStateCreateInfo* from,
    997     VkPipelineRasterizationStateCreateInfo* to)
    998 {
    999     (void)pool;
   1000     *to = *from;
   1001     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1002     to->pNext = nullptr;
   1003     if (pNext_size)
   1004     {
   1005         to->pNext = (const void*)pool->alloc(pNext_size);
   1006         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1007     }
   1008 }
   1009 
   1010 void deepcopy_VkPipelineMultisampleStateCreateInfo(
   1011     Pool* pool,
   1012     const VkPipelineMultisampleStateCreateInfo* from,
   1013     VkPipelineMultisampleStateCreateInfo* to)
   1014 {
   1015     (void)pool;
   1016     *to = *from;
   1017     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1018     to->pNext = nullptr;
   1019     if (pNext_size)
   1020     {
   1021         to->pNext = (const void*)pool->alloc(pNext_size);
   1022         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1023     }
   1024     to->pSampleMask = nullptr;
   1025     if (from->pSampleMask)
   1026     {
   1027         to->pSampleMask = (VkSampleMask*)pool->dupArray(from->pSampleMask, (((from->rasterizationSamples) + 31) / 32) * sizeof(const VkSampleMask));
   1028     }
   1029 }
   1030 
   1031 void deepcopy_VkStencilOpState(
   1032     Pool* pool,
   1033     const VkStencilOpState* from,
   1034     VkStencilOpState* to)
   1035 {
   1036     (void)pool;
   1037     *to = *from;
   1038 }
   1039 
   1040 void deepcopy_VkPipelineDepthStencilStateCreateInfo(
   1041     Pool* pool,
   1042     const VkPipelineDepthStencilStateCreateInfo* from,
   1043     VkPipelineDepthStencilStateCreateInfo* to)
   1044 {
   1045     (void)pool;
   1046     *to = *from;
   1047     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1048     to->pNext = nullptr;
   1049     if (pNext_size)
   1050     {
   1051         to->pNext = (const void*)pool->alloc(pNext_size);
   1052         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1053     }
   1054     deepcopy_VkStencilOpState(pool, &from->front, (VkStencilOpState*)(&to->front));
   1055     deepcopy_VkStencilOpState(pool, &from->back, (VkStencilOpState*)(&to->back));
   1056 }
   1057 
   1058 void deepcopy_VkPipelineColorBlendAttachmentState(
   1059     Pool* pool,
   1060     const VkPipelineColorBlendAttachmentState* from,
   1061     VkPipelineColorBlendAttachmentState* to)
   1062 {
   1063     (void)pool;
   1064     *to = *from;
   1065 }
   1066 
   1067 void deepcopy_VkPipelineColorBlendStateCreateInfo(
   1068     Pool* pool,
   1069     const VkPipelineColorBlendStateCreateInfo* from,
   1070     VkPipelineColorBlendStateCreateInfo* to)
   1071 {
   1072     (void)pool;
   1073     *to = *from;
   1074     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1075     to->pNext = nullptr;
   1076     if (pNext_size)
   1077     {
   1078         to->pNext = (const void*)pool->alloc(pNext_size);
   1079         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1080     }
   1081     to->pAttachments = nullptr;
   1082     if (from->pAttachments)
   1083     {
   1084         to->pAttachments = (VkPipelineColorBlendAttachmentState*)pool->alloc(from->attachmentCount * sizeof(const VkPipelineColorBlendAttachmentState));
   1085         to->attachmentCount = from->attachmentCount;
   1086         for (uint32_t i = 0; i < (uint32_t)from->attachmentCount; ++i)
   1087         {
   1088             deepcopy_VkPipelineColorBlendAttachmentState(pool, from->pAttachments + i, (VkPipelineColorBlendAttachmentState*)(to->pAttachments + i));
   1089         }
   1090     }
   1091     memcpy(to->blendConstants, from->blendConstants, 4 * sizeof(float));
   1092 }
   1093 
   1094 void deepcopy_VkPipelineDynamicStateCreateInfo(
   1095     Pool* pool,
   1096     const VkPipelineDynamicStateCreateInfo* from,
   1097     VkPipelineDynamicStateCreateInfo* to)
   1098 {
   1099     (void)pool;
   1100     *to = *from;
   1101     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1102     to->pNext = nullptr;
   1103     if (pNext_size)
   1104     {
   1105         to->pNext = (const void*)pool->alloc(pNext_size);
   1106         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1107     }
   1108     to->pDynamicStates = nullptr;
   1109     if (from->pDynamicStates)
   1110     {
   1111         to->pDynamicStates = (VkDynamicState*)pool->dupArray(from->pDynamicStates, from->dynamicStateCount * sizeof(const VkDynamicState));
   1112     }
   1113 }
   1114 
   1115 void deepcopy_VkGraphicsPipelineCreateInfo(
   1116     Pool* pool,
   1117     const VkGraphicsPipelineCreateInfo* from,
   1118     VkGraphicsPipelineCreateInfo* to)
   1119 {
   1120     (void)pool;
   1121     *to = *from;
   1122     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1123     to->pNext = nullptr;
   1124     if (pNext_size)
   1125     {
   1126         to->pNext = (const void*)pool->alloc(pNext_size);
   1127         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1128     }
   1129     to->pStages = nullptr;
   1130     if (from->pStages)
   1131     {
   1132         to->pStages = (VkPipelineShaderStageCreateInfo*)pool->alloc(from->stageCount * sizeof(const VkPipelineShaderStageCreateInfo));
   1133         to->stageCount = from->stageCount;
   1134         for (uint32_t i = 0; i < (uint32_t)from->stageCount; ++i)
   1135         {
   1136             deepcopy_VkPipelineShaderStageCreateInfo(pool, from->pStages + i, (VkPipelineShaderStageCreateInfo*)(to->pStages + i));
   1137         }
   1138     }
   1139     to->pVertexInputState = nullptr;
   1140     if (from->pVertexInputState)
   1141     {
   1142         to->pVertexInputState = (VkPipelineVertexInputStateCreateInfo*)pool->alloc(sizeof(const VkPipelineVertexInputStateCreateInfo));
   1143         deepcopy_VkPipelineVertexInputStateCreateInfo(pool, from->pVertexInputState, (VkPipelineVertexInputStateCreateInfo*)(to->pVertexInputState));
   1144     }
   1145     to->pInputAssemblyState = nullptr;
   1146     if (from->pInputAssemblyState)
   1147     {
   1148         to->pInputAssemblyState = (VkPipelineInputAssemblyStateCreateInfo*)pool->alloc(sizeof(const VkPipelineInputAssemblyStateCreateInfo));
   1149         deepcopy_VkPipelineInputAssemblyStateCreateInfo(pool, from->pInputAssemblyState, (VkPipelineInputAssemblyStateCreateInfo*)(to->pInputAssemblyState));
   1150     }
   1151     to->pTessellationState = nullptr;
   1152     if (from->pTessellationState)
   1153     {
   1154         to->pTessellationState = (VkPipelineTessellationStateCreateInfo*)pool->alloc(sizeof(const VkPipelineTessellationStateCreateInfo));
   1155         deepcopy_VkPipelineTessellationStateCreateInfo(pool, from->pTessellationState, (VkPipelineTessellationStateCreateInfo*)(to->pTessellationState));
   1156     }
   1157     to->pViewportState = nullptr;
   1158     if (from->pViewportState)
   1159     {
   1160         to->pViewportState = (VkPipelineViewportStateCreateInfo*)pool->alloc(sizeof(const VkPipelineViewportStateCreateInfo));
   1161         deepcopy_VkPipelineViewportStateCreateInfo(pool, from->pViewportState, (VkPipelineViewportStateCreateInfo*)(to->pViewportState));
   1162     }
   1163     to->pRasterizationState = nullptr;
   1164     if (from->pRasterizationState)
   1165     {
   1166         to->pRasterizationState = (VkPipelineRasterizationStateCreateInfo*)pool->alloc(sizeof(const VkPipelineRasterizationStateCreateInfo));
   1167         deepcopy_VkPipelineRasterizationStateCreateInfo(pool, from->pRasterizationState, (VkPipelineRasterizationStateCreateInfo*)(to->pRasterizationState));
   1168     }
   1169     to->pMultisampleState = nullptr;
   1170     if (from->pMultisampleState)
   1171     {
   1172         to->pMultisampleState = (VkPipelineMultisampleStateCreateInfo*)pool->alloc(sizeof(const VkPipelineMultisampleStateCreateInfo));
   1173         deepcopy_VkPipelineMultisampleStateCreateInfo(pool, from->pMultisampleState, (VkPipelineMultisampleStateCreateInfo*)(to->pMultisampleState));
   1174     }
   1175     to->pDepthStencilState = nullptr;
   1176     if (from->pDepthStencilState)
   1177     {
   1178         to->pDepthStencilState = (VkPipelineDepthStencilStateCreateInfo*)pool->alloc(sizeof(const VkPipelineDepthStencilStateCreateInfo));
   1179         deepcopy_VkPipelineDepthStencilStateCreateInfo(pool, from->pDepthStencilState, (VkPipelineDepthStencilStateCreateInfo*)(to->pDepthStencilState));
   1180     }
   1181     to->pColorBlendState = nullptr;
   1182     if (from->pColorBlendState)
   1183     {
   1184         to->pColorBlendState = (VkPipelineColorBlendStateCreateInfo*)pool->alloc(sizeof(const VkPipelineColorBlendStateCreateInfo));
   1185         deepcopy_VkPipelineColorBlendStateCreateInfo(pool, from->pColorBlendState, (VkPipelineColorBlendStateCreateInfo*)(to->pColorBlendState));
   1186     }
   1187     to->pDynamicState = nullptr;
   1188     if (from->pDynamicState)
   1189     {
   1190         to->pDynamicState = (VkPipelineDynamicStateCreateInfo*)pool->alloc(sizeof(const VkPipelineDynamicStateCreateInfo));
   1191         deepcopy_VkPipelineDynamicStateCreateInfo(pool, from->pDynamicState, (VkPipelineDynamicStateCreateInfo*)(to->pDynamicState));
   1192     }
   1193 }
   1194 
   1195 void deepcopy_VkComputePipelineCreateInfo(
   1196     Pool* pool,
   1197     const VkComputePipelineCreateInfo* from,
   1198     VkComputePipelineCreateInfo* to)
   1199 {
   1200     (void)pool;
   1201     *to = *from;
   1202     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1203     to->pNext = nullptr;
   1204     if (pNext_size)
   1205     {
   1206         to->pNext = (const void*)pool->alloc(pNext_size);
   1207         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1208     }
   1209     deepcopy_VkPipelineShaderStageCreateInfo(pool, &from->stage, (VkPipelineShaderStageCreateInfo*)(&to->stage));
   1210 }
   1211 
   1212 void deepcopy_VkPushConstantRange(
   1213     Pool* pool,
   1214     const VkPushConstantRange* from,
   1215     VkPushConstantRange* to)
   1216 {
   1217     (void)pool;
   1218     *to = *from;
   1219 }
   1220 
   1221 void deepcopy_VkPipelineLayoutCreateInfo(
   1222     Pool* pool,
   1223     const VkPipelineLayoutCreateInfo* from,
   1224     VkPipelineLayoutCreateInfo* to)
   1225 {
   1226     (void)pool;
   1227     *to = *from;
   1228     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1229     to->pNext = nullptr;
   1230     if (pNext_size)
   1231     {
   1232         to->pNext = (const void*)pool->alloc(pNext_size);
   1233         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1234     }
   1235     to->pSetLayouts = nullptr;
   1236     if (from->pSetLayouts)
   1237     {
   1238         to->pSetLayouts = (VkDescriptorSetLayout*)pool->dupArray(from->pSetLayouts, from->setLayoutCount * sizeof(const VkDescriptorSetLayout));
   1239     }
   1240     to->pPushConstantRanges = nullptr;
   1241     if (from->pPushConstantRanges)
   1242     {
   1243         to->pPushConstantRanges = (VkPushConstantRange*)pool->alloc(from->pushConstantRangeCount * sizeof(const VkPushConstantRange));
   1244         to->pushConstantRangeCount = from->pushConstantRangeCount;
   1245         for (uint32_t i = 0; i < (uint32_t)from->pushConstantRangeCount; ++i)
   1246         {
   1247             deepcopy_VkPushConstantRange(pool, from->pPushConstantRanges + i, (VkPushConstantRange*)(to->pPushConstantRanges + i));
   1248         }
   1249     }
   1250 }
   1251 
   1252 void deepcopy_VkSamplerCreateInfo(
   1253     Pool* pool,
   1254     const VkSamplerCreateInfo* from,
   1255     VkSamplerCreateInfo* to)
   1256 {
   1257     (void)pool;
   1258     *to = *from;
   1259     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1260     to->pNext = nullptr;
   1261     if (pNext_size)
   1262     {
   1263         to->pNext = (const void*)pool->alloc(pNext_size);
   1264         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1265     }
   1266 }
   1267 
   1268 void deepcopy_VkDescriptorSetLayoutBinding(
   1269     Pool* pool,
   1270     const VkDescriptorSetLayoutBinding* from,
   1271     VkDescriptorSetLayoutBinding* to)
   1272 {
   1273     (void)pool;
   1274     *to = *from;
   1275     to->pImmutableSamplers = nullptr;
   1276     if (from->pImmutableSamplers)
   1277     {
   1278         to->pImmutableSamplers = (VkSampler*)pool->dupArray(from->pImmutableSamplers, from->descriptorCount * sizeof(const VkSampler));
   1279     }
   1280 }
   1281 
   1282 void deepcopy_VkDescriptorSetLayoutCreateInfo(
   1283     Pool* pool,
   1284     const VkDescriptorSetLayoutCreateInfo* from,
   1285     VkDescriptorSetLayoutCreateInfo* to)
   1286 {
   1287     (void)pool;
   1288     *to = *from;
   1289     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1290     to->pNext = nullptr;
   1291     if (pNext_size)
   1292     {
   1293         to->pNext = (const void*)pool->alloc(pNext_size);
   1294         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1295     }
   1296     to->pBindings = nullptr;
   1297     if (from->pBindings)
   1298     {
   1299         to->pBindings = (VkDescriptorSetLayoutBinding*)pool->alloc(from->bindingCount * sizeof(const VkDescriptorSetLayoutBinding));
   1300         to->bindingCount = from->bindingCount;
   1301         for (uint32_t i = 0; i < (uint32_t)from->bindingCount; ++i)
   1302         {
   1303             deepcopy_VkDescriptorSetLayoutBinding(pool, from->pBindings + i, (VkDescriptorSetLayoutBinding*)(to->pBindings + i));
   1304         }
   1305     }
   1306 }
   1307 
   1308 void deepcopy_VkDescriptorPoolSize(
   1309     Pool* pool,
   1310     const VkDescriptorPoolSize* from,
   1311     VkDescriptorPoolSize* to)
   1312 {
   1313     (void)pool;
   1314     *to = *from;
   1315 }
   1316 
   1317 void deepcopy_VkDescriptorPoolCreateInfo(
   1318     Pool* pool,
   1319     const VkDescriptorPoolCreateInfo* from,
   1320     VkDescriptorPoolCreateInfo* to)
   1321 {
   1322     (void)pool;
   1323     *to = *from;
   1324     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1325     to->pNext = nullptr;
   1326     if (pNext_size)
   1327     {
   1328         to->pNext = (const void*)pool->alloc(pNext_size);
   1329         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1330     }
   1331     to->pPoolSizes = nullptr;
   1332     if (from->pPoolSizes)
   1333     {
   1334         to->pPoolSizes = (VkDescriptorPoolSize*)pool->alloc(from->poolSizeCount * sizeof(const VkDescriptorPoolSize));
   1335         to->poolSizeCount = from->poolSizeCount;
   1336         for (uint32_t i = 0; i < (uint32_t)from->poolSizeCount; ++i)
   1337         {
   1338             deepcopy_VkDescriptorPoolSize(pool, from->pPoolSizes + i, (VkDescriptorPoolSize*)(to->pPoolSizes + i));
   1339         }
   1340     }
   1341 }
   1342 
   1343 void deepcopy_VkDescriptorSetAllocateInfo(
   1344     Pool* pool,
   1345     const VkDescriptorSetAllocateInfo* from,
   1346     VkDescriptorSetAllocateInfo* to)
   1347 {
   1348     (void)pool;
   1349     *to = *from;
   1350     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1351     to->pNext = nullptr;
   1352     if (pNext_size)
   1353     {
   1354         to->pNext = (const void*)pool->alloc(pNext_size);
   1355         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1356     }
   1357     to->pSetLayouts = nullptr;
   1358     if (from->pSetLayouts)
   1359     {
   1360         to->pSetLayouts = (VkDescriptorSetLayout*)pool->dupArray(from->pSetLayouts, from->descriptorSetCount * sizeof(const VkDescriptorSetLayout));
   1361     }
   1362 }
   1363 
   1364 void deepcopy_VkDescriptorImageInfo(
   1365     Pool* pool,
   1366     const VkDescriptorImageInfo* from,
   1367     VkDescriptorImageInfo* to)
   1368 {
   1369     (void)pool;
   1370     *to = *from;
   1371 }
   1372 
   1373 void deepcopy_VkDescriptorBufferInfo(
   1374     Pool* pool,
   1375     const VkDescriptorBufferInfo* from,
   1376     VkDescriptorBufferInfo* to)
   1377 {
   1378     (void)pool;
   1379     *to = *from;
   1380 }
   1381 
   1382 void deepcopy_VkWriteDescriptorSet(
   1383     Pool* pool,
   1384     const VkWriteDescriptorSet* from,
   1385     VkWriteDescriptorSet* to)
   1386 {
   1387     (void)pool;
   1388     *to = *from;
   1389     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1390     to->pNext = nullptr;
   1391     if (pNext_size)
   1392     {
   1393         to->pNext = (const void*)pool->alloc(pNext_size);
   1394         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1395     }
   1396     to->pImageInfo = nullptr;
   1397     if (from->pImageInfo)
   1398     {
   1399         to->pImageInfo = (VkDescriptorImageInfo*)pool->alloc(from->descriptorCount * sizeof(const VkDescriptorImageInfo));
   1400         to->descriptorCount = from->descriptorCount;
   1401         for (uint32_t i = 0; i < (uint32_t)from->descriptorCount; ++i)
   1402         {
   1403             deepcopy_VkDescriptorImageInfo(pool, from->pImageInfo + i, (VkDescriptorImageInfo*)(to->pImageInfo + i));
   1404         }
   1405     }
   1406     to->pBufferInfo = nullptr;
   1407     if (from->pBufferInfo)
   1408     {
   1409         to->pBufferInfo = (VkDescriptorBufferInfo*)pool->alloc(from->descriptorCount * sizeof(const VkDescriptorBufferInfo));
   1410         to->descriptorCount = from->descriptorCount;
   1411         for (uint32_t i = 0; i < (uint32_t)from->descriptorCount; ++i)
   1412         {
   1413             deepcopy_VkDescriptorBufferInfo(pool, from->pBufferInfo + i, (VkDescriptorBufferInfo*)(to->pBufferInfo + i));
   1414         }
   1415     }
   1416     to->pTexelBufferView = nullptr;
   1417     if (from->pTexelBufferView)
   1418     {
   1419         to->pTexelBufferView = (VkBufferView*)pool->dupArray(from->pTexelBufferView, from->descriptorCount * sizeof(const VkBufferView));
   1420     }
   1421 }
   1422 
   1423 void deepcopy_VkCopyDescriptorSet(
   1424     Pool* pool,
   1425     const VkCopyDescriptorSet* from,
   1426     VkCopyDescriptorSet* to)
   1427 {
   1428     (void)pool;
   1429     *to = *from;
   1430     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1431     to->pNext = nullptr;
   1432     if (pNext_size)
   1433     {
   1434         to->pNext = (const void*)pool->alloc(pNext_size);
   1435         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1436     }
   1437 }
   1438 
   1439 void deepcopy_VkFramebufferCreateInfo(
   1440     Pool* pool,
   1441     const VkFramebufferCreateInfo* from,
   1442     VkFramebufferCreateInfo* to)
   1443 {
   1444     (void)pool;
   1445     *to = *from;
   1446     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1447     to->pNext = nullptr;
   1448     if (pNext_size)
   1449     {
   1450         to->pNext = (const void*)pool->alloc(pNext_size);
   1451         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1452     }
   1453     to->pAttachments = nullptr;
   1454     if (from->pAttachments)
   1455     {
   1456         to->pAttachments = (VkImageView*)pool->dupArray(from->pAttachments, from->attachmentCount * sizeof(const VkImageView));
   1457     }
   1458 }
   1459 
   1460 void deepcopy_VkAttachmentDescription(
   1461     Pool* pool,
   1462     const VkAttachmentDescription* from,
   1463     VkAttachmentDescription* to)
   1464 {
   1465     (void)pool;
   1466     *to = *from;
   1467 }
   1468 
   1469 void deepcopy_VkAttachmentReference(
   1470     Pool* pool,
   1471     const VkAttachmentReference* from,
   1472     VkAttachmentReference* to)
   1473 {
   1474     (void)pool;
   1475     *to = *from;
   1476 }
   1477 
   1478 void deepcopy_VkSubpassDescription(
   1479     Pool* pool,
   1480     const VkSubpassDescription* from,
   1481     VkSubpassDescription* to)
   1482 {
   1483     (void)pool;
   1484     *to = *from;
   1485     to->pInputAttachments = nullptr;
   1486     if (from->pInputAttachments)
   1487     {
   1488         to->pInputAttachments = (VkAttachmentReference*)pool->alloc(from->inputAttachmentCount * sizeof(const VkAttachmentReference));
   1489         to->inputAttachmentCount = from->inputAttachmentCount;
   1490         for (uint32_t i = 0; i < (uint32_t)from->inputAttachmentCount; ++i)
   1491         {
   1492             deepcopy_VkAttachmentReference(pool, from->pInputAttachments + i, (VkAttachmentReference*)(to->pInputAttachments + i));
   1493         }
   1494     }
   1495     to->pColorAttachments = nullptr;
   1496     if (from->pColorAttachments)
   1497     {
   1498         to->pColorAttachments = (VkAttachmentReference*)pool->alloc(from->colorAttachmentCount * sizeof(const VkAttachmentReference));
   1499         to->colorAttachmentCount = from->colorAttachmentCount;
   1500         for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
   1501         {
   1502             deepcopy_VkAttachmentReference(pool, from->pColorAttachments + i, (VkAttachmentReference*)(to->pColorAttachments + i));
   1503         }
   1504     }
   1505     to->pResolveAttachments = nullptr;
   1506     if (from->pResolveAttachments)
   1507     {
   1508         to->pResolveAttachments = (VkAttachmentReference*)pool->alloc(from->colorAttachmentCount * sizeof(const VkAttachmentReference));
   1509         to->colorAttachmentCount = from->colorAttachmentCount;
   1510         for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
   1511         {
   1512             deepcopy_VkAttachmentReference(pool, from->pResolveAttachments + i, (VkAttachmentReference*)(to->pResolveAttachments + i));
   1513         }
   1514     }
   1515     to->pDepthStencilAttachment = nullptr;
   1516     if (from->pDepthStencilAttachment)
   1517     {
   1518         to->pDepthStencilAttachment = (VkAttachmentReference*)pool->alloc(sizeof(const VkAttachmentReference));
   1519         deepcopy_VkAttachmentReference(pool, from->pDepthStencilAttachment, (VkAttachmentReference*)(to->pDepthStencilAttachment));
   1520     }
   1521     to->pPreserveAttachments = nullptr;
   1522     if (from->pPreserveAttachments)
   1523     {
   1524         to->pPreserveAttachments = (uint32_t*)pool->dupArray(from->pPreserveAttachments, from->preserveAttachmentCount * sizeof(const uint32_t));
   1525     }
   1526 }
   1527 
   1528 void deepcopy_VkSubpassDependency(
   1529     Pool* pool,
   1530     const VkSubpassDependency* from,
   1531     VkSubpassDependency* to)
   1532 {
   1533     (void)pool;
   1534     *to = *from;
   1535 }
   1536 
   1537 void deepcopy_VkRenderPassCreateInfo(
   1538     Pool* pool,
   1539     const VkRenderPassCreateInfo* from,
   1540     VkRenderPassCreateInfo* to)
   1541 {
   1542     (void)pool;
   1543     *to = *from;
   1544     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1545     to->pNext = nullptr;
   1546     if (pNext_size)
   1547     {
   1548         to->pNext = (const void*)pool->alloc(pNext_size);
   1549         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1550     }
   1551     to->pAttachments = nullptr;
   1552     if (from->pAttachments)
   1553     {
   1554         to->pAttachments = (VkAttachmentDescription*)pool->alloc(from->attachmentCount * sizeof(const VkAttachmentDescription));
   1555         to->attachmentCount = from->attachmentCount;
   1556         for (uint32_t i = 0; i < (uint32_t)from->attachmentCount; ++i)
   1557         {
   1558             deepcopy_VkAttachmentDescription(pool, from->pAttachments + i, (VkAttachmentDescription*)(to->pAttachments + i));
   1559         }
   1560     }
   1561     to->pSubpasses = nullptr;
   1562     if (from->pSubpasses)
   1563     {
   1564         to->pSubpasses = (VkSubpassDescription*)pool->alloc(from->subpassCount * sizeof(const VkSubpassDescription));
   1565         to->subpassCount = from->subpassCount;
   1566         for (uint32_t i = 0; i < (uint32_t)from->subpassCount; ++i)
   1567         {
   1568             deepcopy_VkSubpassDescription(pool, from->pSubpasses + i, (VkSubpassDescription*)(to->pSubpasses + i));
   1569         }
   1570     }
   1571     to->pDependencies = nullptr;
   1572     if (from->pDependencies)
   1573     {
   1574         to->pDependencies = (VkSubpassDependency*)pool->alloc(from->dependencyCount * sizeof(const VkSubpassDependency));
   1575         to->dependencyCount = from->dependencyCount;
   1576         for (uint32_t i = 0; i < (uint32_t)from->dependencyCount; ++i)
   1577         {
   1578             deepcopy_VkSubpassDependency(pool, from->pDependencies + i, (VkSubpassDependency*)(to->pDependencies + i));
   1579         }
   1580     }
   1581 }
   1582 
   1583 void deepcopy_VkCommandPoolCreateInfo(
   1584     Pool* pool,
   1585     const VkCommandPoolCreateInfo* from,
   1586     VkCommandPoolCreateInfo* to)
   1587 {
   1588     (void)pool;
   1589     *to = *from;
   1590     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1591     to->pNext = nullptr;
   1592     if (pNext_size)
   1593     {
   1594         to->pNext = (const void*)pool->alloc(pNext_size);
   1595         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1596     }
   1597 }
   1598 
   1599 void deepcopy_VkCommandBufferAllocateInfo(
   1600     Pool* pool,
   1601     const VkCommandBufferAllocateInfo* from,
   1602     VkCommandBufferAllocateInfo* to)
   1603 {
   1604     (void)pool;
   1605     *to = *from;
   1606     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1607     to->pNext = nullptr;
   1608     if (pNext_size)
   1609     {
   1610         to->pNext = (const void*)pool->alloc(pNext_size);
   1611         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1612     }
   1613 }
   1614 
   1615 void deepcopy_VkCommandBufferInheritanceInfo(
   1616     Pool* pool,
   1617     const VkCommandBufferInheritanceInfo* from,
   1618     VkCommandBufferInheritanceInfo* to)
   1619 {
   1620     (void)pool;
   1621     *to = *from;
   1622     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1623     to->pNext = nullptr;
   1624     if (pNext_size)
   1625     {
   1626         to->pNext = (const void*)pool->alloc(pNext_size);
   1627         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1628     }
   1629 }
   1630 
   1631 void deepcopy_VkCommandBufferBeginInfo(
   1632     Pool* pool,
   1633     const VkCommandBufferBeginInfo* from,
   1634     VkCommandBufferBeginInfo* to)
   1635 {
   1636     (void)pool;
   1637     *to = *from;
   1638     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1639     to->pNext = nullptr;
   1640     if (pNext_size)
   1641     {
   1642         to->pNext = (const void*)pool->alloc(pNext_size);
   1643         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1644     }
   1645     to->pInheritanceInfo = nullptr;
   1646     if (from->pInheritanceInfo)
   1647     {
   1648         to->pInheritanceInfo = (VkCommandBufferInheritanceInfo*)pool->alloc(sizeof(const VkCommandBufferInheritanceInfo));
   1649         deepcopy_VkCommandBufferInheritanceInfo(pool, from->pInheritanceInfo, (VkCommandBufferInheritanceInfo*)(to->pInheritanceInfo));
   1650     }
   1651 }
   1652 
   1653 void deepcopy_VkBufferCopy(
   1654     Pool* pool,
   1655     const VkBufferCopy* from,
   1656     VkBufferCopy* to)
   1657 {
   1658     (void)pool;
   1659     *to = *from;
   1660 }
   1661 
   1662 void deepcopy_VkImageSubresourceLayers(
   1663     Pool* pool,
   1664     const VkImageSubresourceLayers* from,
   1665     VkImageSubresourceLayers* to)
   1666 {
   1667     (void)pool;
   1668     *to = *from;
   1669 }
   1670 
   1671 void deepcopy_VkImageCopy(
   1672     Pool* pool,
   1673     const VkImageCopy* from,
   1674     VkImageCopy* to)
   1675 {
   1676     (void)pool;
   1677     *to = *from;
   1678     deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
   1679     deepcopy_VkOffset3D(pool, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
   1680     deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
   1681     deepcopy_VkOffset3D(pool, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
   1682     deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
   1683 }
   1684 
   1685 void deepcopy_VkImageBlit(
   1686     Pool* pool,
   1687     const VkImageBlit* from,
   1688     VkImageBlit* to)
   1689 {
   1690     (void)pool;
   1691     *to = *from;
   1692     deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
   1693     for (uint32_t i = 0; i < (uint32_t)2; ++i)
   1694     {
   1695         deepcopy_VkOffset3D(pool, from->srcOffsets + i, (VkOffset3D*)(to->srcOffsets + i));
   1696     }
   1697     deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
   1698     for (uint32_t i = 0; i < (uint32_t)2; ++i)
   1699     {
   1700         deepcopy_VkOffset3D(pool, from->dstOffsets + i, (VkOffset3D*)(to->dstOffsets + i));
   1701     }
   1702 }
   1703 
   1704 void deepcopy_VkBufferImageCopy(
   1705     Pool* pool,
   1706     const VkBufferImageCopy* from,
   1707     VkBufferImageCopy* to)
   1708 {
   1709     (void)pool;
   1710     *to = *from;
   1711     deepcopy_VkImageSubresourceLayers(pool, &from->imageSubresource, (VkImageSubresourceLayers*)(&to->imageSubresource));
   1712     deepcopy_VkOffset3D(pool, &from->imageOffset, (VkOffset3D*)(&to->imageOffset));
   1713     deepcopy_VkExtent3D(pool, &from->imageExtent, (VkExtent3D*)(&to->imageExtent));
   1714 }
   1715 
   1716 void deepcopy_VkClearColorValue(
   1717     Pool* pool,
   1718     const VkClearColorValue* from,
   1719     VkClearColorValue* to)
   1720 {
   1721     (void)pool;
   1722     *to = *from;
   1723     memcpy(to->float32, from->float32, 4 * sizeof(float));
   1724     memcpy(to->int32, from->int32, 4 * sizeof(int32_t));
   1725     memcpy(to->uint32, from->uint32, 4 * sizeof(uint32_t));
   1726 }
   1727 
   1728 void deepcopy_VkClearDepthStencilValue(
   1729     Pool* pool,
   1730     const VkClearDepthStencilValue* from,
   1731     VkClearDepthStencilValue* to)
   1732 {
   1733     (void)pool;
   1734     *to = *from;
   1735 }
   1736 
   1737 void deepcopy_VkClearValue(
   1738     Pool* pool,
   1739     const VkClearValue* from,
   1740     VkClearValue* to)
   1741 {
   1742     (void)pool;
   1743     *to = *from;
   1744     deepcopy_VkClearColorValue(pool, &from->color, (VkClearColorValue*)(&to->color));
   1745     deepcopy_VkClearDepthStencilValue(pool, &from->depthStencil, (VkClearDepthStencilValue*)(&to->depthStencil));
   1746 }
   1747 
   1748 void deepcopy_VkClearAttachment(
   1749     Pool* pool,
   1750     const VkClearAttachment* from,
   1751     VkClearAttachment* to)
   1752 {
   1753     (void)pool;
   1754     *to = *from;
   1755     deepcopy_VkClearValue(pool, &from->clearValue, (VkClearValue*)(&to->clearValue));
   1756 }
   1757 
   1758 void deepcopy_VkClearRect(
   1759     Pool* pool,
   1760     const VkClearRect* from,
   1761     VkClearRect* to)
   1762 {
   1763     (void)pool;
   1764     *to = *from;
   1765     deepcopy_VkRect2D(pool, &from->rect, (VkRect2D*)(&to->rect));
   1766 }
   1767 
   1768 void deepcopy_VkImageResolve(
   1769     Pool* pool,
   1770     const VkImageResolve* from,
   1771     VkImageResolve* to)
   1772 {
   1773     (void)pool;
   1774     *to = *from;
   1775     deepcopy_VkImageSubresourceLayers(pool, &from->srcSubresource, (VkImageSubresourceLayers*)(&to->srcSubresource));
   1776     deepcopy_VkOffset3D(pool, &from->srcOffset, (VkOffset3D*)(&to->srcOffset));
   1777     deepcopy_VkImageSubresourceLayers(pool, &from->dstSubresource, (VkImageSubresourceLayers*)(&to->dstSubresource));
   1778     deepcopy_VkOffset3D(pool, &from->dstOffset, (VkOffset3D*)(&to->dstOffset));
   1779     deepcopy_VkExtent3D(pool, &from->extent, (VkExtent3D*)(&to->extent));
   1780 }
   1781 
   1782 void deepcopy_VkMemoryBarrier(
   1783     Pool* pool,
   1784     const VkMemoryBarrier* from,
   1785     VkMemoryBarrier* to)
   1786 {
   1787     (void)pool;
   1788     *to = *from;
   1789     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1790     to->pNext = nullptr;
   1791     if (pNext_size)
   1792     {
   1793         to->pNext = (const void*)pool->alloc(pNext_size);
   1794         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1795     }
   1796 }
   1797 
   1798 void deepcopy_VkBufferMemoryBarrier(
   1799     Pool* pool,
   1800     const VkBufferMemoryBarrier* from,
   1801     VkBufferMemoryBarrier* to)
   1802 {
   1803     (void)pool;
   1804     *to = *from;
   1805     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1806     to->pNext = nullptr;
   1807     if (pNext_size)
   1808     {
   1809         to->pNext = (const void*)pool->alloc(pNext_size);
   1810         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1811     }
   1812 }
   1813 
   1814 void deepcopy_VkImageMemoryBarrier(
   1815     Pool* pool,
   1816     const VkImageMemoryBarrier* from,
   1817     VkImageMemoryBarrier* to)
   1818 {
   1819     (void)pool;
   1820     *to = *from;
   1821     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1822     to->pNext = nullptr;
   1823     if (pNext_size)
   1824     {
   1825         to->pNext = (const void*)pool->alloc(pNext_size);
   1826         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1827     }
   1828     deepcopy_VkImageSubresourceRange(pool, &from->subresourceRange, (VkImageSubresourceRange*)(&to->subresourceRange));
   1829 }
   1830 
   1831 void deepcopy_VkRenderPassBeginInfo(
   1832     Pool* pool,
   1833     const VkRenderPassBeginInfo* from,
   1834     VkRenderPassBeginInfo* to)
   1835 {
   1836     (void)pool;
   1837     *to = *from;
   1838     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1839     to->pNext = nullptr;
   1840     if (pNext_size)
   1841     {
   1842         to->pNext = (const void*)pool->alloc(pNext_size);
   1843         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1844     }
   1845     deepcopy_VkRect2D(pool, &from->renderArea, (VkRect2D*)(&to->renderArea));
   1846     to->pClearValues = nullptr;
   1847     if (from->pClearValues)
   1848     {
   1849         to->pClearValues = (VkClearValue*)pool->alloc(from->clearValueCount * sizeof(const VkClearValue));
   1850         to->clearValueCount = from->clearValueCount;
   1851         for (uint32_t i = 0; i < (uint32_t)from->clearValueCount; ++i)
   1852         {
   1853             deepcopy_VkClearValue(pool, from->pClearValues + i, (VkClearValue*)(to->pClearValues + i));
   1854         }
   1855     }
   1856 }
   1857 
   1858 void deepcopy_VkDispatchIndirectCommand(
   1859     Pool* pool,
   1860     const VkDispatchIndirectCommand* from,
   1861     VkDispatchIndirectCommand* to)
   1862 {
   1863     (void)pool;
   1864     *to = *from;
   1865 }
   1866 
   1867 void deepcopy_VkDrawIndexedIndirectCommand(
   1868     Pool* pool,
   1869     const VkDrawIndexedIndirectCommand* from,
   1870     VkDrawIndexedIndirectCommand* to)
   1871 {
   1872     (void)pool;
   1873     *to = *from;
   1874 }
   1875 
   1876 void deepcopy_VkDrawIndirectCommand(
   1877     Pool* pool,
   1878     const VkDrawIndirectCommand* from,
   1879     VkDrawIndirectCommand* to)
   1880 {
   1881     (void)pool;
   1882     *to = *from;
   1883 }
   1884 
   1885 void deepcopy_VkBaseOutStructure(
   1886     Pool* pool,
   1887     const VkBaseOutStructure* from,
   1888     VkBaseOutStructure* to)
   1889 {
   1890     (void)pool;
   1891     *to = *from;
   1892     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1893     to->pNext = nullptr;
   1894     if (pNext_size)
   1895     {
   1896         to->pNext = (VkBaseOutStructure*)pool->alloc(pNext_size);
   1897         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1898     }
   1899 }
   1900 
   1901 void deepcopy_VkBaseInStructure(
   1902     Pool* pool,
   1903     const VkBaseInStructure* from,
   1904     VkBaseInStructure* to)
   1905 {
   1906     (void)pool;
   1907     *to = *from;
   1908     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1909     to->pNext = nullptr;
   1910     if (pNext_size)
   1911     {
   1912         to->pNext = (const VkBaseInStructure*)pool->alloc(pNext_size);
   1913         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1914     }
   1915 }
   1916 
   1917 #endif
   1918 #ifdef VK_VERSION_1_1
   1919 void deepcopy_VkPhysicalDeviceSubgroupProperties(
   1920     Pool* pool,
   1921     const VkPhysicalDeviceSubgroupProperties* from,
   1922     VkPhysicalDeviceSubgroupProperties* to)
   1923 {
   1924     (void)pool;
   1925     *to = *from;
   1926     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1927     to->pNext = nullptr;
   1928     if (pNext_size)
   1929     {
   1930         to->pNext = (void*)pool->alloc(pNext_size);
   1931         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1932     }
   1933 }
   1934 
   1935 void deepcopy_VkBindBufferMemoryInfo(
   1936     Pool* pool,
   1937     const VkBindBufferMemoryInfo* from,
   1938     VkBindBufferMemoryInfo* to)
   1939 {
   1940     (void)pool;
   1941     *to = *from;
   1942     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1943     to->pNext = nullptr;
   1944     if (pNext_size)
   1945     {
   1946         to->pNext = (const void*)pool->alloc(pNext_size);
   1947         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1948     }
   1949 }
   1950 
   1951 void deepcopy_VkBindImageMemoryInfo(
   1952     Pool* pool,
   1953     const VkBindImageMemoryInfo* from,
   1954     VkBindImageMemoryInfo* to)
   1955 {
   1956     (void)pool;
   1957     *to = *from;
   1958     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1959     to->pNext = nullptr;
   1960     if (pNext_size)
   1961     {
   1962         to->pNext = (const void*)pool->alloc(pNext_size);
   1963         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1964     }
   1965 }
   1966 
   1967 void deepcopy_VkPhysicalDevice16BitStorageFeatures(
   1968     Pool* pool,
   1969     const VkPhysicalDevice16BitStorageFeatures* from,
   1970     VkPhysicalDevice16BitStorageFeatures* to)
   1971 {
   1972     (void)pool;
   1973     *to = *from;
   1974     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1975     to->pNext = nullptr;
   1976     if (pNext_size)
   1977     {
   1978         to->pNext = (void*)pool->alloc(pNext_size);
   1979         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1980     }
   1981 }
   1982 
   1983 void deepcopy_VkMemoryDedicatedRequirements(
   1984     Pool* pool,
   1985     const VkMemoryDedicatedRequirements* from,
   1986     VkMemoryDedicatedRequirements* to)
   1987 {
   1988     (void)pool;
   1989     *to = *from;
   1990     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   1991     to->pNext = nullptr;
   1992     if (pNext_size)
   1993     {
   1994         to->pNext = (void*)pool->alloc(pNext_size);
   1995         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   1996     }
   1997 }
   1998 
   1999 void deepcopy_VkMemoryDedicatedAllocateInfo(
   2000     Pool* pool,
   2001     const VkMemoryDedicatedAllocateInfo* from,
   2002     VkMemoryDedicatedAllocateInfo* to)
   2003 {
   2004     (void)pool;
   2005     *to = *from;
   2006     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2007     to->pNext = nullptr;
   2008     if (pNext_size)
   2009     {
   2010         to->pNext = (const void*)pool->alloc(pNext_size);
   2011         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2012     }
   2013 }
   2014 
   2015 void deepcopy_VkMemoryAllocateFlagsInfo(
   2016     Pool* pool,
   2017     const VkMemoryAllocateFlagsInfo* from,
   2018     VkMemoryAllocateFlagsInfo* to)
   2019 {
   2020     (void)pool;
   2021     *to = *from;
   2022     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2023     to->pNext = nullptr;
   2024     if (pNext_size)
   2025     {
   2026         to->pNext = (const void*)pool->alloc(pNext_size);
   2027         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2028     }
   2029 }
   2030 
   2031 void deepcopy_VkDeviceGroupRenderPassBeginInfo(
   2032     Pool* pool,
   2033     const VkDeviceGroupRenderPassBeginInfo* from,
   2034     VkDeviceGroupRenderPassBeginInfo* to)
   2035 {
   2036     (void)pool;
   2037     *to = *from;
   2038     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2039     to->pNext = nullptr;
   2040     if (pNext_size)
   2041     {
   2042         to->pNext = (const void*)pool->alloc(pNext_size);
   2043         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2044     }
   2045     to->pDeviceRenderAreas = nullptr;
   2046     if (from->pDeviceRenderAreas)
   2047     {
   2048         to->pDeviceRenderAreas = (VkRect2D*)pool->alloc(from->deviceRenderAreaCount * sizeof(const VkRect2D));
   2049         to->deviceRenderAreaCount = from->deviceRenderAreaCount;
   2050         for (uint32_t i = 0; i < (uint32_t)from->deviceRenderAreaCount; ++i)
   2051         {
   2052             deepcopy_VkRect2D(pool, from->pDeviceRenderAreas + i, (VkRect2D*)(to->pDeviceRenderAreas + i));
   2053         }
   2054     }
   2055 }
   2056 
   2057 void deepcopy_VkDeviceGroupCommandBufferBeginInfo(
   2058     Pool* pool,
   2059     const VkDeviceGroupCommandBufferBeginInfo* from,
   2060     VkDeviceGroupCommandBufferBeginInfo* to)
   2061 {
   2062     (void)pool;
   2063     *to = *from;
   2064     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2065     to->pNext = nullptr;
   2066     if (pNext_size)
   2067     {
   2068         to->pNext = (const void*)pool->alloc(pNext_size);
   2069         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2070     }
   2071 }
   2072 
   2073 void deepcopy_VkDeviceGroupSubmitInfo(
   2074     Pool* pool,
   2075     const VkDeviceGroupSubmitInfo* from,
   2076     VkDeviceGroupSubmitInfo* to)
   2077 {
   2078     (void)pool;
   2079     *to = *from;
   2080     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2081     to->pNext = nullptr;
   2082     if (pNext_size)
   2083     {
   2084         to->pNext = (const void*)pool->alloc(pNext_size);
   2085         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2086     }
   2087     to->pWaitSemaphoreDeviceIndices = nullptr;
   2088     if (from->pWaitSemaphoreDeviceIndices)
   2089     {
   2090         to->pWaitSemaphoreDeviceIndices = (uint32_t*)pool->dupArray(from->pWaitSemaphoreDeviceIndices, from->waitSemaphoreCount * sizeof(const uint32_t));
   2091     }
   2092     to->pCommandBufferDeviceMasks = nullptr;
   2093     if (from->pCommandBufferDeviceMasks)
   2094     {
   2095         to->pCommandBufferDeviceMasks = (uint32_t*)pool->dupArray(from->pCommandBufferDeviceMasks, from->commandBufferCount * sizeof(const uint32_t));
   2096     }
   2097     to->pSignalSemaphoreDeviceIndices = nullptr;
   2098     if (from->pSignalSemaphoreDeviceIndices)
   2099     {
   2100         to->pSignalSemaphoreDeviceIndices = (uint32_t*)pool->dupArray(from->pSignalSemaphoreDeviceIndices, from->signalSemaphoreCount * sizeof(const uint32_t));
   2101     }
   2102 }
   2103 
   2104 void deepcopy_VkDeviceGroupBindSparseInfo(
   2105     Pool* pool,
   2106     const VkDeviceGroupBindSparseInfo* from,
   2107     VkDeviceGroupBindSparseInfo* to)
   2108 {
   2109     (void)pool;
   2110     *to = *from;
   2111     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2112     to->pNext = nullptr;
   2113     if (pNext_size)
   2114     {
   2115         to->pNext = (const void*)pool->alloc(pNext_size);
   2116         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2117     }
   2118 }
   2119 
   2120 void deepcopy_VkBindBufferMemoryDeviceGroupInfo(
   2121     Pool* pool,
   2122     const VkBindBufferMemoryDeviceGroupInfo* from,
   2123     VkBindBufferMemoryDeviceGroupInfo* to)
   2124 {
   2125     (void)pool;
   2126     *to = *from;
   2127     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2128     to->pNext = nullptr;
   2129     if (pNext_size)
   2130     {
   2131         to->pNext = (const void*)pool->alloc(pNext_size);
   2132         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2133     }
   2134     to->pDeviceIndices = nullptr;
   2135     if (from->pDeviceIndices)
   2136     {
   2137         to->pDeviceIndices = (uint32_t*)pool->dupArray(from->pDeviceIndices, from->deviceIndexCount * sizeof(const uint32_t));
   2138     }
   2139 }
   2140 
   2141 void deepcopy_VkBindImageMemoryDeviceGroupInfo(
   2142     Pool* pool,
   2143     const VkBindImageMemoryDeviceGroupInfo* from,
   2144     VkBindImageMemoryDeviceGroupInfo* to)
   2145 {
   2146     (void)pool;
   2147     *to = *from;
   2148     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2149     to->pNext = nullptr;
   2150     if (pNext_size)
   2151     {
   2152         to->pNext = (const void*)pool->alloc(pNext_size);
   2153         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2154     }
   2155     to->pDeviceIndices = nullptr;
   2156     if (from->pDeviceIndices)
   2157     {
   2158         to->pDeviceIndices = (uint32_t*)pool->dupArray(from->pDeviceIndices, from->deviceIndexCount * sizeof(const uint32_t));
   2159     }
   2160     to->pSplitInstanceBindRegions = nullptr;
   2161     if (from->pSplitInstanceBindRegions)
   2162     {
   2163         to->pSplitInstanceBindRegions = (VkRect2D*)pool->alloc(from->splitInstanceBindRegionCount * sizeof(const VkRect2D));
   2164         to->splitInstanceBindRegionCount = from->splitInstanceBindRegionCount;
   2165         for (uint32_t i = 0; i < (uint32_t)from->splitInstanceBindRegionCount; ++i)
   2166         {
   2167             deepcopy_VkRect2D(pool, from->pSplitInstanceBindRegions + i, (VkRect2D*)(to->pSplitInstanceBindRegions + i));
   2168         }
   2169     }
   2170 }
   2171 
   2172 void deepcopy_VkPhysicalDeviceGroupProperties(
   2173     Pool* pool,
   2174     const VkPhysicalDeviceGroupProperties* from,
   2175     VkPhysicalDeviceGroupProperties* to)
   2176 {
   2177     (void)pool;
   2178     *to = *from;
   2179     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2180     to->pNext = nullptr;
   2181     if (pNext_size)
   2182     {
   2183         to->pNext = (void*)pool->alloc(pNext_size);
   2184         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2185     }
   2186     memcpy(to->physicalDevices, from->physicalDevices, VK_MAX_DEVICE_GROUP_SIZE * sizeof(VkPhysicalDevice));
   2187 }
   2188 
   2189 void deepcopy_VkDeviceGroupDeviceCreateInfo(
   2190     Pool* pool,
   2191     const VkDeviceGroupDeviceCreateInfo* from,
   2192     VkDeviceGroupDeviceCreateInfo* to)
   2193 {
   2194     (void)pool;
   2195     *to = *from;
   2196     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2197     to->pNext = nullptr;
   2198     if (pNext_size)
   2199     {
   2200         to->pNext = (const void*)pool->alloc(pNext_size);
   2201         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2202     }
   2203     to->pPhysicalDevices = nullptr;
   2204     if (from->pPhysicalDevices)
   2205     {
   2206         to->pPhysicalDevices = (VkPhysicalDevice*)pool->dupArray(from->pPhysicalDevices, from->physicalDeviceCount * sizeof(const VkPhysicalDevice));
   2207     }
   2208 }
   2209 
   2210 void deepcopy_VkBufferMemoryRequirementsInfo2(
   2211     Pool* pool,
   2212     const VkBufferMemoryRequirementsInfo2* from,
   2213     VkBufferMemoryRequirementsInfo2* to)
   2214 {
   2215     (void)pool;
   2216     *to = *from;
   2217     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2218     to->pNext = nullptr;
   2219     if (pNext_size)
   2220     {
   2221         to->pNext = (const void*)pool->alloc(pNext_size);
   2222         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2223     }
   2224 }
   2225 
   2226 void deepcopy_VkImageMemoryRequirementsInfo2(
   2227     Pool* pool,
   2228     const VkImageMemoryRequirementsInfo2* from,
   2229     VkImageMemoryRequirementsInfo2* to)
   2230 {
   2231     (void)pool;
   2232     *to = *from;
   2233     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2234     to->pNext = nullptr;
   2235     if (pNext_size)
   2236     {
   2237         to->pNext = (const void*)pool->alloc(pNext_size);
   2238         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2239     }
   2240 }
   2241 
   2242 void deepcopy_VkImageSparseMemoryRequirementsInfo2(
   2243     Pool* pool,
   2244     const VkImageSparseMemoryRequirementsInfo2* from,
   2245     VkImageSparseMemoryRequirementsInfo2* to)
   2246 {
   2247     (void)pool;
   2248     *to = *from;
   2249     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2250     to->pNext = nullptr;
   2251     if (pNext_size)
   2252     {
   2253         to->pNext = (const void*)pool->alloc(pNext_size);
   2254         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2255     }
   2256 }
   2257 
   2258 void deepcopy_VkMemoryRequirements2(
   2259     Pool* pool,
   2260     const VkMemoryRequirements2* from,
   2261     VkMemoryRequirements2* to)
   2262 {
   2263     (void)pool;
   2264     *to = *from;
   2265     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2266     to->pNext = nullptr;
   2267     if (pNext_size)
   2268     {
   2269         to->pNext = (void*)pool->alloc(pNext_size);
   2270         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2271     }
   2272     deepcopy_VkMemoryRequirements(pool, &from->memoryRequirements, (VkMemoryRequirements*)(&to->memoryRequirements));
   2273 }
   2274 
   2275 void deepcopy_VkSparseImageMemoryRequirements2(
   2276     Pool* pool,
   2277     const VkSparseImageMemoryRequirements2* from,
   2278     VkSparseImageMemoryRequirements2* to)
   2279 {
   2280     (void)pool;
   2281     *to = *from;
   2282     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2283     to->pNext = nullptr;
   2284     if (pNext_size)
   2285     {
   2286         to->pNext = (void*)pool->alloc(pNext_size);
   2287         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2288     }
   2289     deepcopy_VkSparseImageMemoryRequirements(pool, &from->memoryRequirements, (VkSparseImageMemoryRequirements*)(&to->memoryRequirements));
   2290 }
   2291 
   2292 void deepcopy_VkPhysicalDeviceFeatures2(
   2293     Pool* pool,
   2294     const VkPhysicalDeviceFeatures2* from,
   2295     VkPhysicalDeviceFeatures2* to)
   2296 {
   2297     (void)pool;
   2298     *to = *from;
   2299     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2300     to->pNext = nullptr;
   2301     if (pNext_size)
   2302     {
   2303         to->pNext = (void*)pool->alloc(pNext_size);
   2304         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2305     }
   2306     deepcopy_VkPhysicalDeviceFeatures(pool, &from->features, (VkPhysicalDeviceFeatures*)(&to->features));
   2307 }
   2308 
   2309 void deepcopy_VkPhysicalDeviceProperties2(
   2310     Pool* pool,
   2311     const VkPhysicalDeviceProperties2* from,
   2312     VkPhysicalDeviceProperties2* to)
   2313 {
   2314     (void)pool;
   2315     *to = *from;
   2316     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2317     to->pNext = nullptr;
   2318     if (pNext_size)
   2319     {
   2320         to->pNext = (void*)pool->alloc(pNext_size);
   2321         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2322     }
   2323     deepcopy_VkPhysicalDeviceProperties(pool, &from->properties, (VkPhysicalDeviceProperties*)(&to->properties));
   2324 }
   2325 
   2326 void deepcopy_VkFormatProperties2(
   2327     Pool* pool,
   2328     const VkFormatProperties2* from,
   2329     VkFormatProperties2* to)
   2330 {
   2331     (void)pool;
   2332     *to = *from;
   2333     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2334     to->pNext = nullptr;
   2335     if (pNext_size)
   2336     {
   2337         to->pNext = (void*)pool->alloc(pNext_size);
   2338         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2339     }
   2340     deepcopy_VkFormatProperties(pool, &from->formatProperties, (VkFormatProperties*)(&to->formatProperties));
   2341 }
   2342 
   2343 void deepcopy_VkImageFormatProperties2(
   2344     Pool* pool,
   2345     const VkImageFormatProperties2* from,
   2346     VkImageFormatProperties2* to)
   2347 {
   2348     (void)pool;
   2349     *to = *from;
   2350     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2351     to->pNext = nullptr;
   2352     if (pNext_size)
   2353     {
   2354         to->pNext = (void*)pool->alloc(pNext_size);
   2355         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2356     }
   2357     deepcopy_VkImageFormatProperties(pool, &from->imageFormatProperties, (VkImageFormatProperties*)(&to->imageFormatProperties));
   2358 }
   2359 
   2360 void deepcopy_VkPhysicalDeviceImageFormatInfo2(
   2361     Pool* pool,
   2362     const VkPhysicalDeviceImageFormatInfo2* from,
   2363     VkPhysicalDeviceImageFormatInfo2* to)
   2364 {
   2365     (void)pool;
   2366     *to = *from;
   2367     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2368     to->pNext = nullptr;
   2369     if (pNext_size)
   2370     {
   2371         to->pNext = (const void*)pool->alloc(pNext_size);
   2372         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2373     }
   2374 }
   2375 
   2376 void deepcopy_VkQueueFamilyProperties2(
   2377     Pool* pool,
   2378     const VkQueueFamilyProperties2* from,
   2379     VkQueueFamilyProperties2* to)
   2380 {
   2381     (void)pool;
   2382     *to = *from;
   2383     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2384     to->pNext = nullptr;
   2385     if (pNext_size)
   2386     {
   2387         to->pNext = (void*)pool->alloc(pNext_size);
   2388         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2389     }
   2390     deepcopy_VkQueueFamilyProperties(pool, &from->queueFamilyProperties, (VkQueueFamilyProperties*)(&to->queueFamilyProperties));
   2391 }
   2392 
   2393 void deepcopy_VkPhysicalDeviceMemoryProperties2(
   2394     Pool* pool,
   2395     const VkPhysicalDeviceMemoryProperties2* from,
   2396     VkPhysicalDeviceMemoryProperties2* to)
   2397 {
   2398     (void)pool;
   2399     *to = *from;
   2400     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2401     to->pNext = nullptr;
   2402     if (pNext_size)
   2403     {
   2404         to->pNext = (void*)pool->alloc(pNext_size);
   2405         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2406     }
   2407     deepcopy_VkPhysicalDeviceMemoryProperties(pool, &from->memoryProperties, (VkPhysicalDeviceMemoryProperties*)(&to->memoryProperties));
   2408 }
   2409 
   2410 void deepcopy_VkSparseImageFormatProperties2(
   2411     Pool* pool,
   2412     const VkSparseImageFormatProperties2* from,
   2413     VkSparseImageFormatProperties2* to)
   2414 {
   2415     (void)pool;
   2416     *to = *from;
   2417     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2418     to->pNext = nullptr;
   2419     if (pNext_size)
   2420     {
   2421         to->pNext = (void*)pool->alloc(pNext_size);
   2422         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2423     }
   2424     deepcopy_VkSparseImageFormatProperties(pool, &from->properties, (VkSparseImageFormatProperties*)(&to->properties));
   2425 }
   2426 
   2427 void deepcopy_VkPhysicalDeviceSparseImageFormatInfo2(
   2428     Pool* pool,
   2429     const VkPhysicalDeviceSparseImageFormatInfo2* from,
   2430     VkPhysicalDeviceSparseImageFormatInfo2* to)
   2431 {
   2432     (void)pool;
   2433     *to = *from;
   2434     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2435     to->pNext = nullptr;
   2436     if (pNext_size)
   2437     {
   2438         to->pNext = (const void*)pool->alloc(pNext_size);
   2439         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2440     }
   2441 }
   2442 
   2443 void deepcopy_VkPhysicalDevicePointClippingProperties(
   2444     Pool* pool,
   2445     const VkPhysicalDevicePointClippingProperties* from,
   2446     VkPhysicalDevicePointClippingProperties* to)
   2447 {
   2448     (void)pool;
   2449     *to = *from;
   2450     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2451     to->pNext = nullptr;
   2452     if (pNext_size)
   2453     {
   2454         to->pNext = (void*)pool->alloc(pNext_size);
   2455         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2456     }
   2457 }
   2458 
   2459 void deepcopy_VkInputAttachmentAspectReference(
   2460     Pool* pool,
   2461     const VkInputAttachmentAspectReference* from,
   2462     VkInputAttachmentAspectReference* to)
   2463 {
   2464     (void)pool;
   2465     *to = *from;
   2466 }
   2467 
   2468 void deepcopy_VkRenderPassInputAttachmentAspectCreateInfo(
   2469     Pool* pool,
   2470     const VkRenderPassInputAttachmentAspectCreateInfo* from,
   2471     VkRenderPassInputAttachmentAspectCreateInfo* to)
   2472 {
   2473     (void)pool;
   2474     *to = *from;
   2475     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2476     to->pNext = nullptr;
   2477     if (pNext_size)
   2478     {
   2479         to->pNext = (const void*)pool->alloc(pNext_size);
   2480         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2481     }
   2482     to->pAspectReferences = nullptr;
   2483     if (from->pAspectReferences)
   2484     {
   2485         to->pAspectReferences = (VkInputAttachmentAspectReference*)pool->alloc(from->aspectReferenceCount * sizeof(const VkInputAttachmentAspectReference));
   2486         to->aspectReferenceCount = from->aspectReferenceCount;
   2487         for (uint32_t i = 0; i < (uint32_t)from->aspectReferenceCount; ++i)
   2488         {
   2489             deepcopy_VkInputAttachmentAspectReference(pool, from->pAspectReferences + i, (VkInputAttachmentAspectReference*)(to->pAspectReferences + i));
   2490         }
   2491     }
   2492 }
   2493 
   2494 void deepcopy_VkImageViewUsageCreateInfo(
   2495     Pool* pool,
   2496     const VkImageViewUsageCreateInfo* from,
   2497     VkImageViewUsageCreateInfo* to)
   2498 {
   2499     (void)pool;
   2500     *to = *from;
   2501     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2502     to->pNext = nullptr;
   2503     if (pNext_size)
   2504     {
   2505         to->pNext = (const void*)pool->alloc(pNext_size);
   2506         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2507     }
   2508 }
   2509 
   2510 void deepcopy_VkPipelineTessellationDomainOriginStateCreateInfo(
   2511     Pool* pool,
   2512     const VkPipelineTessellationDomainOriginStateCreateInfo* from,
   2513     VkPipelineTessellationDomainOriginStateCreateInfo* to)
   2514 {
   2515     (void)pool;
   2516     *to = *from;
   2517     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2518     to->pNext = nullptr;
   2519     if (pNext_size)
   2520     {
   2521         to->pNext = (const void*)pool->alloc(pNext_size);
   2522         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2523     }
   2524 }
   2525 
   2526 void deepcopy_VkRenderPassMultiviewCreateInfo(
   2527     Pool* pool,
   2528     const VkRenderPassMultiviewCreateInfo* from,
   2529     VkRenderPassMultiviewCreateInfo* to)
   2530 {
   2531     (void)pool;
   2532     *to = *from;
   2533     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2534     to->pNext = nullptr;
   2535     if (pNext_size)
   2536     {
   2537         to->pNext = (const void*)pool->alloc(pNext_size);
   2538         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2539     }
   2540     to->pViewMasks = nullptr;
   2541     if (from->pViewMasks)
   2542     {
   2543         to->pViewMasks = (uint32_t*)pool->dupArray(from->pViewMasks, from->subpassCount * sizeof(const uint32_t));
   2544     }
   2545     to->pViewOffsets = nullptr;
   2546     if (from->pViewOffsets)
   2547     {
   2548         to->pViewOffsets = (int32_t*)pool->dupArray(from->pViewOffsets, from->dependencyCount * sizeof(const int32_t));
   2549     }
   2550     to->pCorrelationMasks = nullptr;
   2551     if (from->pCorrelationMasks)
   2552     {
   2553         to->pCorrelationMasks = (uint32_t*)pool->dupArray(from->pCorrelationMasks, from->correlationMaskCount * sizeof(const uint32_t));
   2554     }
   2555 }
   2556 
   2557 void deepcopy_VkPhysicalDeviceMultiviewFeatures(
   2558     Pool* pool,
   2559     const VkPhysicalDeviceMultiviewFeatures* from,
   2560     VkPhysicalDeviceMultiviewFeatures* to)
   2561 {
   2562     (void)pool;
   2563     *to = *from;
   2564     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2565     to->pNext = nullptr;
   2566     if (pNext_size)
   2567     {
   2568         to->pNext = (void*)pool->alloc(pNext_size);
   2569         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2570     }
   2571 }
   2572 
   2573 void deepcopy_VkPhysicalDeviceMultiviewProperties(
   2574     Pool* pool,
   2575     const VkPhysicalDeviceMultiviewProperties* from,
   2576     VkPhysicalDeviceMultiviewProperties* to)
   2577 {
   2578     (void)pool;
   2579     *to = *from;
   2580     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2581     to->pNext = nullptr;
   2582     if (pNext_size)
   2583     {
   2584         to->pNext = (void*)pool->alloc(pNext_size);
   2585         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2586     }
   2587 }
   2588 
   2589 void deepcopy_VkPhysicalDeviceVariablePointerFeatures(
   2590     Pool* pool,
   2591     const VkPhysicalDeviceVariablePointerFeatures* from,
   2592     VkPhysicalDeviceVariablePointerFeatures* to)
   2593 {
   2594     (void)pool;
   2595     *to = *from;
   2596     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2597     to->pNext = nullptr;
   2598     if (pNext_size)
   2599     {
   2600         to->pNext = (void*)pool->alloc(pNext_size);
   2601         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2602     }
   2603 }
   2604 
   2605 void deepcopy_VkPhysicalDeviceProtectedMemoryFeatures(
   2606     Pool* pool,
   2607     const VkPhysicalDeviceProtectedMemoryFeatures* from,
   2608     VkPhysicalDeviceProtectedMemoryFeatures* to)
   2609 {
   2610     (void)pool;
   2611     *to = *from;
   2612     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2613     to->pNext = nullptr;
   2614     if (pNext_size)
   2615     {
   2616         to->pNext = (void*)pool->alloc(pNext_size);
   2617         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2618     }
   2619 }
   2620 
   2621 void deepcopy_VkPhysicalDeviceProtectedMemoryProperties(
   2622     Pool* pool,
   2623     const VkPhysicalDeviceProtectedMemoryProperties* from,
   2624     VkPhysicalDeviceProtectedMemoryProperties* to)
   2625 {
   2626     (void)pool;
   2627     *to = *from;
   2628     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2629     to->pNext = nullptr;
   2630     if (pNext_size)
   2631     {
   2632         to->pNext = (void*)pool->alloc(pNext_size);
   2633         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2634     }
   2635 }
   2636 
   2637 void deepcopy_VkDeviceQueueInfo2(
   2638     Pool* pool,
   2639     const VkDeviceQueueInfo2* from,
   2640     VkDeviceQueueInfo2* to)
   2641 {
   2642     (void)pool;
   2643     *to = *from;
   2644     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2645     to->pNext = nullptr;
   2646     if (pNext_size)
   2647     {
   2648         to->pNext = (const void*)pool->alloc(pNext_size);
   2649         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2650     }
   2651 }
   2652 
   2653 void deepcopy_VkProtectedSubmitInfo(
   2654     Pool* pool,
   2655     const VkProtectedSubmitInfo* from,
   2656     VkProtectedSubmitInfo* to)
   2657 {
   2658     (void)pool;
   2659     *to = *from;
   2660     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2661     to->pNext = nullptr;
   2662     if (pNext_size)
   2663     {
   2664         to->pNext = (const void*)pool->alloc(pNext_size);
   2665         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2666     }
   2667 }
   2668 
   2669 void deepcopy_VkSamplerYcbcrConversionCreateInfo(
   2670     Pool* pool,
   2671     const VkSamplerYcbcrConversionCreateInfo* from,
   2672     VkSamplerYcbcrConversionCreateInfo* to)
   2673 {
   2674     (void)pool;
   2675     *to = *from;
   2676     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2677     to->pNext = nullptr;
   2678     if (pNext_size)
   2679     {
   2680         to->pNext = (const void*)pool->alloc(pNext_size);
   2681         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2682     }
   2683     deepcopy_VkComponentMapping(pool, &from->components, (VkComponentMapping*)(&to->components));
   2684 }
   2685 
   2686 void deepcopy_VkSamplerYcbcrConversionInfo(
   2687     Pool* pool,
   2688     const VkSamplerYcbcrConversionInfo* from,
   2689     VkSamplerYcbcrConversionInfo* to)
   2690 {
   2691     (void)pool;
   2692     *to = *from;
   2693     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2694     to->pNext = nullptr;
   2695     if (pNext_size)
   2696     {
   2697         to->pNext = (const void*)pool->alloc(pNext_size);
   2698         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2699     }
   2700 }
   2701 
   2702 void deepcopy_VkBindImagePlaneMemoryInfo(
   2703     Pool* pool,
   2704     const VkBindImagePlaneMemoryInfo* from,
   2705     VkBindImagePlaneMemoryInfo* to)
   2706 {
   2707     (void)pool;
   2708     *to = *from;
   2709     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2710     to->pNext = nullptr;
   2711     if (pNext_size)
   2712     {
   2713         to->pNext = (const void*)pool->alloc(pNext_size);
   2714         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2715     }
   2716 }
   2717 
   2718 void deepcopy_VkImagePlaneMemoryRequirementsInfo(
   2719     Pool* pool,
   2720     const VkImagePlaneMemoryRequirementsInfo* from,
   2721     VkImagePlaneMemoryRequirementsInfo* to)
   2722 {
   2723     (void)pool;
   2724     *to = *from;
   2725     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2726     to->pNext = nullptr;
   2727     if (pNext_size)
   2728     {
   2729         to->pNext = (const void*)pool->alloc(pNext_size);
   2730         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2731     }
   2732 }
   2733 
   2734 void deepcopy_VkPhysicalDeviceSamplerYcbcrConversionFeatures(
   2735     Pool* pool,
   2736     const VkPhysicalDeviceSamplerYcbcrConversionFeatures* from,
   2737     VkPhysicalDeviceSamplerYcbcrConversionFeatures* to)
   2738 {
   2739     (void)pool;
   2740     *to = *from;
   2741     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2742     to->pNext = nullptr;
   2743     if (pNext_size)
   2744     {
   2745         to->pNext = (void*)pool->alloc(pNext_size);
   2746         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2747     }
   2748 }
   2749 
   2750 void deepcopy_VkSamplerYcbcrConversionImageFormatProperties(
   2751     Pool* pool,
   2752     const VkSamplerYcbcrConversionImageFormatProperties* from,
   2753     VkSamplerYcbcrConversionImageFormatProperties* to)
   2754 {
   2755     (void)pool;
   2756     *to = *from;
   2757     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2758     to->pNext = nullptr;
   2759     if (pNext_size)
   2760     {
   2761         to->pNext = (void*)pool->alloc(pNext_size);
   2762         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2763     }
   2764 }
   2765 
   2766 void deepcopy_VkDescriptorUpdateTemplateEntry(
   2767     Pool* pool,
   2768     const VkDescriptorUpdateTemplateEntry* from,
   2769     VkDescriptorUpdateTemplateEntry* to)
   2770 {
   2771     (void)pool;
   2772     *to = *from;
   2773 }
   2774 
   2775 void deepcopy_VkDescriptorUpdateTemplateCreateInfo(
   2776     Pool* pool,
   2777     const VkDescriptorUpdateTemplateCreateInfo* from,
   2778     VkDescriptorUpdateTemplateCreateInfo* to)
   2779 {
   2780     (void)pool;
   2781     *to = *from;
   2782     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2783     to->pNext = nullptr;
   2784     if (pNext_size)
   2785     {
   2786         to->pNext = (void*)pool->alloc(pNext_size);
   2787         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2788     }
   2789     to->pDescriptorUpdateEntries = nullptr;
   2790     if (from->pDescriptorUpdateEntries)
   2791     {
   2792         to->pDescriptorUpdateEntries = (VkDescriptorUpdateTemplateEntry*)pool->alloc(from->descriptorUpdateEntryCount * sizeof(const VkDescriptorUpdateTemplateEntry));
   2793         to->descriptorUpdateEntryCount = from->descriptorUpdateEntryCount;
   2794         for (uint32_t i = 0; i < (uint32_t)from->descriptorUpdateEntryCount; ++i)
   2795         {
   2796             deepcopy_VkDescriptorUpdateTemplateEntry(pool, from->pDescriptorUpdateEntries + i, (VkDescriptorUpdateTemplateEntry*)(to->pDescriptorUpdateEntries + i));
   2797         }
   2798     }
   2799 }
   2800 
   2801 void deepcopy_VkExternalMemoryProperties(
   2802     Pool* pool,
   2803     const VkExternalMemoryProperties* from,
   2804     VkExternalMemoryProperties* to)
   2805 {
   2806     (void)pool;
   2807     *to = *from;
   2808 }
   2809 
   2810 void deepcopy_VkPhysicalDeviceExternalImageFormatInfo(
   2811     Pool* pool,
   2812     const VkPhysicalDeviceExternalImageFormatInfo* from,
   2813     VkPhysicalDeviceExternalImageFormatInfo* to)
   2814 {
   2815     (void)pool;
   2816     *to = *from;
   2817     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2818     to->pNext = nullptr;
   2819     if (pNext_size)
   2820     {
   2821         to->pNext = (const void*)pool->alloc(pNext_size);
   2822         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2823     }
   2824 }
   2825 
   2826 void deepcopy_VkExternalImageFormatProperties(
   2827     Pool* pool,
   2828     const VkExternalImageFormatProperties* from,
   2829     VkExternalImageFormatProperties* to)
   2830 {
   2831     (void)pool;
   2832     *to = *from;
   2833     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2834     to->pNext = nullptr;
   2835     if (pNext_size)
   2836     {
   2837         to->pNext = (void*)pool->alloc(pNext_size);
   2838         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2839     }
   2840     deepcopy_VkExternalMemoryProperties(pool, &from->externalMemoryProperties, (VkExternalMemoryProperties*)(&to->externalMemoryProperties));
   2841 }
   2842 
   2843 void deepcopy_VkPhysicalDeviceExternalBufferInfo(
   2844     Pool* pool,
   2845     const VkPhysicalDeviceExternalBufferInfo* from,
   2846     VkPhysicalDeviceExternalBufferInfo* to)
   2847 {
   2848     (void)pool;
   2849     *to = *from;
   2850     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2851     to->pNext = nullptr;
   2852     if (pNext_size)
   2853     {
   2854         to->pNext = (const void*)pool->alloc(pNext_size);
   2855         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2856     }
   2857 }
   2858 
   2859 void deepcopy_VkExternalBufferProperties(
   2860     Pool* pool,
   2861     const VkExternalBufferProperties* from,
   2862     VkExternalBufferProperties* to)
   2863 {
   2864     (void)pool;
   2865     *to = *from;
   2866     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2867     to->pNext = nullptr;
   2868     if (pNext_size)
   2869     {
   2870         to->pNext = (void*)pool->alloc(pNext_size);
   2871         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2872     }
   2873     deepcopy_VkExternalMemoryProperties(pool, &from->externalMemoryProperties, (VkExternalMemoryProperties*)(&to->externalMemoryProperties));
   2874 }
   2875 
   2876 void deepcopy_VkPhysicalDeviceIDProperties(
   2877     Pool* pool,
   2878     const VkPhysicalDeviceIDProperties* from,
   2879     VkPhysicalDeviceIDProperties* to)
   2880 {
   2881     (void)pool;
   2882     *to = *from;
   2883     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2884     to->pNext = nullptr;
   2885     if (pNext_size)
   2886     {
   2887         to->pNext = (void*)pool->alloc(pNext_size);
   2888         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2889     }
   2890     memcpy(to->deviceUUID, from->deviceUUID, VK_UUID_SIZE * sizeof(uint8_t));
   2891     memcpy(to->driverUUID, from->driverUUID, VK_UUID_SIZE * sizeof(uint8_t));
   2892     memcpy(to->deviceLUID, from->deviceLUID, VK_LUID_SIZE * sizeof(uint8_t));
   2893 }
   2894 
   2895 void deepcopy_VkExternalMemoryImageCreateInfo(
   2896     Pool* pool,
   2897     const VkExternalMemoryImageCreateInfo* from,
   2898     VkExternalMemoryImageCreateInfo* to)
   2899 {
   2900     (void)pool;
   2901     *to = *from;
   2902     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2903     to->pNext = nullptr;
   2904     if (pNext_size)
   2905     {
   2906         to->pNext = (const void*)pool->alloc(pNext_size);
   2907         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2908     }
   2909 }
   2910 
   2911 void deepcopy_VkExternalMemoryBufferCreateInfo(
   2912     Pool* pool,
   2913     const VkExternalMemoryBufferCreateInfo* from,
   2914     VkExternalMemoryBufferCreateInfo* to)
   2915 {
   2916     (void)pool;
   2917     *to = *from;
   2918     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2919     to->pNext = nullptr;
   2920     if (pNext_size)
   2921     {
   2922         to->pNext = (const void*)pool->alloc(pNext_size);
   2923         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2924     }
   2925 }
   2926 
   2927 void deepcopy_VkExportMemoryAllocateInfo(
   2928     Pool* pool,
   2929     const VkExportMemoryAllocateInfo* from,
   2930     VkExportMemoryAllocateInfo* to)
   2931 {
   2932     (void)pool;
   2933     *to = *from;
   2934     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2935     to->pNext = nullptr;
   2936     if (pNext_size)
   2937     {
   2938         to->pNext = (const void*)pool->alloc(pNext_size);
   2939         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2940     }
   2941 }
   2942 
   2943 void deepcopy_VkPhysicalDeviceExternalFenceInfo(
   2944     Pool* pool,
   2945     const VkPhysicalDeviceExternalFenceInfo* from,
   2946     VkPhysicalDeviceExternalFenceInfo* to)
   2947 {
   2948     (void)pool;
   2949     *to = *from;
   2950     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2951     to->pNext = nullptr;
   2952     if (pNext_size)
   2953     {
   2954         to->pNext = (const void*)pool->alloc(pNext_size);
   2955         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2956     }
   2957 }
   2958 
   2959 void deepcopy_VkExternalFenceProperties(
   2960     Pool* pool,
   2961     const VkExternalFenceProperties* from,
   2962     VkExternalFenceProperties* to)
   2963 {
   2964     (void)pool;
   2965     *to = *from;
   2966     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2967     to->pNext = nullptr;
   2968     if (pNext_size)
   2969     {
   2970         to->pNext = (void*)pool->alloc(pNext_size);
   2971         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2972     }
   2973 }
   2974 
   2975 void deepcopy_VkExportFenceCreateInfo(
   2976     Pool* pool,
   2977     const VkExportFenceCreateInfo* from,
   2978     VkExportFenceCreateInfo* to)
   2979 {
   2980     (void)pool;
   2981     *to = *from;
   2982     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2983     to->pNext = nullptr;
   2984     if (pNext_size)
   2985     {
   2986         to->pNext = (const void*)pool->alloc(pNext_size);
   2987         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   2988     }
   2989 }
   2990 
   2991 void deepcopy_VkExportSemaphoreCreateInfo(
   2992     Pool* pool,
   2993     const VkExportSemaphoreCreateInfo* from,
   2994     VkExportSemaphoreCreateInfo* to)
   2995 {
   2996     (void)pool;
   2997     *to = *from;
   2998     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   2999     to->pNext = nullptr;
   3000     if (pNext_size)
   3001     {
   3002         to->pNext = (const void*)pool->alloc(pNext_size);
   3003         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3004     }
   3005 }
   3006 
   3007 void deepcopy_VkPhysicalDeviceExternalSemaphoreInfo(
   3008     Pool* pool,
   3009     const VkPhysicalDeviceExternalSemaphoreInfo* from,
   3010     VkPhysicalDeviceExternalSemaphoreInfo* to)
   3011 {
   3012     (void)pool;
   3013     *to = *from;
   3014     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3015     to->pNext = nullptr;
   3016     if (pNext_size)
   3017     {
   3018         to->pNext = (const void*)pool->alloc(pNext_size);
   3019         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3020     }
   3021 }
   3022 
   3023 void deepcopy_VkExternalSemaphoreProperties(
   3024     Pool* pool,
   3025     const VkExternalSemaphoreProperties* from,
   3026     VkExternalSemaphoreProperties* to)
   3027 {
   3028     (void)pool;
   3029     *to = *from;
   3030     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3031     to->pNext = nullptr;
   3032     if (pNext_size)
   3033     {
   3034         to->pNext = (void*)pool->alloc(pNext_size);
   3035         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3036     }
   3037 }
   3038 
   3039 void deepcopy_VkPhysicalDeviceMaintenance3Properties(
   3040     Pool* pool,
   3041     const VkPhysicalDeviceMaintenance3Properties* from,
   3042     VkPhysicalDeviceMaintenance3Properties* to)
   3043 {
   3044     (void)pool;
   3045     *to = *from;
   3046     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3047     to->pNext = nullptr;
   3048     if (pNext_size)
   3049     {
   3050         to->pNext = (void*)pool->alloc(pNext_size);
   3051         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3052     }
   3053 }
   3054 
   3055 void deepcopy_VkDescriptorSetLayoutSupport(
   3056     Pool* pool,
   3057     const VkDescriptorSetLayoutSupport* from,
   3058     VkDescriptorSetLayoutSupport* to)
   3059 {
   3060     (void)pool;
   3061     *to = *from;
   3062     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3063     to->pNext = nullptr;
   3064     if (pNext_size)
   3065     {
   3066         to->pNext = (void*)pool->alloc(pNext_size);
   3067         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3068     }
   3069 }
   3070 
   3071 void deepcopy_VkPhysicalDeviceShaderDrawParameterFeatures(
   3072     Pool* pool,
   3073     const VkPhysicalDeviceShaderDrawParameterFeatures* from,
   3074     VkPhysicalDeviceShaderDrawParameterFeatures* to)
   3075 {
   3076     (void)pool;
   3077     *to = *from;
   3078     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3079     to->pNext = nullptr;
   3080     if (pNext_size)
   3081     {
   3082         to->pNext = (void*)pool->alloc(pNext_size);
   3083         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3084     }
   3085 }
   3086 
   3087 #endif
   3088 #ifdef VK_KHR_surface
   3089 void deepcopy_VkSurfaceCapabilitiesKHR(
   3090     Pool* pool,
   3091     const VkSurfaceCapabilitiesKHR* from,
   3092     VkSurfaceCapabilitiesKHR* to)
   3093 {
   3094     (void)pool;
   3095     *to = *from;
   3096     deepcopy_VkExtent2D(pool, &from->currentExtent, (VkExtent2D*)(&to->currentExtent));
   3097     deepcopy_VkExtent2D(pool, &from->minImageExtent, (VkExtent2D*)(&to->minImageExtent));
   3098     deepcopy_VkExtent2D(pool, &from->maxImageExtent, (VkExtent2D*)(&to->maxImageExtent));
   3099 }
   3100 
   3101 void deepcopy_VkSurfaceFormatKHR(
   3102     Pool* pool,
   3103     const VkSurfaceFormatKHR* from,
   3104     VkSurfaceFormatKHR* to)
   3105 {
   3106     (void)pool;
   3107     *to = *from;
   3108 }
   3109 
   3110 #endif
   3111 #ifdef VK_KHR_swapchain
   3112 void deepcopy_VkSwapchainCreateInfoKHR(
   3113     Pool* pool,
   3114     const VkSwapchainCreateInfoKHR* from,
   3115     VkSwapchainCreateInfoKHR* to)
   3116 {
   3117     (void)pool;
   3118     *to = *from;
   3119     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3120     to->pNext = nullptr;
   3121     if (pNext_size)
   3122     {
   3123         to->pNext = (const void*)pool->alloc(pNext_size);
   3124         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3125     }
   3126     deepcopy_VkExtent2D(pool, &from->imageExtent, (VkExtent2D*)(&to->imageExtent));
   3127     to->pQueueFamilyIndices = nullptr;
   3128     if (from->pQueueFamilyIndices)
   3129     {
   3130         to->pQueueFamilyIndices = (uint32_t*)pool->dupArray(from->pQueueFamilyIndices, from->queueFamilyIndexCount * sizeof(const uint32_t));
   3131     }
   3132 }
   3133 
   3134 void deepcopy_VkPresentInfoKHR(
   3135     Pool* pool,
   3136     const VkPresentInfoKHR* from,
   3137     VkPresentInfoKHR* to)
   3138 {
   3139     (void)pool;
   3140     *to = *from;
   3141     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3142     to->pNext = nullptr;
   3143     if (pNext_size)
   3144     {
   3145         to->pNext = (const void*)pool->alloc(pNext_size);
   3146         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3147     }
   3148     to->pWaitSemaphores = nullptr;
   3149     if (from->pWaitSemaphores)
   3150     {
   3151         to->pWaitSemaphores = (VkSemaphore*)pool->dupArray(from->pWaitSemaphores, from->waitSemaphoreCount * sizeof(const VkSemaphore));
   3152     }
   3153     to->pSwapchains = nullptr;
   3154     if (from->pSwapchains)
   3155     {
   3156         to->pSwapchains = (VkSwapchainKHR*)pool->dupArray(from->pSwapchains, from->swapchainCount * sizeof(const VkSwapchainKHR));
   3157     }
   3158     to->pImageIndices = nullptr;
   3159     if (from->pImageIndices)
   3160     {
   3161         to->pImageIndices = (uint32_t*)pool->dupArray(from->pImageIndices, from->swapchainCount * sizeof(const uint32_t));
   3162     }
   3163     to->pResults = nullptr;
   3164     if (from->pResults)
   3165     {
   3166         to->pResults = (VkResult*)pool->dupArray(from->pResults, from->swapchainCount * sizeof(VkResult));
   3167     }
   3168 }
   3169 
   3170 void deepcopy_VkImageSwapchainCreateInfoKHR(
   3171     Pool* pool,
   3172     const VkImageSwapchainCreateInfoKHR* from,
   3173     VkImageSwapchainCreateInfoKHR* to)
   3174 {
   3175     (void)pool;
   3176     *to = *from;
   3177     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3178     to->pNext = nullptr;
   3179     if (pNext_size)
   3180     {
   3181         to->pNext = (const void*)pool->alloc(pNext_size);
   3182         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3183     }
   3184 }
   3185 
   3186 void deepcopy_VkBindImageMemorySwapchainInfoKHR(
   3187     Pool* pool,
   3188     const VkBindImageMemorySwapchainInfoKHR* from,
   3189     VkBindImageMemorySwapchainInfoKHR* to)
   3190 {
   3191     (void)pool;
   3192     *to = *from;
   3193     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3194     to->pNext = nullptr;
   3195     if (pNext_size)
   3196     {
   3197         to->pNext = (const void*)pool->alloc(pNext_size);
   3198         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3199     }
   3200 }
   3201 
   3202 void deepcopy_VkAcquireNextImageInfoKHR(
   3203     Pool* pool,
   3204     const VkAcquireNextImageInfoKHR* from,
   3205     VkAcquireNextImageInfoKHR* to)
   3206 {
   3207     (void)pool;
   3208     *to = *from;
   3209     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3210     to->pNext = nullptr;
   3211     if (pNext_size)
   3212     {
   3213         to->pNext = (const void*)pool->alloc(pNext_size);
   3214         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3215     }
   3216 }
   3217 
   3218 void deepcopy_VkDeviceGroupPresentCapabilitiesKHR(
   3219     Pool* pool,
   3220     const VkDeviceGroupPresentCapabilitiesKHR* from,
   3221     VkDeviceGroupPresentCapabilitiesKHR* to)
   3222 {
   3223     (void)pool;
   3224     *to = *from;
   3225     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3226     to->pNext = nullptr;
   3227     if (pNext_size)
   3228     {
   3229         to->pNext = (const void*)pool->alloc(pNext_size);
   3230         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3231     }
   3232     memcpy(to->presentMask, from->presentMask, VK_MAX_DEVICE_GROUP_SIZE * sizeof(uint32_t));
   3233 }
   3234 
   3235 void deepcopy_VkDeviceGroupPresentInfoKHR(
   3236     Pool* pool,
   3237     const VkDeviceGroupPresentInfoKHR* from,
   3238     VkDeviceGroupPresentInfoKHR* to)
   3239 {
   3240     (void)pool;
   3241     *to = *from;
   3242     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3243     to->pNext = nullptr;
   3244     if (pNext_size)
   3245     {
   3246         to->pNext = (const void*)pool->alloc(pNext_size);
   3247         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3248     }
   3249     to->pDeviceMasks = nullptr;
   3250     if (from->pDeviceMasks)
   3251     {
   3252         to->pDeviceMasks = (uint32_t*)pool->dupArray(from->pDeviceMasks, from->swapchainCount * sizeof(const uint32_t));
   3253     }
   3254 }
   3255 
   3256 void deepcopy_VkDeviceGroupSwapchainCreateInfoKHR(
   3257     Pool* pool,
   3258     const VkDeviceGroupSwapchainCreateInfoKHR* from,
   3259     VkDeviceGroupSwapchainCreateInfoKHR* to)
   3260 {
   3261     (void)pool;
   3262     *to = *from;
   3263     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3264     to->pNext = nullptr;
   3265     if (pNext_size)
   3266     {
   3267         to->pNext = (const void*)pool->alloc(pNext_size);
   3268         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3269     }
   3270 }
   3271 
   3272 #endif
   3273 #ifdef VK_KHR_display
   3274 void deepcopy_VkDisplayPropertiesKHR(
   3275     Pool* pool,
   3276     const VkDisplayPropertiesKHR* from,
   3277     VkDisplayPropertiesKHR* to)
   3278 {
   3279     (void)pool;
   3280     *to = *from;
   3281     to->displayName = nullptr;
   3282     if (from->displayName)
   3283     {
   3284         to->displayName = pool->strDup(from->displayName);
   3285     }
   3286     deepcopy_VkExtent2D(pool, &from->physicalDimensions, (VkExtent2D*)(&to->physicalDimensions));
   3287     deepcopy_VkExtent2D(pool, &from->physicalResolution, (VkExtent2D*)(&to->physicalResolution));
   3288 }
   3289 
   3290 void deepcopy_VkDisplayModeParametersKHR(
   3291     Pool* pool,
   3292     const VkDisplayModeParametersKHR* from,
   3293     VkDisplayModeParametersKHR* to)
   3294 {
   3295     (void)pool;
   3296     *to = *from;
   3297     deepcopy_VkExtent2D(pool, &from->visibleRegion, (VkExtent2D*)(&to->visibleRegion));
   3298 }
   3299 
   3300 void deepcopy_VkDisplayModePropertiesKHR(
   3301     Pool* pool,
   3302     const VkDisplayModePropertiesKHR* from,
   3303     VkDisplayModePropertiesKHR* to)
   3304 {
   3305     (void)pool;
   3306     *to = *from;
   3307     deepcopy_VkDisplayModeParametersKHR(pool, &from->parameters, (VkDisplayModeParametersKHR*)(&to->parameters));
   3308 }
   3309 
   3310 void deepcopy_VkDisplayModeCreateInfoKHR(
   3311     Pool* pool,
   3312     const VkDisplayModeCreateInfoKHR* from,
   3313     VkDisplayModeCreateInfoKHR* to)
   3314 {
   3315     (void)pool;
   3316     *to = *from;
   3317     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3318     to->pNext = nullptr;
   3319     if (pNext_size)
   3320     {
   3321         to->pNext = (const void*)pool->alloc(pNext_size);
   3322         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3323     }
   3324     deepcopy_VkDisplayModeParametersKHR(pool, &from->parameters, (VkDisplayModeParametersKHR*)(&to->parameters));
   3325 }
   3326 
   3327 void deepcopy_VkDisplayPlaneCapabilitiesKHR(
   3328     Pool* pool,
   3329     const VkDisplayPlaneCapabilitiesKHR* from,
   3330     VkDisplayPlaneCapabilitiesKHR* to)
   3331 {
   3332     (void)pool;
   3333     *to = *from;
   3334     deepcopy_VkOffset2D(pool, &from->minSrcPosition, (VkOffset2D*)(&to->minSrcPosition));
   3335     deepcopy_VkOffset2D(pool, &from->maxSrcPosition, (VkOffset2D*)(&to->maxSrcPosition));
   3336     deepcopy_VkExtent2D(pool, &from->minSrcExtent, (VkExtent2D*)(&to->minSrcExtent));
   3337     deepcopy_VkExtent2D(pool, &from->maxSrcExtent, (VkExtent2D*)(&to->maxSrcExtent));
   3338     deepcopy_VkOffset2D(pool, &from->minDstPosition, (VkOffset2D*)(&to->minDstPosition));
   3339     deepcopy_VkOffset2D(pool, &from->maxDstPosition, (VkOffset2D*)(&to->maxDstPosition));
   3340     deepcopy_VkExtent2D(pool, &from->minDstExtent, (VkExtent2D*)(&to->minDstExtent));
   3341     deepcopy_VkExtent2D(pool, &from->maxDstExtent, (VkExtent2D*)(&to->maxDstExtent));
   3342 }
   3343 
   3344 void deepcopy_VkDisplayPlanePropertiesKHR(
   3345     Pool* pool,
   3346     const VkDisplayPlanePropertiesKHR* from,
   3347     VkDisplayPlanePropertiesKHR* to)
   3348 {
   3349     (void)pool;
   3350     *to = *from;
   3351 }
   3352 
   3353 void deepcopy_VkDisplaySurfaceCreateInfoKHR(
   3354     Pool* pool,
   3355     const VkDisplaySurfaceCreateInfoKHR* from,
   3356     VkDisplaySurfaceCreateInfoKHR* to)
   3357 {
   3358     (void)pool;
   3359     *to = *from;
   3360     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3361     to->pNext = nullptr;
   3362     if (pNext_size)
   3363     {
   3364         to->pNext = (const void*)pool->alloc(pNext_size);
   3365         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3366     }
   3367     deepcopy_VkExtent2D(pool, &from->imageExtent, (VkExtent2D*)(&to->imageExtent));
   3368 }
   3369 
   3370 #endif
   3371 #ifdef VK_KHR_display_swapchain
   3372 void deepcopy_VkDisplayPresentInfoKHR(
   3373     Pool* pool,
   3374     const VkDisplayPresentInfoKHR* from,
   3375     VkDisplayPresentInfoKHR* to)
   3376 {
   3377     (void)pool;
   3378     *to = *from;
   3379     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3380     to->pNext = nullptr;
   3381     if (pNext_size)
   3382     {
   3383         to->pNext = (const void*)pool->alloc(pNext_size);
   3384         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3385     }
   3386     deepcopy_VkRect2D(pool, &from->srcRect, (VkRect2D*)(&to->srcRect));
   3387     deepcopy_VkRect2D(pool, &from->dstRect, (VkRect2D*)(&to->dstRect));
   3388 }
   3389 
   3390 #endif
   3391 #ifdef VK_KHR_xlib_surface
   3392 void deepcopy_VkXlibSurfaceCreateInfoKHR(
   3393     Pool* pool,
   3394     const VkXlibSurfaceCreateInfoKHR* from,
   3395     VkXlibSurfaceCreateInfoKHR* to)
   3396 {
   3397     (void)pool;
   3398     *to = *from;
   3399     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3400     to->pNext = nullptr;
   3401     if (pNext_size)
   3402     {
   3403         to->pNext = (const void*)pool->alloc(pNext_size);
   3404         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3405     }
   3406     to->dpy = nullptr;
   3407     if (from->dpy)
   3408     {
   3409         to->dpy = (Display*)pool->dupArray(from->dpy, sizeof(Display));
   3410     }
   3411 }
   3412 
   3413 #endif
   3414 #ifdef VK_KHR_xcb_surface
   3415 void deepcopy_VkXcbSurfaceCreateInfoKHR(
   3416     Pool* pool,
   3417     const VkXcbSurfaceCreateInfoKHR* from,
   3418     VkXcbSurfaceCreateInfoKHR* to)
   3419 {
   3420     (void)pool;
   3421     *to = *from;
   3422     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3423     to->pNext = nullptr;
   3424     if (pNext_size)
   3425     {
   3426         to->pNext = (const void*)pool->alloc(pNext_size);
   3427         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3428     }
   3429     to->connection = nullptr;
   3430     if (from->connection)
   3431     {
   3432         to->connection = (xcb_connection_t*)pool->dupArray(from->connection, sizeof(xcb_connection_t));
   3433     }
   3434 }
   3435 
   3436 #endif
   3437 #ifdef VK_KHR_wayland_surface
   3438 void deepcopy_VkWaylandSurfaceCreateInfoKHR(
   3439     Pool* pool,
   3440     const VkWaylandSurfaceCreateInfoKHR* from,
   3441     VkWaylandSurfaceCreateInfoKHR* to)
   3442 {
   3443     (void)pool;
   3444     *to = *from;
   3445     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3446     to->pNext = nullptr;
   3447     if (pNext_size)
   3448     {
   3449         to->pNext = (const void*)pool->alloc(pNext_size);
   3450         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3451     }
   3452     to->display = nullptr;
   3453     if (from->display)
   3454     {
   3455         to->display = (wl_display*)pool->dupArray(from->display, sizeof(wl_display));
   3456     }
   3457     to->surface = nullptr;
   3458     if (from->surface)
   3459     {
   3460         to->surface = (wl_surface*)pool->dupArray(from->surface, sizeof(wl_surface));
   3461     }
   3462 }
   3463 
   3464 #endif
   3465 #ifdef VK_KHR_mir_surface
   3466 void deepcopy_VkMirSurfaceCreateInfoKHR(
   3467     Pool* pool,
   3468     const VkMirSurfaceCreateInfoKHR* from,
   3469     VkMirSurfaceCreateInfoKHR* to)
   3470 {
   3471     (void)pool;
   3472     *to = *from;
   3473     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3474     to->pNext = nullptr;
   3475     if (pNext_size)
   3476     {
   3477         to->pNext = (const void*)pool->alloc(pNext_size);
   3478         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3479     }
   3480     to->connection = nullptr;
   3481     if (from->connection)
   3482     {
   3483         to->connection = (MirConnection*)pool->dupArray(from->connection, sizeof(MirConnection));
   3484     }
   3485     to->mirSurface = nullptr;
   3486     if (from->mirSurface)
   3487     {
   3488         to->mirSurface = (MirSurface*)pool->dupArray(from->mirSurface, sizeof(MirSurface));
   3489     }
   3490 }
   3491 
   3492 #endif
   3493 #ifdef VK_KHR_android_surface
   3494 void deepcopy_VkAndroidSurfaceCreateInfoKHR(
   3495     Pool* pool,
   3496     const VkAndroidSurfaceCreateInfoKHR* from,
   3497     VkAndroidSurfaceCreateInfoKHR* to)
   3498 {
   3499     (void)pool;
   3500     *to = *from;
   3501     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3502     to->pNext = nullptr;
   3503     if (pNext_size)
   3504     {
   3505         to->pNext = (const void*)pool->alloc(pNext_size);
   3506         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3507     }
   3508     to->window = nullptr;
   3509     if (from->window)
   3510     {
   3511         to->window = (ANativeWindow*)pool->dupArray(from->window, sizeof(ANativeWindow));
   3512     }
   3513 }
   3514 
   3515 #endif
   3516 #ifdef VK_KHR_win32_surface
   3517 void deepcopy_VkWin32SurfaceCreateInfoKHR(
   3518     Pool* pool,
   3519     const VkWin32SurfaceCreateInfoKHR* from,
   3520     VkWin32SurfaceCreateInfoKHR* to)
   3521 {
   3522     (void)pool;
   3523     *to = *from;
   3524     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3525     to->pNext = nullptr;
   3526     if (pNext_size)
   3527     {
   3528         to->pNext = (const void*)pool->alloc(pNext_size);
   3529         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3530     }
   3531 }
   3532 
   3533 #endif
   3534 #ifdef VK_KHR_sampler_mirror_clamp_to_edge
   3535 #endif
   3536 #ifdef VK_KHR_multiview
   3537 #endif
   3538 #ifdef VK_KHR_get_physical_device_properties2
   3539 #endif
   3540 #ifdef VK_KHR_device_group
   3541 #endif
   3542 #ifdef VK_KHR_shader_draw_parameters
   3543 #endif
   3544 #ifdef VK_KHR_maintenance1
   3545 #endif
   3546 #ifdef VK_KHR_device_group_creation
   3547 #endif
   3548 #ifdef VK_KHR_external_memory_capabilities
   3549 #endif
   3550 #ifdef VK_KHR_external_memory
   3551 #endif
   3552 #ifdef VK_KHR_external_memory_win32
   3553 void deepcopy_VkImportMemoryWin32HandleInfoKHR(
   3554     Pool* pool,
   3555     const VkImportMemoryWin32HandleInfoKHR* from,
   3556     VkImportMemoryWin32HandleInfoKHR* to)
   3557 {
   3558     (void)pool;
   3559     *to = *from;
   3560     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3561     to->pNext = nullptr;
   3562     if (pNext_size)
   3563     {
   3564         to->pNext = (const void*)pool->alloc(pNext_size);
   3565         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3566     }
   3567 }
   3568 
   3569 void deepcopy_VkExportMemoryWin32HandleInfoKHR(
   3570     Pool* pool,
   3571     const VkExportMemoryWin32HandleInfoKHR* from,
   3572     VkExportMemoryWin32HandleInfoKHR* to)
   3573 {
   3574     (void)pool;
   3575     *to = *from;
   3576     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3577     to->pNext = nullptr;
   3578     if (pNext_size)
   3579     {
   3580         to->pNext = (const void*)pool->alloc(pNext_size);
   3581         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3582     }
   3583     to->pAttributes = nullptr;
   3584     if (from->pAttributes)
   3585     {
   3586         to->pAttributes = (SECURITY_ATTRIBUTES*)pool->dupArray(from->pAttributes, sizeof(const SECURITY_ATTRIBUTES));
   3587     }
   3588 }
   3589 
   3590 void deepcopy_VkMemoryWin32HandlePropertiesKHR(
   3591     Pool* pool,
   3592     const VkMemoryWin32HandlePropertiesKHR* from,
   3593     VkMemoryWin32HandlePropertiesKHR* to)
   3594 {
   3595     (void)pool;
   3596     *to = *from;
   3597     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3598     to->pNext = nullptr;
   3599     if (pNext_size)
   3600     {
   3601         to->pNext = (void*)pool->alloc(pNext_size);
   3602         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3603     }
   3604 }
   3605 
   3606 void deepcopy_VkMemoryGetWin32HandleInfoKHR(
   3607     Pool* pool,
   3608     const VkMemoryGetWin32HandleInfoKHR* from,
   3609     VkMemoryGetWin32HandleInfoKHR* to)
   3610 {
   3611     (void)pool;
   3612     *to = *from;
   3613     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3614     to->pNext = nullptr;
   3615     if (pNext_size)
   3616     {
   3617         to->pNext = (const void*)pool->alloc(pNext_size);
   3618         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3619     }
   3620 }
   3621 
   3622 #endif
   3623 #ifdef VK_KHR_external_memory_fd
   3624 void deepcopy_VkImportMemoryFdInfoKHR(
   3625     Pool* pool,
   3626     const VkImportMemoryFdInfoKHR* from,
   3627     VkImportMemoryFdInfoKHR* to)
   3628 {
   3629     (void)pool;
   3630     *to = *from;
   3631     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3632     to->pNext = nullptr;
   3633     if (pNext_size)
   3634     {
   3635         to->pNext = (const void*)pool->alloc(pNext_size);
   3636         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3637     }
   3638 }
   3639 
   3640 void deepcopy_VkMemoryFdPropertiesKHR(
   3641     Pool* pool,
   3642     const VkMemoryFdPropertiesKHR* from,
   3643     VkMemoryFdPropertiesKHR* to)
   3644 {
   3645     (void)pool;
   3646     *to = *from;
   3647     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3648     to->pNext = nullptr;
   3649     if (pNext_size)
   3650     {
   3651         to->pNext = (void*)pool->alloc(pNext_size);
   3652         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3653     }
   3654 }
   3655 
   3656 void deepcopy_VkMemoryGetFdInfoKHR(
   3657     Pool* pool,
   3658     const VkMemoryGetFdInfoKHR* from,
   3659     VkMemoryGetFdInfoKHR* to)
   3660 {
   3661     (void)pool;
   3662     *to = *from;
   3663     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3664     to->pNext = nullptr;
   3665     if (pNext_size)
   3666     {
   3667         to->pNext = (const void*)pool->alloc(pNext_size);
   3668         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3669     }
   3670 }
   3671 
   3672 #endif
   3673 #ifdef VK_KHR_win32_keyed_mutex
   3674 void deepcopy_VkWin32KeyedMutexAcquireReleaseInfoKHR(
   3675     Pool* pool,
   3676     const VkWin32KeyedMutexAcquireReleaseInfoKHR* from,
   3677     VkWin32KeyedMutexAcquireReleaseInfoKHR* to)
   3678 {
   3679     (void)pool;
   3680     *to = *from;
   3681     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3682     to->pNext = nullptr;
   3683     if (pNext_size)
   3684     {
   3685         to->pNext = (const void*)pool->alloc(pNext_size);
   3686         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3687     }
   3688     to->pAcquireSyncs = nullptr;
   3689     if (from->pAcquireSyncs)
   3690     {
   3691         to->pAcquireSyncs = (VkDeviceMemory*)pool->dupArray(from->pAcquireSyncs, from->acquireCount * sizeof(const VkDeviceMemory));
   3692     }
   3693     to->pAcquireKeys = nullptr;
   3694     if (from->pAcquireKeys)
   3695     {
   3696         to->pAcquireKeys = (uint64_t*)pool->dupArray(from->pAcquireKeys, from->acquireCount * sizeof(const uint64_t));
   3697     }
   3698     to->pAcquireTimeouts = nullptr;
   3699     if (from->pAcquireTimeouts)
   3700     {
   3701         to->pAcquireTimeouts = (uint32_t*)pool->dupArray(from->pAcquireTimeouts, from->acquireCount * sizeof(const uint32_t));
   3702     }
   3703     to->pReleaseSyncs = nullptr;
   3704     if (from->pReleaseSyncs)
   3705     {
   3706         to->pReleaseSyncs = (VkDeviceMemory*)pool->dupArray(from->pReleaseSyncs, from->releaseCount * sizeof(const VkDeviceMemory));
   3707     }
   3708     to->pReleaseKeys = nullptr;
   3709     if (from->pReleaseKeys)
   3710     {
   3711         to->pReleaseKeys = (uint64_t*)pool->dupArray(from->pReleaseKeys, from->releaseCount * sizeof(const uint64_t));
   3712     }
   3713 }
   3714 
   3715 #endif
   3716 #ifdef VK_KHR_external_semaphore_capabilities
   3717 #endif
   3718 #ifdef VK_KHR_external_semaphore
   3719 #endif
   3720 #ifdef VK_KHR_external_semaphore_win32
   3721 void deepcopy_VkImportSemaphoreWin32HandleInfoKHR(
   3722     Pool* pool,
   3723     const VkImportSemaphoreWin32HandleInfoKHR* from,
   3724     VkImportSemaphoreWin32HandleInfoKHR* to)
   3725 {
   3726     (void)pool;
   3727     *to = *from;
   3728     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3729     to->pNext = nullptr;
   3730     if (pNext_size)
   3731     {
   3732         to->pNext = (const void*)pool->alloc(pNext_size);
   3733         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3734     }
   3735 }
   3736 
   3737 void deepcopy_VkExportSemaphoreWin32HandleInfoKHR(
   3738     Pool* pool,
   3739     const VkExportSemaphoreWin32HandleInfoKHR* from,
   3740     VkExportSemaphoreWin32HandleInfoKHR* to)
   3741 {
   3742     (void)pool;
   3743     *to = *from;
   3744     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3745     to->pNext = nullptr;
   3746     if (pNext_size)
   3747     {
   3748         to->pNext = (const void*)pool->alloc(pNext_size);
   3749         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3750     }
   3751     to->pAttributes = nullptr;
   3752     if (from->pAttributes)
   3753     {
   3754         to->pAttributes = (SECURITY_ATTRIBUTES*)pool->dupArray(from->pAttributes, sizeof(const SECURITY_ATTRIBUTES));
   3755     }
   3756 }
   3757 
   3758 void deepcopy_VkD3D12FenceSubmitInfoKHR(
   3759     Pool* pool,
   3760     const VkD3D12FenceSubmitInfoKHR* from,
   3761     VkD3D12FenceSubmitInfoKHR* to)
   3762 {
   3763     (void)pool;
   3764     *to = *from;
   3765     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3766     to->pNext = nullptr;
   3767     if (pNext_size)
   3768     {
   3769         to->pNext = (const void*)pool->alloc(pNext_size);
   3770         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3771     }
   3772     to->pWaitSemaphoreValues = nullptr;
   3773     if (from->pWaitSemaphoreValues)
   3774     {
   3775         to->pWaitSemaphoreValues = (uint64_t*)pool->dupArray(from->pWaitSemaphoreValues, from->waitSemaphoreValuesCount * sizeof(const uint64_t));
   3776     }
   3777     to->pSignalSemaphoreValues = nullptr;
   3778     if (from->pSignalSemaphoreValues)
   3779     {
   3780         to->pSignalSemaphoreValues = (uint64_t*)pool->dupArray(from->pSignalSemaphoreValues, from->signalSemaphoreValuesCount * sizeof(const uint64_t));
   3781     }
   3782 }
   3783 
   3784 void deepcopy_VkSemaphoreGetWin32HandleInfoKHR(
   3785     Pool* pool,
   3786     const VkSemaphoreGetWin32HandleInfoKHR* from,
   3787     VkSemaphoreGetWin32HandleInfoKHR* to)
   3788 {
   3789     (void)pool;
   3790     *to = *from;
   3791     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3792     to->pNext = nullptr;
   3793     if (pNext_size)
   3794     {
   3795         to->pNext = (const void*)pool->alloc(pNext_size);
   3796         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3797     }
   3798 }
   3799 
   3800 #endif
   3801 #ifdef VK_KHR_external_semaphore_fd
   3802 void deepcopy_VkImportSemaphoreFdInfoKHR(
   3803     Pool* pool,
   3804     const VkImportSemaphoreFdInfoKHR* from,
   3805     VkImportSemaphoreFdInfoKHR* to)
   3806 {
   3807     (void)pool;
   3808     *to = *from;
   3809     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3810     to->pNext = nullptr;
   3811     if (pNext_size)
   3812     {
   3813         to->pNext = (const void*)pool->alloc(pNext_size);
   3814         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3815     }
   3816 }
   3817 
   3818 void deepcopy_VkSemaphoreGetFdInfoKHR(
   3819     Pool* pool,
   3820     const VkSemaphoreGetFdInfoKHR* from,
   3821     VkSemaphoreGetFdInfoKHR* to)
   3822 {
   3823     (void)pool;
   3824     *to = *from;
   3825     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3826     to->pNext = nullptr;
   3827     if (pNext_size)
   3828     {
   3829         to->pNext = (const void*)pool->alloc(pNext_size);
   3830         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3831     }
   3832 }
   3833 
   3834 #endif
   3835 #ifdef VK_KHR_push_descriptor
   3836 void deepcopy_VkPhysicalDevicePushDescriptorPropertiesKHR(
   3837     Pool* pool,
   3838     const VkPhysicalDevicePushDescriptorPropertiesKHR* from,
   3839     VkPhysicalDevicePushDescriptorPropertiesKHR* to)
   3840 {
   3841     (void)pool;
   3842     *to = *from;
   3843     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3844     to->pNext = nullptr;
   3845     if (pNext_size)
   3846     {
   3847         to->pNext = (void*)pool->alloc(pNext_size);
   3848         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3849     }
   3850 }
   3851 
   3852 #endif
   3853 #ifdef VK_KHR_16bit_storage
   3854 #endif
   3855 #ifdef VK_KHR_incremental_present
   3856 void deepcopy_VkRectLayerKHR(
   3857     Pool* pool,
   3858     const VkRectLayerKHR* from,
   3859     VkRectLayerKHR* to)
   3860 {
   3861     (void)pool;
   3862     *to = *from;
   3863     deepcopy_VkOffset2D(pool, &from->offset, (VkOffset2D*)(&to->offset));
   3864     deepcopy_VkExtent2D(pool, &from->extent, (VkExtent2D*)(&to->extent));
   3865 }
   3866 
   3867 void deepcopy_VkPresentRegionKHR(
   3868     Pool* pool,
   3869     const VkPresentRegionKHR* from,
   3870     VkPresentRegionKHR* to)
   3871 {
   3872     (void)pool;
   3873     *to = *from;
   3874     to->pRectangles = nullptr;
   3875     if (from->pRectangles)
   3876     {
   3877         to->pRectangles = (VkRectLayerKHR*)pool->alloc(from->rectangleCount * sizeof(const VkRectLayerKHR));
   3878         to->rectangleCount = from->rectangleCount;
   3879         for (uint32_t i = 0; i < (uint32_t)from->rectangleCount; ++i)
   3880         {
   3881             deepcopy_VkRectLayerKHR(pool, from->pRectangles + i, (VkRectLayerKHR*)(to->pRectangles + i));
   3882         }
   3883     }
   3884 }
   3885 
   3886 void deepcopy_VkPresentRegionsKHR(
   3887     Pool* pool,
   3888     const VkPresentRegionsKHR* from,
   3889     VkPresentRegionsKHR* to)
   3890 {
   3891     (void)pool;
   3892     *to = *from;
   3893     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3894     to->pNext = nullptr;
   3895     if (pNext_size)
   3896     {
   3897         to->pNext = (const void*)pool->alloc(pNext_size);
   3898         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3899     }
   3900     to->pRegions = nullptr;
   3901     if (from->pRegions)
   3902     {
   3903         to->pRegions = (VkPresentRegionKHR*)pool->alloc(from->swapchainCount * sizeof(const VkPresentRegionKHR));
   3904         to->swapchainCount = from->swapchainCount;
   3905         for (uint32_t i = 0; i < (uint32_t)from->swapchainCount; ++i)
   3906         {
   3907             deepcopy_VkPresentRegionKHR(pool, from->pRegions + i, (VkPresentRegionKHR*)(to->pRegions + i));
   3908         }
   3909     }
   3910 }
   3911 
   3912 #endif
   3913 #ifdef VK_KHR_descriptor_update_template
   3914 #endif
   3915 #ifdef VK_KHR_create_renderpass2
   3916 void deepcopy_VkAttachmentDescription2KHR(
   3917     Pool* pool,
   3918     const VkAttachmentDescription2KHR* from,
   3919     VkAttachmentDescription2KHR* to)
   3920 {
   3921     (void)pool;
   3922     *to = *from;
   3923     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3924     to->pNext = nullptr;
   3925     if (pNext_size)
   3926     {
   3927         to->pNext = (const void*)pool->alloc(pNext_size);
   3928         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3929     }
   3930 }
   3931 
   3932 void deepcopy_VkAttachmentReference2KHR(
   3933     Pool* pool,
   3934     const VkAttachmentReference2KHR* from,
   3935     VkAttachmentReference2KHR* to)
   3936 {
   3937     (void)pool;
   3938     *to = *from;
   3939     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3940     to->pNext = nullptr;
   3941     if (pNext_size)
   3942     {
   3943         to->pNext = (const void*)pool->alloc(pNext_size);
   3944         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3945     }
   3946 }
   3947 
   3948 void deepcopy_VkSubpassDescription2KHR(
   3949     Pool* pool,
   3950     const VkSubpassDescription2KHR* from,
   3951     VkSubpassDescription2KHR* to)
   3952 {
   3953     (void)pool;
   3954     *to = *from;
   3955     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   3956     to->pNext = nullptr;
   3957     if (pNext_size)
   3958     {
   3959         to->pNext = (const void*)pool->alloc(pNext_size);
   3960         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   3961     }
   3962     to->pInputAttachments = nullptr;
   3963     if (from->pInputAttachments)
   3964     {
   3965         to->pInputAttachments = (VkAttachmentReference2KHR*)pool->alloc(from->inputAttachmentCount * sizeof(const VkAttachmentReference2KHR));
   3966         to->inputAttachmentCount = from->inputAttachmentCount;
   3967         for (uint32_t i = 0; i < (uint32_t)from->inputAttachmentCount; ++i)
   3968         {
   3969             deepcopy_VkAttachmentReference2KHR(pool, from->pInputAttachments + i, (VkAttachmentReference2KHR*)(to->pInputAttachments + i));
   3970         }
   3971     }
   3972     to->pColorAttachments = nullptr;
   3973     if (from->pColorAttachments)
   3974     {
   3975         to->pColorAttachments = (VkAttachmentReference2KHR*)pool->alloc(from->colorAttachmentCount * sizeof(const VkAttachmentReference2KHR));
   3976         to->colorAttachmentCount = from->colorAttachmentCount;
   3977         for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
   3978         {
   3979             deepcopy_VkAttachmentReference2KHR(pool, from->pColorAttachments + i, (VkAttachmentReference2KHR*)(to->pColorAttachments + i));
   3980         }
   3981     }
   3982     to->pResolveAttachments = nullptr;
   3983     if (from->pResolveAttachments)
   3984     {
   3985         to->pResolveAttachments = (VkAttachmentReference2KHR*)pool->alloc(from->colorAttachmentCount * sizeof(const VkAttachmentReference2KHR));
   3986         to->colorAttachmentCount = from->colorAttachmentCount;
   3987         for (uint32_t i = 0; i < (uint32_t)from->colorAttachmentCount; ++i)
   3988         {
   3989             deepcopy_VkAttachmentReference2KHR(pool, from->pResolveAttachments + i, (VkAttachmentReference2KHR*)(to->pResolveAttachments + i));
   3990         }
   3991     }
   3992     to->pDepthStencilAttachment = nullptr;
   3993     if (from->pDepthStencilAttachment)
   3994     {
   3995         to->pDepthStencilAttachment = (VkAttachmentReference2KHR*)pool->alloc(sizeof(const VkAttachmentReference2KHR));
   3996         deepcopy_VkAttachmentReference2KHR(pool, from->pDepthStencilAttachment, (VkAttachmentReference2KHR*)(to->pDepthStencilAttachment));
   3997     }
   3998     to->pPreserveAttachments = nullptr;
   3999     if (from->pPreserveAttachments)
   4000     {
   4001         to->pPreserveAttachments = (uint32_t*)pool->dupArray(from->pPreserveAttachments, from->preserveAttachmentCount * sizeof(const uint32_t));
   4002     }
   4003 }
   4004 
   4005 void deepcopy_VkSubpassDependency2KHR(
   4006     Pool* pool,
   4007     const VkSubpassDependency2KHR* from,
   4008     VkSubpassDependency2KHR* to)
   4009 {
   4010     (void)pool;
   4011     *to = *from;
   4012     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4013     to->pNext = nullptr;
   4014     if (pNext_size)
   4015     {
   4016         to->pNext = (const void*)pool->alloc(pNext_size);
   4017         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4018     }
   4019 }
   4020 
   4021 void deepcopy_VkRenderPassCreateInfo2KHR(
   4022     Pool* pool,
   4023     const VkRenderPassCreateInfo2KHR* from,
   4024     VkRenderPassCreateInfo2KHR* to)
   4025 {
   4026     (void)pool;
   4027     *to = *from;
   4028     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4029     to->pNext = nullptr;
   4030     if (pNext_size)
   4031     {
   4032         to->pNext = (const void*)pool->alloc(pNext_size);
   4033         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4034     }
   4035     to->pAttachments = nullptr;
   4036     if (from->pAttachments)
   4037     {
   4038         to->pAttachments = (VkAttachmentDescription2KHR*)pool->alloc(from->attachmentCount * sizeof(const VkAttachmentDescription2KHR));
   4039         to->attachmentCount = from->attachmentCount;
   4040         for (uint32_t i = 0; i < (uint32_t)from->attachmentCount; ++i)
   4041         {
   4042             deepcopy_VkAttachmentDescription2KHR(pool, from->pAttachments + i, (VkAttachmentDescription2KHR*)(to->pAttachments + i));
   4043         }
   4044     }
   4045     to->pSubpasses = nullptr;
   4046     if (from->pSubpasses)
   4047     {
   4048         to->pSubpasses = (VkSubpassDescription2KHR*)pool->alloc(from->subpassCount * sizeof(const VkSubpassDescription2KHR));
   4049         to->subpassCount = from->subpassCount;
   4050         for (uint32_t i = 0; i < (uint32_t)from->subpassCount; ++i)
   4051         {
   4052             deepcopy_VkSubpassDescription2KHR(pool, from->pSubpasses + i, (VkSubpassDescription2KHR*)(to->pSubpasses + i));
   4053         }
   4054     }
   4055     to->pDependencies = nullptr;
   4056     if (from->pDependencies)
   4057     {
   4058         to->pDependencies = (VkSubpassDependency2KHR*)pool->alloc(from->dependencyCount * sizeof(const VkSubpassDependency2KHR));
   4059         to->dependencyCount = from->dependencyCount;
   4060         for (uint32_t i = 0; i < (uint32_t)from->dependencyCount; ++i)
   4061         {
   4062             deepcopy_VkSubpassDependency2KHR(pool, from->pDependencies + i, (VkSubpassDependency2KHR*)(to->pDependencies + i));
   4063         }
   4064     }
   4065     to->pCorrelatedViewMasks = nullptr;
   4066     if (from->pCorrelatedViewMasks)
   4067     {
   4068         to->pCorrelatedViewMasks = (uint32_t*)pool->dupArray(from->pCorrelatedViewMasks, from->correlatedViewMaskCount * sizeof(const uint32_t));
   4069     }
   4070 }
   4071 
   4072 void deepcopy_VkSubpassBeginInfoKHR(
   4073     Pool* pool,
   4074     const VkSubpassBeginInfoKHR* from,
   4075     VkSubpassBeginInfoKHR* to)
   4076 {
   4077     (void)pool;
   4078     *to = *from;
   4079     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4080     to->pNext = nullptr;
   4081     if (pNext_size)
   4082     {
   4083         to->pNext = (const void*)pool->alloc(pNext_size);
   4084         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4085     }
   4086 }
   4087 
   4088 void deepcopy_VkSubpassEndInfoKHR(
   4089     Pool* pool,
   4090     const VkSubpassEndInfoKHR* from,
   4091     VkSubpassEndInfoKHR* to)
   4092 {
   4093     (void)pool;
   4094     *to = *from;
   4095     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4096     to->pNext = nullptr;
   4097     if (pNext_size)
   4098     {
   4099         to->pNext = (const void*)pool->alloc(pNext_size);
   4100         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4101     }
   4102 }
   4103 
   4104 #endif
   4105 #ifdef VK_KHR_shared_presentable_image
   4106 void deepcopy_VkSharedPresentSurfaceCapabilitiesKHR(
   4107     Pool* pool,
   4108     const VkSharedPresentSurfaceCapabilitiesKHR* from,
   4109     VkSharedPresentSurfaceCapabilitiesKHR* to)
   4110 {
   4111     (void)pool;
   4112     *to = *from;
   4113     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4114     to->pNext = nullptr;
   4115     if (pNext_size)
   4116     {
   4117         to->pNext = (void*)pool->alloc(pNext_size);
   4118         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4119     }
   4120 }
   4121 
   4122 #endif
   4123 #ifdef VK_KHR_external_fence_capabilities
   4124 #endif
   4125 #ifdef VK_KHR_external_fence
   4126 #endif
   4127 #ifdef VK_KHR_external_fence_win32
   4128 void deepcopy_VkImportFenceWin32HandleInfoKHR(
   4129     Pool* pool,
   4130     const VkImportFenceWin32HandleInfoKHR* from,
   4131     VkImportFenceWin32HandleInfoKHR* to)
   4132 {
   4133     (void)pool;
   4134     *to = *from;
   4135     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4136     to->pNext = nullptr;
   4137     if (pNext_size)
   4138     {
   4139         to->pNext = (const void*)pool->alloc(pNext_size);
   4140         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4141     }
   4142 }
   4143 
   4144 void deepcopy_VkExportFenceWin32HandleInfoKHR(
   4145     Pool* pool,
   4146     const VkExportFenceWin32HandleInfoKHR* from,
   4147     VkExportFenceWin32HandleInfoKHR* to)
   4148 {
   4149     (void)pool;
   4150     *to = *from;
   4151     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4152     to->pNext = nullptr;
   4153     if (pNext_size)
   4154     {
   4155         to->pNext = (const void*)pool->alloc(pNext_size);
   4156         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4157     }
   4158     to->pAttributes = nullptr;
   4159     if (from->pAttributes)
   4160     {
   4161         to->pAttributes = (SECURITY_ATTRIBUTES*)pool->dupArray(from->pAttributes, sizeof(const SECURITY_ATTRIBUTES));
   4162     }
   4163 }
   4164 
   4165 void deepcopy_VkFenceGetWin32HandleInfoKHR(
   4166     Pool* pool,
   4167     const VkFenceGetWin32HandleInfoKHR* from,
   4168     VkFenceGetWin32HandleInfoKHR* to)
   4169 {
   4170     (void)pool;
   4171     *to = *from;
   4172     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4173     to->pNext = nullptr;
   4174     if (pNext_size)
   4175     {
   4176         to->pNext = (const void*)pool->alloc(pNext_size);
   4177         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4178     }
   4179 }
   4180 
   4181 #endif
   4182 #ifdef VK_KHR_external_fence_fd
   4183 void deepcopy_VkImportFenceFdInfoKHR(
   4184     Pool* pool,
   4185     const VkImportFenceFdInfoKHR* from,
   4186     VkImportFenceFdInfoKHR* to)
   4187 {
   4188     (void)pool;
   4189     *to = *from;
   4190     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4191     to->pNext = nullptr;
   4192     if (pNext_size)
   4193     {
   4194         to->pNext = (const void*)pool->alloc(pNext_size);
   4195         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4196     }
   4197 }
   4198 
   4199 void deepcopy_VkFenceGetFdInfoKHR(
   4200     Pool* pool,
   4201     const VkFenceGetFdInfoKHR* from,
   4202     VkFenceGetFdInfoKHR* to)
   4203 {
   4204     (void)pool;
   4205     *to = *from;
   4206     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4207     to->pNext = nullptr;
   4208     if (pNext_size)
   4209     {
   4210         to->pNext = (const void*)pool->alloc(pNext_size);
   4211         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4212     }
   4213 }
   4214 
   4215 #endif
   4216 #ifdef VK_KHR_maintenance2
   4217 #endif
   4218 #ifdef VK_KHR_get_surface_capabilities2
   4219 void deepcopy_VkPhysicalDeviceSurfaceInfo2KHR(
   4220     Pool* pool,
   4221     const VkPhysicalDeviceSurfaceInfo2KHR* from,
   4222     VkPhysicalDeviceSurfaceInfo2KHR* to)
   4223 {
   4224     (void)pool;
   4225     *to = *from;
   4226     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4227     to->pNext = nullptr;
   4228     if (pNext_size)
   4229     {
   4230         to->pNext = (const void*)pool->alloc(pNext_size);
   4231         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4232     }
   4233 }
   4234 
   4235 void deepcopy_VkSurfaceCapabilities2KHR(
   4236     Pool* pool,
   4237     const VkSurfaceCapabilities2KHR* from,
   4238     VkSurfaceCapabilities2KHR* to)
   4239 {
   4240     (void)pool;
   4241     *to = *from;
   4242     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4243     to->pNext = nullptr;
   4244     if (pNext_size)
   4245     {
   4246         to->pNext = (void*)pool->alloc(pNext_size);
   4247         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4248     }
   4249     deepcopy_VkSurfaceCapabilitiesKHR(pool, &from->surfaceCapabilities, (VkSurfaceCapabilitiesKHR*)(&to->surfaceCapabilities));
   4250 }
   4251 
   4252 void deepcopy_VkSurfaceFormat2KHR(
   4253     Pool* pool,
   4254     const VkSurfaceFormat2KHR* from,
   4255     VkSurfaceFormat2KHR* to)
   4256 {
   4257     (void)pool;
   4258     *to = *from;
   4259     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4260     to->pNext = nullptr;
   4261     if (pNext_size)
   4262     {
   4263         to->pNext = (void*)pool->alloc(pNext_size);
   4264         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4265     }
   4266     deepcopy_VkSurfaceFormatKHR(pool, &from->surfaceFormat, (VkSurfaceFormatKHR*)(&to->surfaceFormat));
   4267 }
   4268 
   4269 #endif
   4270 #ifdef VK_KHR_variable_pointers
   4271 #endif
   4272 #ifdef VK_KHR_get_display_properties2
   4273 void deepcopy_VkDisplayProperties2KHR(
   4274     Pool* pool,
   4275     const VkDisplayProperties2KHR* from,
   4276     VkDisplayProperties2KHR* to)
   4277 {
   4278     (void)pool;
   4279     *to = *from;
   4280     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4281     to->pNext = nullptr;
   4282     if (pNext_size)
   4283     {
   4284         to->pNext = (void*)pool->alloc(pNext_size);
   4285         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4286     }
   4287     deepcopy_VkDisplayPropertiesKHR(pool, &from->displayProperties, (VkDisplayPropertiesKHR*)(&to->displayProperties));
   4288 }
   4289 
   4290 void deepcopy_VkDisplayPlaneProperties2KHR(
   4291     Pool* pool,
   4292     const VkDisplayPlaneProperties2KHR* from,
   4293     VkDisplayPlaneProperties2KHR* to)
   4294 {
   4295     (void)pool;
   4296     *to = *from;
   4297     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4298     to->pNext = nullptr;
   4299     if (pNext_size)
   4300     {
   4301         to->pNext = (void*)pool->alloc(pNext_size);
   4302         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4303     }
   4304     deepcopy_VkDisplayPlanePropertiesKHR(pool, &from->displayPlaneProperties, (VkDisplayPlanePropertiesKHR*)(&to->displayPlaneProperties));
   4305 }
   4306 
   4307 void deepcopy_VkDisplayModeProperties2KHR(
   4308     Pool* pool,
   4309     const VkDisplayModeProperties2KHR* from,
   4310     VkDisplayModeProperties2KHR* to)
   4311 {
   4312     (void)pool;
   4313     *to = *from;
   4314     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4315     to->pNext = nullptr;
   4316     if (pNext_size)
   4317     {
   4318         to->pNext = (void*)pool->alloc(pNext_size);
   4319         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4320     }
   4321     deepcopy_VkDisplayModePropertiesKHR(pool, &from->displayModeProperties, (VkDisplayModePropertiesKHR*)(&to->displayModeProperties));
   4322 }
   4323 
   4324 void deepcopy_VkDisplayPlaneInfo2KHR(
   4325     Pool* pool,
   4326     const VkDisplayPlaneInfo2KHR* from,
   4327     VkDisplayPlaneInfo2KHR* to)
   4328 {
   4329     (void)pool;
   4330     *to = *from;
   4331     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4332     to->pNext = nullptr;
   4333     if (pNext_size)
   4334     {
   4335         to->pNext = (const void*)pool->alloc(pNext_size);
   4336         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4337     }
   4338 }
   4339 
   4340 void deepcopy_VkDisplayPlaneCapabilities2KHR(
   4341     Pool* pool,
   4342     const VkDisplayPlaneCapabilities2KHR* from,
   4343     VkDisplayPlaneCapabilities2KHR* to)
   4344 {
   4345     (void)pool;
   4346     *to = *from;
   4347     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4348     to->pNext = nullptr;
   4349     if (pNext_size)
   4350     {
   4351         to->pNext = (void*)pool->alloc(pNext_size);
   4352         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4353     }
   4354     deepcopy_VkDisplayPlaneCapabilitiesKHR(pool, &from->capabilities, (VkDisplayPlaneCapabilitiesKHR*)(&to->capabilities));
   4355 }
   4356 
   4357 #endif
   4358 #ifdef VK_KHR_dedicated_allocation
   4359 #endif
   4360 #ifdef VK_KHR_storage_buffer_storage_class
   4361 #endif
   4362 #ifdef VK_KHR_relaxed_block_layout
   4363 #endif
   4364 #ifdef VK_KHR_get_memory_requirements2
   4365 #endif
   4366 #ifdef VK_KHR_image_format_list
   4367 void deepcopy_VkImageFormatListCreateInfoKHR(
   4368     Pool* pool,
   4369     const VkImageFormatListCreateInfoKHR* from,
   4370     VkImageFormatListCreateInfoKHR* to)
   4371 {
   4372     (void)pool;
   4373     *to = *from;
   4374     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4375     to->pNext = nullptr;
   4376     if (pNext_size)
   4377     {
   4378         to->pNext = (const void*)pool->alloc(pNext_size);
   4379         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4380     }
   4381     to->pViewFormats = nullptr;
   4382     if (from->pViewFormats)
   4383     {
   4384         to->pViewFormats = (VkFormat*)pool->dupArray(from->pViewFormats, from->viewFormatCount * sizeof(const VkFormat));
   4385     }
   4386 }
   4387 
   4388 #endif
   4389 #ifdef VK_KHR_sampler_ycbcr_conversion
   4390 #endif
   4391 #ifdef VK_KHR_bind_memory2
   4392 #endif
   4393 #ifdef VK_KHR_maintenance3
   4394 #endif
   4395 #ifdef VK_KHR_draw_indirect_count
   4396 #endif
   4397 #ifdef VK_KHR_8bit_storage
   4398 void deepcopy_VkPhysicalDevice8BitStorageFeaturesKHR(
   4399     Pool* pool,
   4400     const VkPhysicalDevice8BitStorageFeaturesKHR* from,
   4401     VkPhysicalDevice8BitStorageFeaturesKHR* to)
   4402 {
   4403     (void)pool;
   4404     *to = *from;
   4405     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4406     to->pNext = nullptr;
   4407     if (pNext_size)
   4408     {
   4409         to->pNext = (void*)pool->alloc(pNext_size);
   4410         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4411     }
   4412 }
   4413 
   4414 #endif
   4415 #ifdef VK_ANDROID_native_buffer
   4416 void deepcopy_VkNativeBufferANDROID(
   4417     Pool* pool,
   4418     const VkNativeBufferANDROID* from,
   4419     VkNativeBufferANDROID* to)
   4420 {
   4421     (void)pool;
   4422     *to = *from;
   4423     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4424     to->pNext = nullptr;
   4425     if (pNext_size)
   4426     {
   4427         to->pNext = (const void*)pool->alloc(pNext_size);
   4428         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4429     }
   4430     to->handle = nullptr;
   4431     if (from->handle)
   4432     {
   4433         to->handle = (uint32_t*)pool->dupArray(from->handle, sizeof(const uint32_t));
   4434     }
   4435 }
   4436 
   4437 #endif
   4438 #ifdef VK_EXT_debug_report
   4439 void deepcopy_VkDebugReportCallbackCreateInfoEXT(
   4440     Pool* pool,
   4441     const VkDebugReportCallbackCreateInfoEXT* from,
   4442     VkDebugReportCallbackCreateInfoEXT* to)
   4443 {
   4444     (void)pool;
   4445     *to = *from;
   4446     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4447     to->pNext = nullptr;
   4448     if (pNext_size)
   4449     {
   4450         to->pNext = (const void*)pool->alloc(pNext_size);
   4451         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4452     }
   4453     to->pUserData = nullptr;
   4454     if (from->pUserData)
   4455     {
   4456         to->pUserData = (void*)pool->dupArray(from->pUserData, sizeof(uint8_t));
   4457     }
   4458 }
   4459 
   4460 #endif
   4461 #ifdef VK_NV_glsl_shader
   4462 #endif
   4463 #ifdef VK_EXT_depth_range_unrestricted
   4464 #endif
   4465 #ifdef VK_IMG_filter_cubic
   4466 #endif
   4467 #ifdef VK_AMD_rasterization_order
   4468 void deepcopy_VkPipelineRasterizationStateRasterizationOrderAMD(
   4469     Pool* pool,
   4470     const VkPipelineRasterizationStateRasterizationOrderAMD* from,
   4471     VkPipelineRasterizationStateRasterizationOrderAMD* to)
   4472 {
   4473     (void)pool;
   4474     *to = *from;
   4475     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4476     to->pNext = nullptr;
   4477     if (pNext_size)
   4478     {
   4479         to->pNext = (const void*)pool->alloc(pNext_size);
   4480         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4481     }
   4482 }
   4483 
   4484 #endif
   4485 #ifdef VK_AMD_shader_trinary_minmax
   4486 #endif
   4487 #ifdef VK_AMD_shader_explicit_vertex_parameter
   4488 #endif
   4489 #ifdef VK_EXT_debug_marker
   4490 void deepcopy_VkDebugMarkerObjectNameInfoEXT(
   4491     Pool* pool,
   4492     const VkDebugMarkerObjectNameInfoEXT* from,
   4493     VkDebugMarkerObjectNameInfoEXT* to)
   4494 {
   4495     (void)pool;
   4496     *to = *from;
   4497     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4498     to->pNext = nullptr;
   4499     if (pNext_size)
   4500     {
   4501         to->pNext = (const void*)pool->alloc(pNext_size);
   4502         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4503     }
   4504     to->pObjectName = nullptr;
   4505     if (from->pObjectName)
   4506     {
   4507         to->pObjectName = pool->strDup(from->pObjectName);
   4508     }
   4509 }
   4510 
   4511 void deepcopy_VkDebugMarkerObjectTagInfoEXT(
   4512     Pool* pool,
   4513     const VkDebugMarkerObjectTagInfoEXT* from,
   4514     VkDebugMarkerObjectTagInfoEXT* to)
   4515 {
   4516     (void)pool;
   4517     *to = *from;
   4518     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4519     to->pNext = nullptr;
   4520     if (pNext_size)
   4521     {
   4522         to->pNext = (const void*)pool->alloc(pNext_size);
   4523         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4524     }
   4525     to->pTag = nullptr;
   4526     if (from->pTag)
   4527     {
   4528         to->pTag = (void*)pool->dupArray(from->pTag, from->tagSize * sizeof(const uint8_t));
   4529     }
   4530 }
   4531 
   4532 void deepcopy_VkDebugMarkerMarkerInfoEXT(
   4533     Pool* pool,
   4534     const VkDebugMarkerMarkerInfoEXT* from,
   4535     VkDebugMarkerMarkerInfoEXT* to)
   4536 {
   4537     (void)pool;
   4538     *to = *from;
   4539     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4540     to->pNext = nullptr;
   4541     if (pNext_size)
   4542     {
   4543         to->pNext = (const void*)pool->alloc(pNext_size);
   4544         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4545     }
   4546     to->pMarkerName = nullptr;
   4547     if (from->pMarkerName)
   4548     {
   4549         to->pMarkerName = pool->strDup(from->pMarkerName);
   4550     }
   4551     memcpy(to->color, from->color, 4 * sizeof(float));
   4552 }
   4553 
   4554 #endif
   4555 #ifdef VK_AMD_gcn_shader
   4556 #endif
   4557 #ifdef VK_NV_dedicated_allocation
   4558 void deepcopy_VkDedicatedAllocationImageCreateInfoNV(
   4559     Pool* pool,
   4560     const VkDedicatedAllocationImageCreateInfoNV* from,
   4561     VkDedicatedAllocationImageCreateInfoNV* to)
   4562 {
   4563     (void)pool;
   4564     *to = *from;
   4565     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4566     to->pNext = nullptr;
   4567     if (pNext_size)
   4568     {
   4569         to->pNext = (const void*)pool->alloc(pNext_size);
   4570         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4571     }
   4572 }
   4573 
   4574 void deepcopy_VkDedicatedAllocationBufferCreateInfoNV(
   4575     Pool* pool,
   4576     const VkDedicatedAllocationBufferCreateInfoNV* from,
   4577     VkDedicatedAllocationBufferCreateInfoNV* to)
   4578 {
   4579     (void)pool;
   4580     *to = *from;
   4581     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4582     to->pNext = nullptr;
   4583     if (pNext_size)
   4584     {
   4585         to->pNext = (const void*)pool->alloc(pNext_size);
   4586         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4587     }
   4588 }
   4589 
   4590 void deepcopy_VkDedicatedAllocationMemoryAllocateInfoNV(
   4591     Pool* pool,
   4592     const VkDedicatedAllocationMemoryAllocateInfoNV* from,
   4593     VkDedicatedAllocationMemoryAllocateInfoNV* to)
   4594 {
   4595     (void)pool;
   4596     *to = *from;
   4597     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4598     to->pNext = nullptr;
   4599     if (pNext_size)
   4600     {
   4601         to->pNext = (const void*)pool->alloc(pNext_size);
   4602         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4603     }
   4604 }
   4605 
   4606 #endif
   4607 #ifdef VK_AMD_draw_indirect_count
   4608 #endif
   4609 #ifdef VK_AMD_negative_viewport_height
   4610 #endif
   4611 #ifdef VK_AMD_gpu_shader_half_float
   4612 #endif
   4613 #ifdef VK_AMD_shader_ballot
   4614 #endif
   4615 #ifdef VK_AMD_texture_gather_bias_lod
   4616 void deepcopy_VkTextureLODGatherFormatPropertiesAMD(
   4617     Pool* pool,
   4618     const VkTextureLODGatherFormatPropertiesAMD* from,
   4619     VkTextureLODGatherFormatPropertiesAMD* to)
   4620 {
   4621     (void)pool;
   4622     *to = *from;
   4623     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4624     to->pNext = nullptr;
   4625     if (pNext_size)
   4626     {
   4627         to->pNext = (void*)pool->alloc(pNext_size);
   4628         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4629     }
   4630 }
   4631 
   4632 #endif
   4633 #ifdef VK_AMD_shader_info
   4634 void deepcopy_VkShaderResourceUsageAMD(
   4635     Pool* pool,
   4636     const VkShaderResourceUsageAMD* from,
   4637     VkShaderResourceUsageAMD* to)
   4638 {
   4639     (void)pool;
   4640     *to = *from;
   4641 }
   4642 
   4643 void deepcopy_VkShaderStatisticsInfoAMD(
   4644     Pool* pool,
   4645     const VkShaderStatisticsInfoAMD* from,
   4646     VkShaderStatisticsInfoAMD* to)
   4647 {
   4648     (void)pool;
   4649     *to = *from;
   4650     deepcopy_VkShaderResourceUsageAMD(pool, &from->resourceUsage, (VkShaderResourceUsageAMD*)(&to->resourceUsage));
   4651     memcpy(to->computeWorkGroupSize, from->computeWorkGroupSize, 3 * sizeof(uint32_t));
   4652 }
   4653 
   4654 #endif
   4655 #ifdef VK_AMD_shader_image_load_store_lod
   4656 #endif
   4657 #ifdef VK_IMG_format_pvrtc
   4658 #endif
   4659 #ifdef VK_NV_external_memory_capabilities
   4660 void deepcopy_VkExternalImageFormatPropertiesNV(
   4661     Pool* pool,
   4662     const VkExternalImageFormatPropertiesNV* from,
   4663     VkExternalImageFormatPropertiesNV* to)
   4664 {
   4665     (void)pool;
   4666     *to = *from;
   4667     deepcopy_VkImageFormatProperties(pool, &from->imageFormatProperties, (VkImageFormatProperties*)(&to->imageFormatProperties));
   4668 }
   4669 
   4670 #endif
   4671 #ifdef VK_NV_external_memory
   4672 void deepcopy_VkExternalMemoryImageCreateInfoNV(
   4673     Pool* pool,
   4674     const VkExternalMemoryImageCreateInfoNV* from,
   4675     VkExternalMemoryImageCreateInfoNV* to)
   4676 {
   4677     (void)pool;
   4678     *to = *from;
   4679     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4680     to->pNext = nullptr;
   4681     if (pNext_size)
   4682     {
   4683         to->pNext = (const void*)pool->alloc(pNext_size);
   4684         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4685     }
   4686 }
   4687 
   4688 void deepcopy_VkExportMemoryAllocateInfoNV(
   4689     Pool* pool,
   4690     const VkExportMemoryAllocateInfoNV* from,
   4691     VkExportMemoryAllocateInfoNV* to)
   4692 {
   4693     (void)pool;
   4694     *to = *from;
   4695     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4696     to->pNext = nullptr;
   4697     if (pNext_size)
   4698     {
   4699         to->pNext = (const void*)pool->alloc(pNext_size);
   4700         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4701     }
   4702 }
   4703 
   4704 #endif
   4705 #ifdef VK_NV_external_memory_win32
   4706 void deepcopy_VkImportMemoryWin32HandleInfoNV(
   4707     Pool* pool,
   4708     const VkImportMemoryWin32HandleInfoNV* from,
   4709     VkImportMemoryWin32HandleInfoNV* to)
   4710 {
   4711     (void)pool;
   4712     *to = *from;
   4713     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4714     to->pNext = nullptr;
   4715     if (pNext_size)
   4716     {
   4717         to->pNext = (const void*)pool->alloc(pNext_size);
   4718         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4719     }
   4720 }
   4721 
   4722 void deepcopy_VkExportMemoryWin32HandleInfoNV(
   4723     Pool* pool,
   4724     const VkExportMemoryWin32HandleInfoNV* from,
   4725     VkExportMemoryWin32HandleInfoNV* to)
   4726 {
   4727     (void)pool;
   4728     *to = *from;
   4729     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4730     to->pNext = nullptr;
   4731     if (pNext_size)
   4732     {
   4733         to->pNext = (const void*)pool->alloc(pNext_size);
   4734         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4735     }
   4736     to->pAttributes = nullptr;
   4737     if (from->pAttributes)
   4738     {
   4739         to->pAttributes = (SECURITY_ATTRIBUTES*)pool->dupArray(from->pAttributes, sizeof(const SECURITY_ATTRIBUTES));
   4740     }
   4741 }
   4742 
   4743 #endif
   4744 #ifdef VK_NV_win32_keyed_mutex
   4745 void deepcopy_VkWin32KeyedMutexAcquireReleaseInfoNV(
   4746     Pool* pool,
   4747     const VkWin32KeyedMutexAcquireReleaseInfoNV* from,
   4748     VkWin32KeyedMutexAcquireReleaseInfoNV* to)
   4749 {
   4750     (void)pool;
   4751     *to = *from;
   4752     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4753     to->pNext = nullptr;
   4754     if (pNext_size)
   4755     {
   4756         to->pNext = (const void*)pool->alloc(pNext_size);
   4757         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4758     }
   4759     to->pAcquireSyncs = nullptr;
   4760     if (from->pAcquireSyncs)
   4761     {
   4762         to->pAcquireSyncs = (VkDeviceMemory*)pool->dupArray(from->pAcquireSyncs, from->acquireCount * sizeof(const VkDeviceMemory));
   4763     }
   4764     to->pAcquireKeys = nullptr;
   4765     if (from->pAcquireKeys)
   4766     {
   4767         to->pAcquireKeys = (uint64_t*)pool->dupArray(from->pAcquireKeys, from->acquireCount * sizeof(const uint64_t));
   4768     }
   4769     to->pAcquireTimeoutMilliseconds = nullptr;
   4770     if (from->pAcquireTimeoutMilliseconds)
   4771     {
   4772         to->pAcquireTimeoutMilliseconds = (uint32_t*)pool->dupArray(from->pAcquireTimeoutMilliseconds, from->acquireCount * sizeof(const uint32_t));
   4773     }
   4774     to->pReleaseSyncs = nullptr;
   4775     if (from->pReleaseSyncs)
   4776     {
   4777         to->pReleaseSyncs = (VkDeviceMemory*)pool->dupArray(from->pReleaseSyncs, from->releaseCount * sizeof(const VkDeviceMemory));
   4778     }
   4779     to->pReleaseKeys = nullptr;
   4780     if (from->pReleaseKeys)
   4781     {
   4782         to->pReleaseKeys = (uint64_t*)pool->dupArray(from->pReleaseKeys, from->releaseCount * sizeof(const uint64_t));
   4783     }
   4784 }
   4785 
   4786 #endif
   4787 #ifdef VK_EXT_validation_flags
   4788 void deepcopy_VkValidationFlagsEXT(
   4789     Pool* pool,
   4790     const VkValidationFlagsEXT* from,
   4791     VkValidationFlagsEXT* to)
   4792 {
   4793     (void)pool;
   4794     *to = *from;
   4795     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4796     to->pNext = nullptr;
   4797     if (pNext_size)
   4798     {
   4799         to->pNext = (const void*)pool->alloc(pNext_size);
   4800         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4801     }
   4802     to->pDisabledValidationChecks = nullptr;
   4803     if (from->pDisabledValidationChecks)
   4804     {
   4805         to->pDisabledValidationChecks = (VkValidationCheckEXT*)pool->dupArray(from->pDisabledValidationChecks, from->disabledValidationCheckCount * sizeof(const VkValidationCheckEXT));
   4806     }
   4807 }
   4808 
   4809 #endif
   4810 #ifdef VK_NN_vi_surface
   4811 void deepcopy_VkViSurfaceCreateInfoNN(
   4812     Pool* pool,
   4813     const VkViSurfaceCreateInfoNN* from,
   4814     VkViSurfaceCreateInfoNN* to)
   4815 {
   4816     (void)pool;
   4817     *to = *from;
   4818     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4819     to->pNext = nullptr;
   4820     if (pNext_size)
   4821     {
   4822         to->pNext = (const void*)pool->alloc(pNext_size);
   4823         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4824     }
   4825     to->window = nullptr;
   4826     if (from->window)
   4827     {
   4828         to->window = (void*)pool->dupArray(from->window, sizeof(uint8_t));
   4829     }
   4830 }
   4831 
   4832 #endif
   4833 #ifdef VK_EXT_shader_subgroup_ballot
   4834 #endif
   4835 #ifdef VK_EXT_shader_subgroup_vote
   4836 #endif
   4837 #ifdef VK_EXT_conditional_rendering
   4838 void deepcopy_VkConditionalRenderingBeginInfoEXT(
   4839     Pool* pool,
   4840     const VkConditionalRenderingBeginInfoEXT* from,
   4841     VkConditionalRenderingBeginInfoEXT* to)
   4842 {
   4843     (void)pool;
   4844     *to = *from;
   4845     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4846     to->pNext = nullptr;
   4847     if (pNext_size)
   4848     {
   4849         to->pNext = (const void*)pool->alloc(pNext_size);
   4850         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4851     }
   4852 }
   4853 
   4854 void deepcopy_VkPhysicalDeviceConditionalRenderingFeaturesEXT(
   4855     Pool* pool,
   4856     const VkPhysicalDeviceConditionalRenderingFeaturesEXT* from,
   4857     VkPhysicalDeviceConditionalRenderingFeaturesEXT* to)
   4858 {
   4859     (void)pool;
   4860     *to = *from;
   4861     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4862     to->pNext = nullptr;
   4863     if (pNext_size)
   4864     {
   4865         to->pNext = (void*)pool->alloc(pNext_size);
   4866         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4867     }
   4868 }
   4869 
   4870 void deepcopy_VkCommandBufferInheritanceConditionalRenderingInfoEXT(
   4871     Pool* pool,
   4872     const VkCommandBufferInheritanceConditionalRenderingInfoEXT* from,
   4873     VkCommandBufferInheritanceConditionalRenderingInfoEXT* to)
   4874 {
   4875     (void)pool;
   4876     *to = *from;
   4877     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4878     to->pNext = nullptr;
   4879     if (pNext_size)
   4880     {
   4881         to->pNext = (const void*)pool->alloc(pNext_size);
   4882         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4883     }
   4884 }
   4885 
   4886 #endif
   4887 #ifdef VK_NVX_device_generated_commands
   4888 void deepcopy_VkDeviceGeneratedCommandsFeaturesNVX(
   4889     Pool* pool,
   4890     const VkDeviceGeneratedCommandsFeaturesNVX* from,
   4891     VkDeviceGeneratedCommandsFeaturesNVX* to)
   4892 {
   4893     (void)pool;
   4894     *to = *from;
   4895     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4896     to->pNext = nullptr;
   4897     if (pNext_size)
   4898     {
   4899         to->pNext = (const void*)pool->alloc(pNext_size);
   4900         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4901     }
   4902 }
   4903 
   4904 void deepcopy_VkDeviceGeneratedCommandsLimitsNVX(
   4905     Pool* pool,
   4906     const VkDeviceGeneratedCommandsLimitsNVX* from,
   4907     VkDeviceGeneratedCommandsLimitsNVX* to)
   4908 {
   4909     (void)pool;
   4910     *to = *from;
   4911     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4912     to->pNext = nullptr;
   4913     if (pNext_size)
   4914     {
   4915         to->pNext = (const void*)pool->alloc(pNext_size);
   4916         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4917     }
   4918 }
   4919 
   4920 void deepcopy_VkIndirectCommandsTokenNVX(
   4921     Pool* pool,
   4922     const VkIndirectCommandsTokenNVX* from,
   4923     VkIndirectCommandsTokenNVX* to)
   4924 {
   4925     (void)pool;
   4926     *to = *from;
   4927 }
   4928 
   4929 void deepcopy_VkIndirectCommandsLayoutTokenNVX(
   4930     Pool* pool,
   4931     const VkIndirectCommandsLayoutTokenNVX* from,
   4932     VkIndirectCommandsLayoutTokenNVX* to)
   4933 {
   4934     (void)pool;
   4935     *to = *from;
   4936 }
   4937 
   4938 void deepcopy_VkIndirectCommandsLayoutCreateInfoNVX(
   4939     Pool* pool,
   4940     const VkIndirectCommandsLayoutCreateInfoNVX* from,
   4941     VkIndirectCommandsLayoutCreateInfoNVX* to)
   4942 {
   4943     (void)pool;
   4944     *to = *from;
   4945     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4946     to->pNext = nullptr;
   4947     if (pNext_size)
   4948     {
   4949         to->pNext = (const void*)pool->alloc(pNext_size);
   4950         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4951     }
   4952     to->pTokens = nullptr;
   4953     if (from->pTokens)
   4954     {
   4955         to->pTokens = (VkIndirectCommandsLayoutTokenNVX*)pool->alloc(from->tokenCount * sizeof(const VkIndirectCommandsLayoutTokenNVX));
   4956         to->tokenCount = from->tokenCount;
   4957         for (uint32_t i = 0; i < (uint32_t)from->tokenCount; ++i)
   4958         {
   4959             deepcopy_VkIndirectCommandsLayoutTokenNVX(pool, from->pTokens + i, (VkIndirectCommandsLayoutTokenNVX*)(to->pTokens + i));
   4960         }
   4961     }
   4962 }
   4963 
   4964 void deepcopy_VkCmdProcessCommandsInfoNVX(
   4965     Pool* pool,
   4966     const VkCmdProcessCommandsInfoNVX* from,
   4967     VkCmdProcessCommandsInfoNVX* to)
   4968 {
   4969     (void)pool;
   4970     *to = *from;
   4971     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4972     to->pNext = nullptr;
   4973     if (pNext_size)
   4974     {
   4975         to->pNext = (const void*)pool->alloc(pNext_size);
   4976         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   4977     }
   4978     to->pIndirectCommandsTokens = nullptr;
   4979     if (from->pIndirectCommandsTokens)
   4980     {
   4981         to->pIndirectCommandsTokens = (VkIndirectCommandsTokenNVX*)pool->alloc(from->indirectCommandsTokenCount * sizeof(const VkIndirectCommandsTokenNVX));
   4982         to->indirectCommandsTokenCount = from->indirectCommandsTokenCount;
   4983         for (uint32_t i = 0; i < (uint32_t)from->indirectCommandsTokenCount; ++i)
   4984         {
   4985             deepcopy_VkIndirectCommandsTokenNVX(pool, from->pIndirectCommandsTokens + i, (VkIndirectCommandsTokenNVX*)(to->pIndirectCommandsTokens + i));
   4986         }
   4987     }
   4988 }
   4989 
   4990 void deepcopy_VkCmdReserveSpaceForCommandsInfoNVX(
   4991     Pool* pool,
   4992     const VkCmdReserveSpaceForCommandsInfoNVX* from,
   4993     VkCmdReserveSpaceForCommandsInfoNVX* to)
   4994 {
   4995     (void)pool;
   4996     *to = *from;
   4997     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   4998     to->pNext = nullptr;
   4999     if (pNext_size)
   5000     {
   5001         to->pNext = (const void*)pool->alloc(pNext_size);
   5002         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5003     }
   5004 }
   5005 
   5006 void deepcopy_VkObjectTableCreateInfoNVX(
   5007     Pool* pool,
   5008     const VkObjectTableCreateInfoNVX* from,
   5009     VkObjectTableCreateInfoNVX* to)
   5010 {
   5011     (void)pool;
   5012     *to = *from;
   5013     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5014     to->pNext = nullptr;
   5015     if (pNext_size)
   5016     {
   5017         to->pNext = (const void*)pool->alloc(pNext_size);
   5018         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5019     }
   5020     to->pObjectEntryTypes = nullptr;
   5021     if (from->pObjectEntryTypes)
   5022     {
   5023         to->pObjectEntryTypes = (VkObjectEntryTypeNVX*)pool->dupArray(from->pObjectEntryTypes, from->objectCount * sizeof(const VkObjectEntryTypeNVX));
   5024     }
   5025     to->pObjectEntryCounts = nullptr;
   5026     if (from->pObjectEntryCounts)
   5027     {
   5028         to->pObjectEntryCounts = (uint32_t*)pool->dupArray(from->pObjectEntryCounts, from->objectCount * sizeof(const uint32_t));
   5029     }
   5030     to->pObjectEntryUsageFlags = nullptr;
   5031     if (from->pObjectEntryUsageFlags)
   5032     {
   5033         to->pObjectEntryUsageFlags = (VkObjectEntryUsageFlagsNVX*)pool->dupArray(from->pObjectEntryUsageFlags, from->objectCount * sizeof(const VkObjectEntryUsageFlagsNVX));
   5034     }
   5035 }
   5036 
   5037 void deepcopy_VkObjectTableEntryNVX(
   5038     Pool* pool,
   5039     const VkObjectTableEntryNVX* from,
   5040     VkObjectTableEntryNVX* to)
   5041 {
   5042     (void)pool;
   5043     *to = *from;
   5044 }
   5045 
   5046 void deepcopy_VkObjectTablePipelineEntryNVX(
   5047     Pool* pool,
   5048     const VkObjectTablePipelineEntryNVX* from,
   5049     VkObjectTablePipelineEntryNVX* to)
   5050 {
   5051     (void)pool;
   5052     *to = *from;
   5053 }
   5054 
   5055 void deepcopy_VkObjectTableDescriptorSetEntryNVX(
   5056     Pool* pool,
   5057     const VkObjectTableDescriptorSetEntryNVX* from,
   5058     VkObjectTableDescriptorSetEntryNVX* to)
   5059 {
   5060     (void)pool;
   5061     *to = *from;
   5062 }
   5063 
   5064 void deepcopy_VkObjectTableVertexBufferEntryNVX(
   5065     Pool* pool,
   5066     const VkObjectTableVertexBufferEntryNVX* from,
   5067     VkObjectTableVertexBufferEntryNVX* to)
   5068 {
   5069     (void)pool;
   5070     *to = *from;
   5071 }
   5072 
   5073 void deepcopy_VkObjectTableIndexBufferEntryNVX(
   5074     Pool* pool,
   5075     const VkObjectTableIndexBufferEntryNVX* from,
   5076     VkObjectTableIndexBufferEntryNVX* to)
   5077 {
   5078     (void)pool;
   5079     *to = *from;
   5080 }
   5081 
   5082 void deepcopy_VkObjectTablePushConstantEntryNVX(
   5083     Pool* pool,
   5084     const VkObjectTablePushConstantEntryNVX* from,
   5085     VkObjectTablePushConstantEntryNVX* to)
   5086 {
   5087     (void)pool;
   5088     *to = *from;
   5089 }
   5090 
   5091 #endif
   5092 #ifdef VK_NV_clip_space_w_scaling
   5093 void deepcopy_VkViewportWScalingNV(
   5094     Pool* pool,
   5095     const VkViewportWScalingNV* from,
   5096     VkViewportWScalingNV* to)
   5097 {
   5098     (void)pool;
   5099     *to = *from;
   5100 }
   5101 
   5102 void deepcopy_VkPipelineViewportWScalingStateCreateInfoNV(
   5103     Pool* pool,
   5104     const VkPipelineViewportWScalingStateCreateInfoNV* from,
   5105     VkPipelineViewportWScalingStateCreateInfoNV* to)
   5106 {
   5107     (void)pool;
   5108     *to = *from;
   5109     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5110     to->pNext = nullptr;
   5111     if (pNext_size)
   5112     {
   5113         to->pNext = (const void*)pool->alloc(pNext_size);
   5114         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5115     }
   5116     to->pViewportWScalings = nullptr;
   5117     if (from->pViewportWScalings)
   5118     {
   5119         to->pViewportWScalings = (VkViewportWScalingNV*)pool->alloc(from->viewportCount * sizeof(const VkViewportWScalingNV));
   5120         to->viewportCount = from->viewportCount;
   5121         for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
   5122         {
   5123             deepcopy_VkViewportWScalingNV(pool, from->pViewportWScalings + i, (VkViewportWScalingNV*)(to->pViewportWScalings + i));
   5124         }
   5125     }
   5126 }
   5127 
   5128 #endif
   5129 #ifdef VK_EXT_direct_mode_display
   5130 #endif
   5131 #ifdef VK_EXT_acquire_xlib_display
   5132 #endif
   5133 #ifdef VK_EXT_display_surface_counter
   5134 void deepcopy_VkSurfaceCapabilities2EXT(
   5135     Pool* pool,
   5136     const VkSurfaceCapabilities2EXT* from,
   5137     VkSurfaceCapabilities2EXT* to)
   5138 {
   5139     (void)pool;
   5140     *to = *from;
   5141     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5142     to->pNext = nullptr;
   5143     if (pNext_size)
   5144     {
   5145         to->pNext = (void*)pool->alloc(pNext_size);
   5146         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5147     }
   5148     deepcopy_VkExtent2D(pool, &from->currentExtent, (VkExtent2D*)(&to->currentExtent));
   5149     deepcopy_VkExtent2D(pool, &from->minImageExtent, (VkExtent2D*)(&to->minImageExtent));
   5150     deepcopy_VkExtent2D(pool, &from->maxImageExtent, (VkExtent2D*)(&to->maxImageExtent));
   5151 }
   5152 
   5153 #endif
   5154 #ifdef VK_EXT_display_control
   5155 void deepcopy_VkDisplayPowerInfoEXT(
   5156     Pool* pool,
   5157     const VkDisplayPowerInfoEXT* from,
   5158     VkDisplayPowerInfoEXT* to)
   5159 {
   5160     (void)pool;
   5161     *to = *from;
   5162     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5163     to->pNext = nullptr;
   5164     if (pNext_size)
   5165     {
   5166         to->pNext = (const void*)pool->alloc(pNext_size);
   5167         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5168     }
   5169 }
   5170 
   5171 void deepcopy_VkDeviceEventInfoEXT(
   5172     Pool* pool,
   5173     const VkDeviceEventInfoEXT* from,
   5174     VkDeviceEventInfoEXT* to)
   5175 {
   5176     (void)pool;
   5177     *to = *from;
   5178     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5179     to->pNext = nullptr;
   5180     if (pNext_size)
   5181     {
   5182         to->pNext = (const void*)pool->alloc(pNext_size);
   5183         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5184     }
   5185 }
   5186 
   5187 void deepcopy_VkDisplayEventInfoEXT(
   5188     Pool* pool,
   5189     const VkDisplayEventInfoEXT* from,
   5190     VkDisplayEventInfoEXT* to)
   5191 {
   5192     (void)pool;
   5193     *to = *from;
   5194     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5195     to->pNext = nullptr;
   5196     if (pNext_size)
   5197     {
   5198         to->pNext = (const void*)pool->alloc(pNext_size);
   5199         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5200     }
   5201 }
   5202 
   5203 void deepcopy_VkSwapchainCounterCreateInfoEXT(
   5204     Pool* pool,
   5205     const VkSwapchainCounterCreateInfoEXT* from,
   5206     VkSwapchainCounterCreateInfoEXT* to)
   5207 {
   5208     (void)pool;
   5209     *to = *from;
   5210     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5211     to->pNext = nullptr;
   5212     if (pNext_size)
   5213     {
   5214         to->pNext = (const void*)pool->alloc(pNext_size);
   5215         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5216     }
   5217 }
   5218 
   5219 #endif
   5220 #ifdef VK_GOOGLE_display_timing
   5221 void deepcopy_VkRefreshCycleDurationGOOGLE(
   5222     Pool* pool,
   5223     const VkRefreshCycleDurationGOOGLE* from,
   5224     VkRefreshCycleDurationGOOGLE* to)
   5225 {
   5226     (void)pool;
   5227     *to = *from;
   5228 }
   5229 
   5230 void deepcopy_VkPastPresentationTimingGOOGLE(
   5231     Pool* pool,
   5232     const VkPastPresentationTimingGOOGLE* from,
   5233     VkPastPresentationTimingGOOGLE* to)
   5234 {
   5235     (void)pool;
   5236     *to = *from;
   5237 }
   5238 
   5239 void deepcopy_VkPresentTimeGOOGLE(
   5240     Pool* pool,
   5241     const VkPresentTimeGOOGLE* from,
   5242     VkPresentTimeGOOGLE* to)
   5243 {
   5244     (void)pool;
   5245     *to = *from;
   5246 }
   5247 
   5248 void deepcopy_VkPresentTimesInfoGOOGLE(
   5249     Pool* pool,
   5250     const VkPresentTimesInfoGOOGLE* from,
   5251     VkPresentTimesInfoGOOGLE* to)
   5252 {
   5253     (void)pool;
   5254     *to = *from;
   5255     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5256     to->pNext = nullptr;
   5257     if (pNext_size)
   5258     {
   5259         to->pNext = (const void*)pool->alloc(pNext_size);
   5260         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5261     }
   5262     to->pTimes = nullptr;
   5263     if (from->pTimes)
   5264     {
   5265         to->pTimes = (VkPresentTimeGOOGLE*)pool->alloc(from->swapchainCount * sizeof(const VkPresentTimeGOOGLE));
   5266         to->swapchainCount = from->swapchainCount;
   5267         for (uint32_t i = 0; i < (uint32_t)from->swapchainCount; ++i)
   5268         {
   5269             deepcopy_VkPresentTimeGOOGLE(pool, from->pTimes + i, (VkPresentTimeGOOGLE*)(to->pTimes + i));
   5270         }
   5271     }
   5272 }
   5273 
   5274 #endif
   5275 #ifdef VK_NV_sample_mask_override_coverage
   5276 #endif
   5277 #ifdef VK_NV_geometry_shader_passthrough
   5278 #endif
   5279 #ifdef VK_NV_viewport_array2
   5280 #endif
   5281 #ifdef VK_NVX_multiview_per_view_attributes
   5282 void deepcopy_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(
   5283     Pool* pool,
   5284     const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* from,
   5285     VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX* to)
   5286 {
   5287     (void)pool;
   5288     *to = *from;
   5289     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5290     to->pNext = nullptr;
   5291     if (pNext_size)
   5292     {
   5293         to->pNext = (void*)pool->alloc(pNext_size);
   5294         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5295     }
   5296 }
   5297 
   5298 #endif
   5299 #ifdef VK_NV_viewport_swizzle
   5300 void deepcopy_VkViewportSwizzleNV(
   5301     Pool* pool,
   5302     const VkViewportSwizzleNV* from,
   5303     VkViewportSwizzleNV* to)
   5304 {
   5305     (void)pool;
   5306     *to = *from;
   5307 }
   5308 
   5309 void deepcopy_VkPipelineViewportSwizzleStateCreateInfoNV(
   5310     Pool* pool,
   5311     const VkPipelineViewportSwizzleStateCreateInfoNV* from,
   5312     VkPipelineViewportSwizzleStateCreateInfoNV* to)
   5313 {
   5314     (void)pool;
   5315     *to = *from;
   5316     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5317     to->pNext = nullptr;
   5318     if (pNext_size)
   5319     {
   5320         to->pNext = (const void*)pool->alloc(pNext_size);
   5321         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5322     }
   5323     to->pViewportSwizzles = nullptr;
   5324     if (from->pViewportSwizzles)
   5325     {
   5326         to->pViewportSwizzles = (VkViewportSwizzleNV*)pool->alloc(from->viewportCount * sizeof(const VkViewportSwizzleNV));
   5327         to->viewportCount = from->viewportCount;
   5328         for (uint32_t i = 0; i < (uint32_t)from->viewportCount; ++i)
   5329         {
   5330             deepcopy_VkViewportSwizzleNV(pool, from->pViewportSwizzles + i, (VkViewportSwizzleNV*)(to->pViewportSwizzles + i));
   5331         }
   5332     }
   5333 }
   5334 
   5335 #endif
   5336 #ifdef VK_EXT_discard_rectangles
   5337 void deepcopy_VkPhysicalDeviceDiscardRectanglePropertiesEXT(
   5338     Pool* pool,
   5339     const VkPhysicalDeviceDiscardRectanglePropertiesEXT* from,
   5340     VkPhysicalDeviceDiscardRectanglePropertiesEXT* to)
   5341 {
   5342     (void)pool;
   5343     *to = *from;
   5344     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5345     to->pNext = nullptr;
   5346     if (pNext_size)
   5347     {
   5348         to->pNext = (void*)pool->alloc(pNext_size);
   5349         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5350     }
   5351 }
   5352 
   5353 void deepcopy_VkPipelineDiscardRectangleStateCreateInfoEXT(
   5354     Pool* pool,
   5355     const VkPipelineDiscardRectangleStateCreateInfoEXT* from,
   5356     VkPipelineDiscardRectangleStateCreateInfoEXT* to)
   5357 {
   5358     (void)pool;
   5359     *to = *from;
   5360     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5361     to->pNext = nullptr;
   5362     if (pNext_size)
   5363     {
   5364         to->pNext = (const void*)pool->alloc(pNext_size);
   5365         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5366     }
   5367     to->pDiscardRectangles = nullptr;
   5368     if (from->pDiscardRectangles)
   5369     {
   5370         to->pDiscardRectangles = (VkRect2D*)pool->alloc(from->discardRectangleCount * sizeof(const VkRect2D));
   5371         to->discardRectangleCount = from->discardRectangleCount;
   5372         for (uint32_t i = 0; i < (uint32_t)from->discardRectangleCount; ++i)
   5373         {
   5374             deepcopy_VkRect2D(pool, from->pDiscardRectangles + i, (VkRect2D*)(to->pDiscardRectangles + i));
   5375         }
   5376     }
   5377 }
   5378 
   5379 #endif
   5380 #ifdef VK_EXT_conservative_rasterization
   5381 void deepcopy_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(
   5382     Pool* pool,
   5383     const VkPhysicalDeviceConservativeRasterizationPropertiesEXT* from,
   5384     VkPhysicalDeviceConservativeRasterizationPropertiesEXT* to)
   5385 {
   5386     (void)pool;
   5387     *to = *from;
   5388     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5389     to->pNext = nullptr;
   5390     if (pNext_size)
   5391     {
   5392         to->pNext = (void*)pool->alloc(pNext_size);
   5393         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5394     }
   5395 }
   5396 
   5397 void deepcopy_VkPipelineRasterizationConservativeStateCreateInfoEXT(
   5398     Pool* pool,
   5399     const VkPipelineRasterizationConservativeStateCreateInfoEXT* from,
   5400     VkPipelineRasterizationConservativeStateCreateInfoEXT* to)
   5401 {
   5402     (void)pool;
   5403     *to = *from;
   5404     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5405     to->pNext = nullptr;
   5406     if (pNext_size)
   5407     {
   5408         to->pNext = (const void*)pool->alloc(pNext_size);
   5409         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5410     }
   5411 }
   5412 
   5413 #endif
   5414 #ifdef VK_EXT_swapchain_colorspace
   5415 #endif
   5416 #ifdef VK_EXT_hdr_metadata
   5417 void deepcopy_VkXYColorEXT(
   5418     Pool* pool,
   5419     const VkXYColorEXT* from,
   5420     VkXYColorEXT* to)
   5421 {
   5422     (void)pool;
   5423     *to = *from;
   5424 }
   5425 
   5426 void deepcopy_VkHdrMetadataEXT(
   5427     Pool* pool,
   5428     const VkHdrMetadataEXT* from,
   5429     VkHdrMetadataEXT* to)
   5430 {
   5431     (void)pool;
   5432     *to = *from;
   5433     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5434     to->pNext = nullptr;
   5435     if (pNext_size)
   5436     {
   5437         to->pNext = (const void*)pool->alloc(pNext_size);
   5438         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5439     }
   5440     deepcopy_VkXYColorEXT(pool, &from->displayPrimaryRed, (VkXYColorEXT*)(&to->displayPrimaryRed));
   5441     deepcopy_VkXYColorEXT(pool, &from->displayPrimaryGreen, (VkXYColorEXT*)(&to->displayPrimaryGreen));
   5442     deepcopy_VkXYColorEXT(pool, &from->displayPrimaryBlue, (VkXYColorEXT*)(&to->displayPrimaryBlue));
   5443     deepcopy_VkXYColorEXT(pool, &from->whitePoint, (VkXYColorEXT*)(&to->whitePoint));
   5444 }
   5445 
   5446 #endif
   5447 #ifdef VK_MVK_ios_surface
   5448 void deepcopy_VkIOSSurfaceCreateInfoMVK(
   5449     Pool* pool,
   5450     const VkIOSSurfaceCreateInfoMVK* from,
   5451     VkIOSSurfaceCreateInfoMVK* to)
   5452 {
   5453     (void)pool;
   5454     *to = *from;
   5455     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5456     to->pNext = nullptr;
   5457     if (pNext_size)
   5458     {
   5459         to->pNext = (const void*)pool->alloc(pNext_size);
   5460         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5461     }
   5462     to->pView = nullptr;
   5463     if (from->pView)
   5464     {
   5465         to->pView = (void*)pool->dupArray(from->pView, sizeof(const uint8_t));
   5466     }
   5467 }
   5468 
   5469 #endif
   5470 #ifdef VK_MVK_macos_surface
   5471 void deepcopy_VkMacOSSurfaceCreateInfoMVK(
   5472     Pool* pool,
   5473     const VkMacOSSurfaceCreateInfoMVK* from,
   5474     VkMacOSSurfaceCreateInfoMVK* to)
   5475 {
   5476     (void)pool;
   5477     *to = *from;
   5478     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5479     to->pNext = nullptr;
   5480     if (pNext_size)
   5481     {
   5482         to->pNext = (const void*)pool->alloc(pNext_size);
   5483         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5484     }
   5485     to->pView = nullptr;
   5486     if (from->pView)
   5487     {
   5488         to->pView = (void*)pool->dupArray(from->pView, sizeof(const uint8_t));
   5489     }
   5490 }
   5491 
   5492 #endif
   5493 #ifdef VK_EXT_external_memory_dma_buf
   5494 #endif
   5495 #ifdef VK_EXT_queue_family_foreign
   5496 #endif
   5497 #ifdef VK_EXT_debug_utils
   5498 void deepcopy_VkDebugUtilsObjectNameInfoEXT(
   5499     Pool* pool,
   5500     const VkDebugUtilsObjectNameInfoEXT* from,
   5501     VkDebugUtilsObjectNameInfoEXT* to)
   5502 {
   5503     (void)pool;
   5504     *to = *from;
   5505     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5506     to->pNext = nullptr;
   5507     if (pNext_size)
   5508     {
   5509         to->pNext = (const void*)pool->alloc(pNext_size);
   5510         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5511     }
   5512     to->pObjectName = nullptr;
   5513     if (from->pObjectName)
   5514     {
   5515         to->pObjectName = pool->strDup(from->pObjectName);
   5516     }
   5517 }
   5518 
   5519 void deepcopy_VkDebugUtilsObjectTagInfoEXT(
   5520     Pool* pool,
   5521     const VkDebugUtilsObjectTagInfoEXT* from,
   5522     VkDebugUtilsObjectTagInfoEXT* to)
   5523 {
   5524     (void)pool;
   5525     *to = *from;
   5526     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5527     to->pNext = nullptr;
   5528     if (pNext_size)
   5529     {
   5530         to->pNext = (const void*)pool->alloc(pNext_size);
   5531         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5532     }
   5533     to->pTag = nullptr;
   5534     if (from->pTag)
   5535     {
   5536         to->pTag = (void*)pool->dupArray(from->pTag, from->tagSize * sizeof(const uint8_t));
   5537     }
   5538 }
   5539 
   5540 void deepcopy_VkDebugUtilsLabelEXT(
   5541     Pool* pool,
   5542     const VkDebugUtilsLabelEXT* from,
   5543     VkDebugUtilsLabelEXT* to)
   5544 {
   5545     (void)pool;
   5546     *to = *from;
   5547     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5548     to->pNext = nullptr;
   5549     if (pNext_size)
   5550     {
   5551         to->pNext = (const void*)pool->alloc(pNext_size);
   5552         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5553     }
   5554     to->pLabelName = nullptr;
   5555     if (from->pLabelName)
   5556     {
   5557         to->pLabelName = pool->strDup(from->pLabelName);
   5558     }
   5559     memcpy(to->color, from->color, 4 * sizeof(float));
   5560 }
   5561 
   5562 void deepcopy_VkDebugUtilsMessengerCallbackDataEXT(
   5563     Pool* pool,
   5564     const VkDebugUtilsMessengerCallbackDataEXT* from,
   5565     VkDebugUtilsMessengerCallbackDataEXT* to)
   5566 {
   5567     (void)pool;
   5568     *to = *from;
   5569     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5570     to->pNext = nullptr;
   5571     if (pNext_size)
   5572     {
   5573         to->pNext = (const void*)pool->alloc(pNext_size);
   5574         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5575     }
   5576     to->pMessageIdName = nullptr;
   5577     if (from->pMessageIdName)
   5578     {
   5579         to->pMessageIdName = pool->strDup(from->pMessageIdName);
   5580     }
   5581     to->pMessage = nullptr;
   5582     if (from->pMessage)
   5583     {
   5584         to->pMessage = pool->strDup(from->pMessage);
   5585     }
   5586     to->pQueueLabels = nullptr;
   5587     if (from->pQueueLabels)
   5588     {
   5589         to->pQueueLabels = (VkDebugUtilsLabelEXT*)pool->alloc(from->queueLabelCount * sizeof(VkDebugUtilsLabelEXT));
   5590         to->queueLabelCount = from->queueLabelCount;
   5591         for (uint32_t i = 0; i < (uint32_t)from->queueLabelCount; ++i)
   5592         {
   5593             deepcopy_VkDebugUtilsLabelEXT(pool, from->pQueueLabels + i, (VkDebugUtilsLabelEXT*)(to->pQueueLabels + i));
   5594         }
   5595     }
   5596     to->pCmdBufLabels = nullptr;
   5597     if (from->pCmdBufLabels)
   5598     {
   5599         to->pCmdBufLabels = (VkDebugUtilsLabelEXT*)pool->alloc(from->cmdBufLabelCount * sizeof(VkDebugUtilsLabelEXT));
   5600         to->cmdBufLabelCount = from->cmdBufLabelCount;
   5601         for (uint32_t i = 0; i < (uint32_t)from->cmdBufLabelCount; ++i)
   5602         {
   5603             deepcopy_VkDebugUtilsLabelEXT(pool, from->pCmdBufLabels + i, (VkDebugUtilsLabelEXT*)(to->pCmdBufLabels + i));
   5604         }
   5605     }
   5606     to->pObjects = nullptr;
   5607     if (from->pObjects)
   5608     {
   5609         to->pObjects = (VkDebugUtilsObjectNameInfoEXT*)pool->alloc(from->objectCount * sizeof(VkDebugUtilsObjectNameInfoEXT));
   5610         to->objectCount = from->objectCount;
   5611         for (uint32_t i = 0; i < (uint32_t)from->objectCount; ++i)
   5612         {
   5613             deepcopy_VkDebugUtilsObjectNameInfoEXT(pool, from->pObjects + i, (VkDebugUtilsObjectNameInfoEXT*)(to->pObjects + i));
   5614         }
   5615     }
   5616 }
   5617 
   5618 void deepcopy_VkDebugUtilsMessengerCreateInfoEXT(
   5619     Pool* pool,
   5620     const VkDebugUtilsMessengerCreateInfoEXT* from,
   5621     VkDebugUtilsMessengerCreateInfoEXT* to)
   5622 {
   5623     (void)pool;
   5624     *to = *from;
   5625     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5626     to->pNext = nullptr;
   5627     if (pNext_size)
   5628     {
   5629         to->pNext = (const void*)pool->alloc(pNext_size);
   5630         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5631     }
   5632     to->pUserData = nullptr;
   5633     if (from->pUserData)
   5634     {
   5635         to->pUserData = (void*)pool->dupArray(from->pUserData, sizeof(uint8_t));
   5636     }
   5637 }
   5638 
   5639 #endif
   5640 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
   5641 void deepcopy_VkAndroidHardwareBufferUsageANDROID(
   5642     Pool* pool,
   5643     const VkAndroidHardwareBufferUsageANDROID* from,
   5644     VkAndroidHardwareBufferUsageANDROID* to)
   5645 {
   5646     (void)pool;
   5647     *to = *from;
   5648     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5649     to->pNext = nullptr;
   5650     if (pNext_size)
   5651     {
   5652         to->pNext = (void*)pool->alloc(pNext_size);
   5653         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5654     }
   5655 }
   5656 
   5657 void deepcopy_VkAndroidHardwareBufferPropertiesANDROID(
   5658     Pool* pool,
   5659     const VkAndroidHardwareBufferPropertiesANDROID* from,
   5660     VkAndroidHardwareBufferPropertiesANDROID* to)
   5661 {
   5662     (void)pool;
   5663     *to = *from;
   5664     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5665     to->pNext = nullptr;
   5666     if (pNext_size)
   5667     {
   5668         to->pNext = (void*)pool->alloc(pNext_size);
   5669         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5670     }
   5671 }
   5672 
   5673 void deepcopy_VkAndroidHardwareBufferFormatPropertiesANDROID(
   5674     Pool* pool,
   5675     const VkAndroidHardwareBufferFormatPropertiesANDROID* from,
   5676     VkAndroidHardwareBufferFormatPropertiesANDROID* to)
   5677 {
   5678     (void)pool;
   5679     *to = *from;
   5680     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5681     to->pNext = nullptr;
   5682     if (pNext_size)
   5683     {
   5684         to->pNext = (void*)pool->alloc(pNext_size);
   5685         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5686     }
   5687     deepcopy_VkComponentMapping(pool, &from->samplerYcbcrConversionComponents, (VkComponentMapping*)(&to->samplerYcbcrConversionComponents));
   5688 }
   5689 
   5690 void deepcopy_VkImportAndroidHardwareBufferInfoANDROID(
   5691     Pool* pool,
   5692     const VkImportAndroidHardwareBufferInfoANDROID* from,
   5693     VkImportAndroidHardwareBufferInfoANDROID* to)
   5694 {
   5695     (void)pool;
   5696     *to = *from;
   5697     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5698     to->pNext = nullptr;
   5699     if (pNext_size)
   5700     {
   5701         to->pNext = (const void*)pool->alloc(pNext_size);
   5702         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5703     }
   5704     to->buffer = nullptr;
   5705     if (from->buffer)
   5706     {
   5707         to->buffer = (AHardwareBuffer*)pool->dupArray(from->buffer, sizeof(AHardwareBuffer));
   5708     }
   5709 }
   5710 
   5711 void deepcopy_VkMemoryGetAndroidHardwareBufferInfoANDROID(
   5712     Pool* pool,
   5713     const VkMemoryGetAndroidHardwareBufferInfoANDROID* from,
   5714     VkMemoryGetAndroidHardwareBufferInfoANDROID* to)
   5715 {
   5716     (void)pool;
   5717     *to = *from;
   5718     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5719     to->pNext = nullptr;
   5720     if (pNext_size)
   5721     {
   5722         to->pNext = (const void*)pool->alloc(pNext_size);
   5723         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5724     }
   5725 }
   5726 
   5727 void deepcopy_VkExternalFormatANDROID(
   5728     Pool* pool,
   5729     const VkExternalFormatANDROID* from,
   5730     VkExternalFormatANDROID* to)
   5731 {
   5732     (void)pool;
   5733     *to = *from;
   5734     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5735     to->pNext = nullptr;
   5736     if (pNext_size)
   5737     {
   5738         to->pNext = (void*)pool->alloc(pNext_size);
   5739         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5740     }
   5741 }
   5742 
   5743 #endif
   5744 #ifdef VK_EXT_sampler_filter_minmax
   5745 void deepcopy_VkSamplerReductionModeCreateInfoEXT(
   5746     Pool* pool,
   5747     const VkSamplerReductionModeCreateInfoEXT* from,
   5748     VkSamplerReductionModeCreateInfoEXT* to)
   5749 {
   5750     (void)pool;
   5751     *to = *from;
   5752     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5753     to->pNext = nullptr;
   5754     if (pNext_size)
   5755     {
   5756         to->pNext = (const void*)pool->alloc(pNext_size);
   5757         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5758     }
   5759 }
   5760 
   5761 void deepcopy_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(
   5762     Pool* pool,
   5763     const VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* from,
   5764     VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT* to)
   5765 {
   5766     (void)pool;
   5767     *to = *from;
   5768     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5769     to->pNext = nullptr;
   5770     if (pNext_size)
   5771     {
   5772         to->pNext = (void*)pool->alloc(pNext_size);
   5773         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5774     }
   5775 }
   5776 
   5777 #endif
   5778 #ifdef VK_AMD_gpu_shader_int16
   5779 #endif
   5780 #ifdef VK_AMD_mixed_attachment_samples
   5781 #endif
   5782 #ifdef VK_AMD_shader_fragment_mask
   5783 #endif
   5784 #ifdef VK_EXT_shader_stencil_export
   5785 #endif
   5786 #ifdef VK_EXT_sample_locations
   5787 void deepcopy_VkSampleLocationEXT(
   5788     Pool* pool,
   5789     const VkSampleLocationEXT* from,
   5790     VkSampleLocationEXT* to)
   5791 {
   5792     (void)pool;
   5793     *to = *from;
   5794 }
   5795 
   5796 void deepcopy_VkSampleLocationsInfoEXT(
   5797     Pool* pool,
   5798     const VkSampleLocationsInfoEXT* from,
   5799     VkSampleLocationsInfoEXT* to)
   5800 {
   5801     (void)pool;
   5802     *to = *from;
   5803     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5804     to->pNext = nullptr;
   5805     if (pNext_size)
   5806     {
   5807         to->pNext = (const void*)pool->alloc(pNext_size);
   5808         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5809     }
   5810     deepcopy_VkExtent2D(pool, &from->sampleLocationGridSize, (VkExtent2D*)(&to->sampleLocationGridSize));
   5811     to->pSampleLocations = nullptr;
   5812     if (from->pSampleLocations)
   5813     {
   5814         to->pSampleLocations = (VkSampleLocationEXT*)pool->alloc(from->sampleLocationsCount * sizeof(const VkSampleLocationEXT));
   5815         to->sampleLocationsCount = from->sampleLocationsCount;
   5816         for (uint32_t i = 0; i < (uint32_t)from->sampleLocationsCount; ++i)
   5817         {
   5818             deepcopy_VkSampleLocationEXT(pool, from->pSampleLocations + i, (VkSampleLocationEXT*)(to->pSampleLocations + i));
   5819         }
   5820     }
   5821 }
   5822 
   5823 void deepcopy_VkAttachmentSampleLocationsEXT(
   5824     Pool* pool,
   5825     const VkAttachmentSampleLocationsEXT* from,
   5826     VkAttachmentSampleLocationsEXT* to)
   5827 {
   5828     (void)pool;
   5829     *to = *from;
   5830     deepcopy_VkSampleLocationsInfoEXT(pool, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
   5831 }
   5832 
   5833 void deepcopy_VkSubpassSampleLocationsEXT(
   5834     Pool* pool,
   5835     const VkSubpassSampleLocationsEXT* from,
   5836     VkSubpassSampleLocationsEXT* to)
   5837 {
   5838     (void)pool;
   5839     *to = *from;
   5840     deepcopy_VkSampleLocationsInfoEXT(pool, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
   5841 }
   5842 
   5843 void deepcopy_VkRenderPassSampleLocationsBeginInfoEXT(
   5844     Pool* pool,
   5845     const VkRenderPassSampleLocationsBeginInfoEXT* from,
   5846     VkRenderPassSampleLocationsBeginInfoEXT* to)
   5847 {
   5848     (void)pool;
   5849     *to = *from;
   5850     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5851     to->pNext = nullptr;
   5852     if (pNext_size)
   5853     {
   5854         to->pNext = (const void*)pool->alloc(pNext_size);
   5855         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5856     }
   5857     to->pAttachmentInitialSampleLocations = nullptr;
   5858     if (from->pAttachmentInitialSampleLocations)
   5859     {
   5860         to->pAttachmentInitialSampleLocations = (VkAttachmentSampleLocationsEXT*)pool->alloc(from->attachmentInitialSampleLocationsCount * sizeof(const VkAttachmentSampleLocationsEXT));
   5861         to->attachmentInitialSampleLocationsCount = from->attachmentInitialSampleLocationsCount;
   5862         for (uint32_t i = 0; i < (uint32_t)from->attachmentInitialSampleLocationsCount; ++i)
   5863         {
   5864             deepcopy_VkAttachmentSampleLocationsEXT(pool, from->pAttachmentInitialSampleLocations + i, (VkAttachmentSampleLocationsEXT*)(to->pAttachmentInitialSampleLocations + i));
   5865         }
   5866     }
   5867     to->pPostSubpassSampleLocations = nullptr;
   5868     if (from->pPostSubpassSampleLocations)
   5869     {
   5870         to->pPostSubpassSampleLocations = (VkSubpassSampleLocationsEXT*)pool->alloc(from->postSubpassSampleLocationsCount * sizeof(const VkSubpassSampleLocationsEXT));
   5871         to->postSubpassSampleLocationsCount = from->postSubpassSampleLocationsCount;
   5872         for (uint32_t i = 0; i < (uint32_t)from->postSubpassSampleLocationsCount; ++i)
   5873         {
   5874             deepcopy_VkSubpassSampleLocationsEXT(pool, from->pPostSubpassSampleLocations + i, (VkSubpassSampleLocationsEXT*)(to->pPostSubpassSampleLocations + i));
   5875         }
   5876     }
   5877 }
   5878 
   5879 void deepcopy_VkPipelineSampleLocationsStateCreateInfoEXT(
   5880     Pool* pool,
   5881     const VkPipelineSampleLocationsStateCreateInfoEXT* from,
   5882     VkPipelineSampleLocationsStateCreateInfoEXT* to)
   5883 {
   5884     (void)pool;
   5885     *to = *from;
   5886     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5887     to->pNext = nullptr;
   5888     if (pNext_size)
   5889     {
   5890         to->pNext = (const void*)pool->alloc(pNext_size);
   5891         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5892     }
   5893     deepcopy_VkSampleLocationsInfoEXT(pool, &from->sampleLocationsInfo, (VkSampleLocationsInfoEXT*)(&to->sampleLocationsInfo));
   5894 }
   5895 
   5896 void deepcopy_VkPhysicalDeviceSampleLocationsPropertiesEXT(
   5897     Pool* pool,
   5898     const VkPhysicalDeviceSampleLocationsPropertiesEXT* from,
   5899     VkPhysicalDeviceSampleLocationsPropertiesEXT* to)
   5900 {
   5901     (void)pool;
   5902     *to = *from;
   5903     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5904     to->pNext = nullptr;
   5905     if (pNext_size)
   5906     {
   5907         to->pNext = (void*)pool->alloc(pNext_size);
   5908         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5909     }
   5910     deepcopy_VkExtent2D(pool, &from->maxSampleLocationGridSize, (VkExtent2D*)(&to->maxSampleLocationGridSize));
   5911     memcpy(to->sampleLocationCoordinateRange, from->sampleLocationCoordinateRange, 2 * sizeof(float));
   5912 }
   5913 
   5914 void deepcopy_VkMultisamplePropertiesEXT(
   5915     Pool* pool,
   5916     const VkMultisamplePropertiesEXT* from,
   5917     VkMultisamplePropertiesEXT* to)
   5918 {
   5919     (void)pool;
   5920     *to = *from;
   5921     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5922     to->pNext = nullptr;
   5923     if (pNext_size)
   5924     {
   5925         to->pNext = (void*)pool->alloc(pNext_size);
   5926         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5927     }
   5928     deepcopy_VkExtent2D(pool, &from->maxSampleLocationGridSize, (VkExtent2D*)(&to->maxSampleLocationGridSize));
   5929 }
   5930 
   5931 #endif
   5932 #ifdef VK_EXT_blend_operation_advanced
   5933 void deepcopy_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(
   5934     Pool* pool,
   5935     const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* from,
   5936     VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT* to)
   5937 {
   5938     (void)pool;
   5939     *to = *from;
   5940     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5941     to->pNext = nullptr;
   5942     if (pNext_size)
   5943     {
   5944         to->pNext = (void*)pool->alloc(pNext_size);
   5945         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5946     }
   5947 }
   5948 
   5949 void deepcopy_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(
   5950     Pool* pool,
   5951     const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* from,
   5952     VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT* to)
   5953 {
   5954     (void)pool;
   5955     *to = *from;
   5956     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5957     to->pNext = nullptr;
   5958     if (pNext_size)
   5959     {
   5960         to->pNext = (void*)pool->alloc(pNext_size);
   5961         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5962     }
   5963 }
   5964 
   5965 void deepcopy_VkPipelineColorBlendAdvancedStateCreateInfoEXT(
   5966     Pool* pool,
   5967     const VkPipelineColorBlendAdvancedStateCreateInfoEXT* from,
   5968     VkPipelineColorBlendAdvancedStateCreateInfoEXT* to)
   5969 {
   5970     (void)pool;
   5971     *to = *from;
   5972     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5973     to->pNext = nullptr;
   5974     if (pNext_size)
   5975     {
   5976         to->pNext = (const void*)pool->alloc(pNext_size);
   5977         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5978     }
   5979 }
   5980 
   5981 #endif
   5982 #ifdef VK_NV_fragment_coverage_to_color
   5983 void deepcopy_VkPipelineCoverageToColorStateCreateInfoNV(
   5984     Pool* pool,
   5985     const VkPipelineCoverageToColorStateCreateInfoNV* from,
   5986     VkPipelineCoverageToColorStateCreateInfoNV* to)
   5987 {
   5988     (void)pool;
   5989     *to = *from;
   5990     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   5991     to->pNext = nullptr;
   5992     if (pNext_size)
   5993     {
   5994         to->pNext = (const void*)pool->alloc(pNext_size);
   5995         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   5996     }
   5997 }
   5998 
   5999 #endif
   6000 #ifdef VK_NV_framebuffer_mixed_samples
   6001 void deepcopy_VkPipelineCoverageModulationStateCreateInfoNV(
   6002     Pool* pool,
   6003     const VkPipelineCoverageModulationStateCreateInfoNV* from,
   6004     VkPipelineCoverageModulationStateCreateInfoNV* to)
   6005 {
   6006     (void)pool;
   6007     *to = *from;
   6008     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6009     to->pNext = nullptr;
   6010     if (pNext_size)
   6011     {
   6012         to->pNext = (const void*)pool->alloc(pNext_size);
   6013         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6014     }
   6015     to->pCoverageModulationTable = nullptr;
   6016     if (from->pCoverageModulationTable)
   6017     {
   6018         to->pCoverageModulationTable = (float*)pool->dupArray(from->pCoverageModulationTable, from->coverageModulationTableCount * sizeof(const float));
   6019     }
   6020 }
   6021 
   6022 #endif
   6023 #ifdef VK_NV_fill_rectangle
   6024 #endif
   6025 #ifdef VK_EXT_post_depth_coverage
   6026 #endif
   6027 #ifdef VK_EXT_validation_cache
   6028 void deepcopy_VkValidationCacheCreateInfoEXT(
   6029     Pool* pool,
   6030     const VkValidationCacheCreateInfoEXT* from,
   6031     VkValidationCacheCreateInfoEXT* to)
   6032 {
   6033     (void)pool;
   6034     *to = *from;
   6035     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6036     to->pNext = nullptr;
   6037     if (pNext_size)
   6038     {
   6039         to->pNext = (const void*)pool->alloc(pNext_size);
   6040         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6041     }
   6042     to->pInitialData = nullptr;
   6043     if (from->pInitialData)
   6044     {
   6045         to->pInitialData = (void*)pool->dupArray(from->pInitialData, from->initialDataSize * sizeof(const uint8_t));
   6046     }
   6047 }
   6048 
   6049 void deepcopy_VkShaderModuleValidationCacheCreateInfoEXT(
   6050     Pool* pool,
   6051     const VkShaderModuleValidationCacheCreateInfoEXT* from,
   6052     VkShaderModuleValidationCacheCreateInfoEXT* to)
   6053 {
   6054     (void)pool;
   6055     *to = *from;
   6056     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6057     to->pNext = nullptr;
   6058     if (pNext_size)
   6059     {
   6060         to->pNext = (const void*)pool->alloc(pNext_size);
   6061         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6062     }
   6063 }
   6064 
   6065 #endif
   6066 #ifdef VK_EXT_descriptor_indexing
   6067 void deepcopy_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(
   6068     Pool* pool,
   6069     const VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* from,
   6070     VkDescriptorSetLayoutBindingFlagsCreateInfoEXT* to)
   6071 {
   6072     (void)pool;
   6073     *to = *from;
   6074     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6075     to->pNext = nullptr;
   6076     if (pNext_size)
   6077     {
   6078         to->pNext = (const void*)pool->alloc(pNext_size);
   6079         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6080     }
   6081     to->pBindingFlags = nullptr;
   6082     if (from->pBindingFlags)
   6083     {
   6084         to->pBindingFlags = (VkDescriptorBindingFlagsEXT*)pool->dupArray(from->pBindingFlags, from->bindingCount * sizeof(const VkDescriptorBindingFlagsEXT));
   6085     }
   6086 }
   6087 
   6088 void deepcopy_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(
   6089     Pool* pool,
   6090     const VkPhysicalDeviceDescriptorIndexingFeaturesEXT* from,
   6091     VkPhysicalDeviceDescriptorIndexingFeaturesEXT* to)
   6092 {
   6093     (void)pool;
   6094     *to = *from;
   6095     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6096     to->pNext = nullptr;
   6097     if (pNext_size)
   6098     {
   6099         to->pNext = (void*)pool->alloc(pNext_size);
   6100         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6101     }
   6102 }
   6103 
   6104 void deepcopy_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(
   6105     Pool* pool,
   6106     const VkPhysicalDeviceDescriptorIndexingPropertiesEXT* from,
   6107     VkPhysicalDeviceDescriptorIndexingPropertiesEXT* to)
   6108 {
   6109     (void)pool;
   6110     *to = *from;
   6111     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6112     to->pNext = nullptr;
   6113     if (pNext_size)
   6114     {
   6115         to->pNext = (void*)pool->alloc(pNext_size);
   6116         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6117     }
   6118 }
   6119 
   6120 void deepcopy_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(
   6121     Pool* pool,
   6122     const VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* from,
   6123     VkDescriptorSetVariableDescriptorCountAllocateInfoEXT* to)
   6124 {
   6125     (void)pool;
   6126     *to = *from;
   6127     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6128     to->pNext = nullptr;
   6129     if (pNext_size)
   6130     {
   6131         to->pNext = (const void*)pool->alloc(pNext_size);
   6132         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6133     }
   6134     to->pDescriptorCounts = nullptr;
   6135     if (from->pDescriptorCounts)
   6136     {
   6137         to->pDescriptorCounts = (uint32_t*)pool->dupArray(from->pDescriptorCounts, from->descriptorSetCount * sizeof(const uint32_t));
   6138     }
   6139 }
   6140 
   6141 void deepcopy_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(
   6142     Pool* pool,
   6143     const VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* from,
   6144     VkDescriptorSetVariableDescriptorCountLayoutSupportEXT* to)
   6145 {
   6146     (void)pool;
   6147     *to = *from;
   6148     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6149     to->pNext = nullptr;
   6150     if (pNext_size)
   6151     {
   6152         to->pNext = (void*)pool->alloc(pNext_size);
   6153         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6154     }
   6155 }
   6156 
   6157 #endif
   6158 #ifdef VK_EXT_shader_viewport_index_layer
   6159 #endif
   6160 #ifdef VK_EXT_global_priority
   6161 void deepcopy_VkDeviceQueueGlobalPriorityCreateInfoEXT(
   6162     Pool* pool,
   6163     const VkDeviceQueueGlobalPriorityCreateInfoEXT* from,
   6164     VkDeviceQueueGlobalPriorityCreateInfoEXT* to)
   6165 {
   6166     (void)pool;
   6167     *to = *from;
   6168     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6169     to->pNext = nullptr;
   6170     if (pNext_size)
   6171     {
   6172         to->pNext = (const void*)pool->alloc(pNext_size);
   6173         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6174     }
   6175 }
   6176 
   6177 #endif
   6178 #ifdef VK_EXT_external_memory_host
   6179 void deepcopy_VkImportMemoryHostPointerInfoEXT(
   6180     Pool* pool,
   6181     const VkImportMemoryHostPointerInfoEXT* from,
   6182     VkImportMemoryHostPointerInfoEXT* to)
   6183 {
   6184     (void)pool;
   6185     *to = *from;
   6186     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6187     to->pNext = nullptr;
   6188     if (pNext_size)
   6189     {
   6190         to->pNext = (const void*)pool->alloc(pNext_size);
   6191         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6192     }
   6193     to->pHostPointer = nullptr;
   6194     if (from->pHostPointer)
   6195     {
   6196         to->pHostPointer = (void*)pool->dupArray(from->pHostPointer, sizeof(uint8_t));
   6197     }
   6198 }
   6199 
   6200 void deepcopy_VkMemoryHostPointerPropertiesEXT(
   6201     Pool* pool,
   6202     const VkMemoryHostPointerPropertiesEXT* from,
   6203     VkMemoryHostPointerPropertiesEXT* to)
   6204 {
   6205     (void)pool;
   6206     *to = *from;
   6207     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6208     to->pNext = nullptr;
   6209     if (pNext_size)
   6210     {
   6211         to->pNext = (void*)pool->alloc(pNext_size);
   6212         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6213     }
   6214 }
   6215 
   6216 void deepcopy_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(
   6217     Pool* pool,
   6218     const VkPhysicalDeviceExternalMemoryHostPropertiesEXT* from,
   6219     VkPhysicalDeviceExternalMemoryHostPropertiesEXT* to)
   6220 {
   6221     (void)pool;
   6222     *to = *from;
   6223     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6224     to->pNext = nullptr;
   6225     if (pNext_size)
   6226     {
   6227         to->pNext = (void*)pool->alloc(pNext_size);
   6228         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6229     }
   6230 }
   6231 
   6232 #endif
   6233 #ifdef VK_AMD_buffer_marker
   6234 #endif
   6235 #ifdef VK_AMD_shader_core_properties
   6236 void deepcopy_VkPhysicalDeviceShaderCorePropertiesAMD(
   6237     Pool* pool,
   6238     const VkPhysicalDeviceShaderCorePropertiesAMD* from,
   6239     VkPhysicalDeviceShaderCorePropertiesAMD* to)
   6240 {
   6241     (void)pool;
   6242     *to = *from;
   6243     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6244     to->pNext = nullptr;
   6245     if (pNext_size)
   6246     {
   6247         to->pNext = (void*)pool->alloc(pNext_size);
   6248         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6249     }
   6250 }
   6251 
   6252 #endif
   6253 #ifdef VK_EXT_vertex_attribute_divisor
   6254 void deepcopy_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(
   6255     Pool* pool,
   6256     const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* from,
   6257     VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT* to)
   6258 {
   6259     (void)pool;
   6260     *to = *from;
   6261     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6262     to->pNext = nullptr;
   6263     if (pNext_size)
   6264     {
   6265         to->pNext = (void*)pool->alloc(pNext_size);
   6266         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6267     }
   6268 }
   6269 
   6270 void deepcopy_VkVertexInputBindingDivisorDescriptionEXT(
   6271     Pool* pool,
   6272     const VkVertexInputBindingDivisorDescriptionEXT* from,
   6273     VkVertexInputBindingDivisorDescriptionEXT* to)
   6274 {
   6275     (void)pool;
   6276     *to = *from;
   6277 }
   6278 
   6279 void deepcopy_VkPipelineVertexInputDivisorStateCreateInfoEXT(
   6280     Pool* pool,
   6281     const VkPipelineVertexInputDivisorStateCreateInfoEXT* from,
   6282     VkPipelineVertexInputDivisorStateCreateInfoEXT* to)
   6283 {
   6284     (void)pool;
   6285     *to = *from;
   6286     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6287     to->pNext = nullptr;
   6288     if (pNext_size)
   6289     {
   6290         to->pNext = (const void*)pool->alloc(pNext_size);
   6291         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6292     }
   6293     to->pVertexBindingDivisors = nullptr;
   6294     if (from->pVertexBindingDivisors)
   6295     {
   6296         to->pVertexBindingDivisors = (VkVertexInputBindingDivisorDescriptionEXT*)pool->alloc(from->vertexBindingDivisorCount * sizeof(const VkVertexInputBindingDivisorDescriptionEXT));
   6297         to->vertexBindingDivisorCount = from->vertexBindingDivisorCount;
   6298         for (uint32_t i = 0; i < (uint32_t)from->vertexBindingDivisorCount; ++i)
   6299         {
   6300             deepcopy_VkVertexInputBindingDivisorDescriptionEXT(pool, from->pVertexBindingDivisors + i, (VkVertexInputBindingDivisorDescriptionEXT*)(to->pVertexBindingDivisors + i));
   6301         }
   6302     }
   6303 }
   6304 
   6305 #endif
   6306 #ifdef VK_NV_shader_subgroup_partitioned
   6307 #endif
   6308 #ifdef VK_NV_device_diagnostic_checkpoints
   6309 void deepcopy_VkQueueFamilyCheckpointPropertiesNV(
   6310     Pool* pool,
   6311     const VkQueueFamilyCheckpointPropertiesNV* from,
   6312     VkQueueFamilyCheckpointPropertiesNV* to)
   6313 {
   6314     (void)pool;
   6315     *to = *from;
   6316     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6317     to->pNext = nullptr;
   6318     if (pNext_size)
   6319     {
   6320         to->pNext = (void*)pool->alloc(pNext_size);
   6321         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6322     }
   6323 }
   6324 
   6325 void deepcopy_VkCheckpointDataNV(
   6326     Pool* pool,
   6327     const VkCheckpointDataNV* from,
   6328     VkCheckpointDataNV* to)
   6329 {
   6330     (void)pool;
   6331     *to = *from;
   6332     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6333     to->pNext = nullptr;
   6334     if (pNext_size)
   6335     {
   6336         to->pNext = (void*)pool->alloc(pNext_size);
   6337         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6338     }
   6339     to->pCheckpointMarker = nullptr;
   6340     if (from->pCheckpointMarker)
   6341     {
   6342         to->pCheckpointMarker = (void*)pool->dupArray(from->pCheckpointMarker, sizeof(uint8_t));
   6343     }
   6344 }
   6345 
   6346 #endif
   6347 #ifdef VK_GOOGLE_address_space
   6348 #endif
   6349 #ifdef VK_GOOGLE_color_buffer
   6350 void deepcopy_VkImportColorBufferGOOGLE(
   6351     Pool* pool,
   6352     const VkImportColorBufferGOOGLE* from,
   6353     VkImportColorBufferGOOGLE* to)
   6354 {
   6355     (void)pool;
   6356     *to = *from;
   6357     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6358     to->pNext = nullptr;
   6359     if (pNext_size)
   6360     {
   6361         to->pNext = (void*)pool->alloc(pNext_size);
   6362         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6363     }
   6364 }
   6365 
   6366 void deepcopy_VkImportPhysicalAddressGOOGLE(
   6367     Pool* pool,
   6368     const VkImportPhysicalAddressGOOGLE* from,
   6369     VkImportPhysicalAddressGOOGLE* to)
   6370 {
   6371     (void)pool;
   6372     *to = *from;
   6373     size_t pNext_size = goldfish_vk_extension_struct_size(from->pNext);
   6374     to->pNext = nullptr;
   6375     if (pNext_size)
   6376     {
   6377         to->pNext = (void*)pool->alloc(pNext_size);
   6378         deepcopy_extension_struct(pool, from->pNext, (void*)(to->pNext));
   6379     }
   6380 }
   6381 
   6382 #endif
   6383 #ifdef VK_GOOGLE_sized_descriptor_update_template
   6384 #endif
   6385 #ifdef VK_GOOGLE_async_command_buffers
   6386 #endif
   6387 void deepcopy_extension_struct(
   6388     Pool* pool,
   6389     const void* structExtension,
   6390     void* structExtension_out)
   6391 {
   6392     if (!structExtension)
   6393     {
   6394         return;
   6395     }
   6396     uint32_t structType = (uint32_t)goldfish_vk_struct_type(structExtension);
   6397     switch(structType)
   6398     {
   6399 #ifdef VK_VERSION_1_1
   6400         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SUBGROUP_PROPERTIES:
   6401         {
   6402             deepcopy_VkPhysicalDeviceSubgroupProperties(pool, reinterpret_cast<const VkPhysicalDeviceSubgroupProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceSubgroupProperties*>(structExtension_out));
   6403             break;
   6404         }
   6405         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_16BIT_STORAGE_FEATURES:
   6406         {
   6407             deepcopy_VkPhysicalDevice16BitStorageFeatures(pool, reinterpret_cast<const VkPhysicalDevice16BitStorageFeatures*>(structExtension), reinterpret_cast<VkPhysicalDevice16BitStorageFeatures*>(structExtension_out));
   6408             break;
   6409         }
   6410         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
   6411         {
   6412             deepcopy_VkMemoryDedicatedRequirements(pool, reinterpret_cast<const VkMemoryDedicatedRequirements*>(structExtension), reinterpret_cast<VkMemoryDedicatedRequirements*>(structExtension_out));
   6413             break;
   6414         }
   6415         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
   6416         {
   6417             deepcopy_VkMemoryDedicatedAllocateInfo(pool, reinterpret_cast<const VkMemoryDedicatedAllocateInfo*>(structExtension), reinterpret_cast<VkMemoryDedicatedAllocateInfo*>(structExtension_out));
   6418             break;
   6419         }
   6420         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
   6421         {
   6422             deepcopy_VkMemoryAllocateFlagsInfo(pool, reinterpret_cast<const VkMemoryAllocateFlagsInfo*>(structExtension), reinterpret_cast<VkMemoryAllocateFlagsInfo*>(structExtension_out));
   6423             break;
   6424         }
   6425         case VK_STRUCTURE_TYPE_DEVICE_GROUP_RENDER_PASS_BEGIN_INFO:
   6426         {
   6427             deepcopy_VkDeviceGroupRenderPassBeginInfo(pool, reinterpret_cast<const VkDeviceGroupRenderPassBeginInfo*>(structExtension), reinterpret_cast<VkDeviceGroupRenderPassBeginInfo*>(structExtension_out));
   6428             break;
   6429         }
   6430         case VK_STRUCTURE_TYPE_DEVICE_GROUP_COMMAND_BUFFER_BEGIN_INFO:
   6431         {
   6432             deepcopy_VkDeviceGroupCommandBufferBeginInfo(pool, reinterpret_cast<const VkDeviceGroupCommandBufferBeginInfo*>(structExtension), reinterpret_cast<VkDeviceGroupCommandBufferBeginInfo*>(structExtension_out));
   6433             break;
   6434         }
   6435         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
   6436         {
   6437             deepcopy_VkDeviceGroupSubmitInfo(pool, reinterpret_cast<const VkDeviceGroupSubmitInfo*>(structExtension), reinterpret_cast<VkDeviceGroupSubmitInfo*>(structExtension_out));
   6438             break;
   6439         }
   6440         case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
   6441         {
   6442             deepcopy_VkDeviceGroupBindSparseInfo(pool, reinterpret_cast<const VkDeviceGroupBindSparseInfo*>(structExtension), reinterpret_cast<VkDeviceGroupBindSparseInfo*>(structExtension_out));
   6443             break;
   6444         }
   6445         case VK_STRUCTURE_TYPE_BIND_BUFFER_MEMORY_DEVICE_GROUP_INFO:
   6446         {
   6447             deepcopy_VkBindBufferMemoryDeviceGroupInfo(pool, reinterpret_cast<const VkBindBufferMemoryDeviceGroupInfo*>(structExtension), reinterpret_cast<VkBindBufferMemoryDeviceGroupInfo*>(structExtension_out));
   6448             break;
   6449         }
   6450         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_DEVICE_GROUP_INFO:
   6451         {
   6452             deepcopy_VkBindImageMemoryDeviceGroupInfo(pool, reinterpret_cast<const VkBindImageMemoryDeviceGroupInfo*>(structExtension), reinterpret_cast<VkBindImageMemoryDeviceGroupInfo*>(structExtension_out));
   6453             break;
   6454         }
   6455         case VK_STRUCTURE_TYPE_DEVICE_GROUP_DEVICE_CREATE_INFO:
   6456         {
   6457             deepcopy_VkDeviceGroupDeviceCreateInfo(pool, reinterpret_cast<const VkDeviceGroupDeviceCreateInfo*>(structExtension), reinterpret_cast<VkDeviceGroupDeviceCreateInfo*>(structExtension_out));
   6458             break;
   6459         }
   6460         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_FEATURES_2:
   6461         {
   6462             deepcopy_VkPhysicalDeviceFeatures2(pool, reinterpret_cast<const VkPhysicalDeviceFeatures2*>(structExtension), reinterpret_cast<VkPhysicalDeviceFeatures2*>(structExtension_out));
   6463             break;
   6464         }
   6465         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_POINT_CLIPPING_PROPERTIES:
   6466         {
   6467             deepcopy_VkPhysicalDevicePointClippingProperties(pool, reinterpret_cast<const VkPhysicalDevicePointClippingProperties*>(structExtension), reinterpret_cast<VkPhysicalDevicePointClippingProperties*>(structExtension_out));
   6468             break;
   6469         }
   6470         case VK_STRUCTURE_TYPE_RENDER_PASS_INPUT_ATTACHMENT_ASPECT_CREATE_INFO:
   6471         {
   6472             deepcopy_VkRenderPassInputAttachmentAspectCreateInfo(pool, reinterpret_cast<const VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension), reinterpret_cast<VkRenderPassInputAttachmentAspectCreateInfo*>(structExtension_out));
   6473             break;
   6474         }
   6475         case VK_STRUCTURE_TYPE_IMAGE_VIEW_USAGE_CREATE_INFO:
   6476         {
   6477             deepcopy_VkImageViewUsageCreateInfo(pool, reinterpret_cast<const VkImageViewUsageCreateInfo*>(structExtension), reinterpret_cast<VkImageViewUsageCreateInfo*>(structExtension_out));
   6478             break;
   6479         }
   6480         case VK_STRUCTURE_TYPE_PIPELINE_TESSELLATION_DOMAIN_ORIGIN_STATE_CREATE_INFO:
   6481         {
   6482             deepcopy_VkPipelineTessellationDomainOriginStateCreateInfo(pool, reinterpret_cast<const VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension), reinterpret_cast<VkPipelineTessellationDomainOriginStateCreateInfo*>(structExtension_out));
   6483             break;
   6484         }
   6485         case VK_STRUCTURE_TYPE_RENDER_PASS_MULTIVIEW_CREATE_INFO:
   6486         {
   6487             deepcopy_VkRenderPassMultiviewCreateInfo(pool, reinterpret_cast<const VkRenderPassMultiviewCreateInfo*>(structExtension), reinterpret_cast<VkRenderPassMultiviewCreateInfo*>(structExtension_out));
   6488             break;
   6489         }
   6490         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_FEATURES:
   6491         {
   6492             deepcopy_VkPhysicalDeviceMultiviewFeatures(pool, reinterpret_cast<const VkPhysicalDeviceMultiviewFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewFeatures*>(structExtension_out));
   6493             break;
   6494         }
   6495         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PROPERTIES:
   6496         {
   6497             deepcopy_VkPhysicalDeviceMultiviewProperties(pool, reinterpret_cast<const VkPhysicalDeviceMultiviewProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewProperties*>(structExtension_out));
   6498             break;
   6499         }
   6500         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VARIABLE_POINTER_FEATURES:
   6501         {
   6502             deepcopy_VkPhysicalDeviceVariablePointerFeatures(pool, reinterpret_cast<const VkPhysicalDeviceVariablePointerFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceVariablePointerFeatures*>(structExtension_out));
   6503             break;
   6504         }
   6505         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_FEATURES:
   6506         {
   6507             deepcopy_VkPhysicalDeviceProtectedMemoryFeatures(pool, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceProtectedMemoryFeatures*>(structExtension_out));
   6508             break;
   6509         }
   6510         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PROTECTED_MEMORY_PROPERTIES:
   6511         {
   6512             deepcopy_VkPhysicalDeviceProtectedMemoryProperties(pool, reinterpret_cast<const VkPhysicalDeviceProtectedMemoryProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceProtectedMemoryProperties*>(structExtension_out));
   6513             break;
   6514         }
   6515         case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
   6516         {
   6517             deepcopy_VkProtectedSubmitInfo(pool, reinterpret_cast<const VkProtectedSubmitInfo*>(structExtension), reinterpret_cast<VkProtectedSubmitInfo*>(structExtension_out));
   6518             break;
   6519         }
   6520         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
   6521         {
   6522             deepcopy_VkSamplerYcbcrConversionInfo(pool, reinterpret_cast<const VkSamplerYcbcrConversionInfo*>(structExtension), reinterpret_cast<VkSamplerYcbcrConversionInfo*>(structExtension_out));
   6523             break;
   6524         }
   6525         case VK_STRUCTURE_TYPE_BIND_IMAGE_PLANE_MEMORY_INFO:
   6526         {
   6527             deepcopy_VkBindImagePlaneMemoryInfo(pool, reinterpret_cast<const VkBindImagePlaneMemoryInfo*>(structExtension), reinterpret_cast<VkBindImagePlaneMemoryInfo*>(structExtension_out));
   6528             break;
   6529         }
   6530         case VK_STRUCTURE_TYPE_IMAGE_PLANE_MEMORY_REQUIREMENTS_INFO:
   6531         {
   6532             deepcopy_VkImagePlaneMemoryRequirementsInfo(pool, reinterpret_cast<const VkImagePlaneMemoryRequirementsInfo*>(structExtension), reinterpret_cast<VkImagePlaneMemoryRequirementsInfo*>(structExtension_out));
   6533             break;
   6534         }
   6535         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_YCBCR_CONVERSION_FEATURES:
   6536         {
   6537             deepcopy_VkPhysicalDeviceSamplerYcbcrConversionFeatures(pool, reinterpret_cast<const VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceSamplerYcbcrConversionFeatures*>(structExtension_out));
   6538             break;
   6539         }
   6540         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_IMAGE_FORMAT_PROPERTIES:
   6541         {
   6542             deepcopy_VkSamplerYcbcrConversionImageFormatProperties(pool, reinterpret_cast<const VkSamplerYcbcrConversionImageFormatProperties*>(structExtension), reinterpret_cast<VkSamplerYcbcrConversionImageFormatProperties*>(structExtension_out));
   6543             break;
   6544         }
   6545         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_IMAGE_FORMAT_INFO:
   6546         {
   6547             deepcopy_VkPhysicalDeviceExternalImageFormatInfo(pool, reinterpret_cast<const VkPhysicalDeviceExternalImageFormatInfo*>(structExtension), reinterpret_cast<VkPhysicalDeviceExternalImageFormatInfo*>(structExtension_out));
   6548             break;
   6549         }
   6550         case VK_STRUCTURE_TYPE_EXTERNAL_IMAGE_FORMAT_PROPERTIES:
   6551         {
   6552             deepcopy_VkExternalImageFormatProperties(pool, reinterpret_cast<const VkExternalImageFormatProperties*>(structExtension), reinterpret_cast<VkExternalImageFormatProperties*>(structExtension_out));
   6553             break;
   6554         }
   6555         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_ID_PROPERTIES:
   6556         {
   6557             deepcopy_VkPhysicalDeviceIDProperties(pool, reinterpret_cast<const VkPhysicalDeviceIDProperties*>(structExtension), reinterpret_cast<VkPhysicalDeviceIDProperties*>(structExtension_out));
   6558             break;
   6559         }
   6560         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO:
   6561         {
   6562             deepcopy_VkExternalMemoryImageCreateInfo(pool, reinterpret_cast<const VkExternalMemoryImageCreateInfo*>(structExtension), reinterpret_cast<VkExternalMemoryImageCreateInfo*>(structExtension_out));
   6563             break;
   6564         }
   6565         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_BUFFER_CREATE_INFO:
   6566         {
   6567             deepcopy_VkExternalMemoryBufferCreateInfo(pool, reinterpret_cast<const VkExternalMemoryBufferCreateInfo*>(structExtension), reinterpret_cast<VkExternalMemoryBufferCreateInfo*>(structExtension_out));
   6568             break;
   6569         }
   6570         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
   6571         {
   6572             deepcopy_VkExportMemoryAllocateInfo(pool, reinterpret_cast<const VkExportMemoryAllocateInfo*>(structExtension), reinterpret_cast<VkExportMemoryAllocateInfo*>(structExtension_out));
   6573             break;
   6574         }
   6575         case VK_STRUCTURE_TYPE_EXPORT_FENCE_CREATE_INFO:
   6576         {
   6577             deepcopy_VkExportFenceCreateInfo(pool, reinterpret_cast<const VkExportFenceCreateInfo*>(structExtension), reinterpret_cast<VkExportFenceCreateInfo*>(structExtension_out));
   6578             break;
   6579         }
   6580         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_CREATE_INFO:
   6581         {
   6582             deepcopy_VkExportSemaphoreCreateInfo(pool, reinterpret_cast<const VkExportSemaphoreCreateInfo*>(structExtension), reinterpret_cast<VkExportSemaphoreCreateInfo*>(structExtension_out));
   6583             break;
   6584         }
   6585         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MAINTENANCE_3_PROPERTIES:
   6586         {
   6587             deepcopy_VkPhysicalDeviceMaintenance3Properties(pool, reinterpret_cast<const VkPhysicalDeviceMaintenance3Properties*>(structExtension), reinterpret_cast<VkPhysicalDeviceMaintenance3Properties*>(structExtension_out));
   6588             break;
   6589         }
   6590         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_DRAW_PARAMETER_FEATURES:
   6591         {
   6592             deepcopy_VkPhysicalDeviceShaderDrawParameterFeatures(pool, reinterpret_cast<const VkPhysicalDeviceShaderDrawParameterFeatures*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderDrawParameterFeatures*>(structExtension_out));
   6593             break;
   6594         }
   6595 #endif
   6596 #ifdef VK_KHR_swapchain
   6597         case VK_STRUCTURE_TYPE_IMAGE_SWAPCHAIN_CREATE_INFO_KHR:
   6598         {
   6599             deepcopy_VkImageSwapchainCreateInfoKHR(pool, reinterpret_cast<const VkImageSwapchainCreateInfoKHR*>(structExtension), reinterpret_cast<VkImageSwapchainCreateInfoKHR*>(structExtension_out));
   6600             break;
   6601         }
   6602         case VK_STRUCTURE_TYPE_BIND_IMAGE_MEMORY_SWAPCHAIN_INFO_KHR:
   6603         {
   6604             deepcopy_VkBindImageMemorySwapchainInfoKHR(pool, reinterpret_cast<const VkBindImageMemorySwapchainInfoKHR*>(structExtension), reinterpret_cast<VkBindImageMemorySwapchainInfoKHR*>(structExtension_out));
   6605             break;
   6606         }
   6607         case VK_STRUCTURE_TYPE_DEVICE_GROUP_PRESENT_INFO_KHR:
   6608         {
   6609             deepcopy_VkDeviceGroupPresentInfoKHR(pool, reinterpret_cast<const VkDeviceGroupPresentInfoKHR*>(structExtension), reinterpret_cast<VkDeviceGroupPresentInfoKHR*>(structExtension_out));
   6610             break;
   6611         }
   6612         case VK_STRUCTURE_TYPE_DEVICE_GROUP_SWAPCHAIN_CREATE_INFO_KHR:
   6613         {
   6614             deepcopy_VkDeviceGroupSwapchainCreateInfoKHR(pool, reinterpret_cast<const VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension), reinterpret_cast<VkDeviceGroupSwapchainCreateInfoKHR*>(structExtension_out));
   6615             break;
   6616         }
   6617 #endif
   6618 #ifdef VK_KHR_display_swapchain
   6619         case VK_STRUCTURE_TYPE_DISPLAY_PRESENT_INFO_KHR:
   6620         {
   6621             deepcopy_VkDisplayPresentInfoKHR(pool, reinterpret_cast<const VkDisplayPresentInfoKHR*>(structExtension), reinterpret_cast<VkDisplayPresentInfoKHR*>(structExtension_out));
   6622             break;
   6623         }
   6624 #endif
   6625 #ifdef VK_KHR_external_memory_win32
   6626         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
   6627         {
   6628             deepcopy_VkImportMemoryWin32HandleInfoKHR(pool, reinterpret_cast<const VkImportMemoryWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkImportMemoryWin32HandleInfoKHR*>(structExtension_out));
   6629             break;
   6630         }
   6631         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_KHR:
   6632         {
   6633             deepcopy_VkExportMemoryWin32HandleInfoKHR(pool, reinterpret_cast<const VkExportMemoryWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportMemoryWin32HandleInfoKHR*>(structExtension_out));
   6634             break;
   6635         }
   6636 #endif
   6637 #ifdef VK_KHR_external_memory_fd
   6638         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
   6639         {
   6640             deepcopy_VkImportMemoryFdInfoKHR(pool, reinterpret_cast<const VkImportMemoryFdInfoKHR*>(structExtension), reinterpret_cast<VkImportMemoryFdInfoKHR*>(structExtension_out));
   6641             break;
   6642         }
   6643 #endif
   6644 #ifdef VK_KHR_win32_keyed_mutex
   6645         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_KHR:
   6646         {
   6647             deepcopy_VkWin32KeyedMutexAcquireReleaseInfoKHR(pool, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension), reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoKHR*>(structExtension_out));
   6648             break;
   6649         }
   6650 #endif
   6651 #ifdef VK_KHR_external_semaphore_win32
   6652         case VK_STRUCTURE_TYPE_EXPORT_SEMAPHORE_WIN32_HANDLE_INFO_KHR:
   6653         {
   6654             deepcopy_VkExportSemaphoreWin32HandleInfoKHR(pool, reinterpret_cast<const VkExportSemaphoreWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportSemaphoreWin32HandleInfoKHR*>(structExtension_out));
   6655             break;
   6656         }
   6657         case VK_STRUCTURE_TYPE_D3D12_FENCE_SUBMIT_INFO_KHR:
   6658         {
   6659             deepcopy_VkD3D12FenceSubmitInfoKHR(pool, reinterpret_cast<const VkD3D12FenceSubmitInfoKHR*>(structExtension), reinterpret_cast<VkD3D12FenceSubmitInfoKHR*>(structExtension_out));
   6660             break;
   6661         }
   6662 #endif
   6663 #ifdef VK_KHR_push_descriptor
   6664         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_PUSH_DESCRIPTOR_PROPERTIES_KHR:
   6665         {
   6666             deepcopy_VkPhysicalDevicePushDescriptorPropertiesKHR(pool, reinterpret_cast<const VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevicePushDescriptorPropertiesKHR*>(structExtension_out));
   6667             break;
   6668         }
   6669 #endif
   6670 #ifdef VK_KHR_incremental_present
   6671         case VK_STRUCTURE_TYPE_PRESENT_REGIONS_KHR:
   6672         {
   6673             deepcopy_VkPresentRegionsKHR(pool, reinterpret_cast<const VkPresentRegionsKHR*>(structExtension), reinterpret_cast<VkPresentRegionsKHR*>(structExtension_out));
   6674             break;
   6675         }
   6676 #endif
   6677 #ifdef VK_KHR_shared_presentable_image
   6678         case VK_STRUCTURE_TYPE_SHARED_PRESENT_SURFACE_CAPABILITIES_KHR:
   6679         {
   6680             deepcopy_VkSharedPresentSurfaceCapabilitiesKHR(pool, reinterpret_cast<const VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension), reinterpret_cast<VkSharedPresentSurfaceCapabilitiesKHR*>(structExtension_out));
   6681             break;
   6682         }
   6683 #endif
   6684 #ifdef VK_KHR_external_fence_win32
   6685         case VK_STRUCTURE_TYPE_EXPORT_FENCE_WIN32_HANDLE_INFO_KHR:
   6686         {
   6687             deepcopy_VkExportFenceWin32HandleInfoKHR(pool, reinterpret_cast<const VkExportFenceWin32HandleInfoKHR*>(structExtension), reinterpret_cast<VkExportFenceWin32HandleInfoKHR*>(structExtension_out));
   6688             break;
   6689         }
   6690 #endif
   6691 #ifdef VK_KHR_image_format_list
   6692         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO_KHR:
   6693         {
   6694             deepcopy_VkImageFormatListCreateInfoKHR(pool, reinterpret_cast<const VkImageFormatListCreateInfoKHR*>(structExtension), reinterpret_cast<VkImageFormatListCreateInfoKHR*>(structExtension_out));
   6695             break;
   6696         }
   6697 #endif
   6698 #ifdef VK_KHR_8bit_storage
   6699         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_8BIT_STORAGE_FEATURES_KHR:
   6700         {
   6701             deepcopy_VkPhysicalDevice8BitStorageFeaturesKHR(pool, reinterpret_cast<const VkPhysicalDevice8BitStorageFeaturesKHR*>(structExtension), reinterpret_cast<VkPhysicalDevice8BitStorageFeaturesKHR*>(structExtension_out));
   6702             break;
   6703         }
   6704 #endif
   6705 #ifdef VK_ANDROID_native_buffer
   6706         case VK_STRUCTURE_TYPE_NATIVE_BUFFER_ANDROID:
   6707         {
   6708             deepcopy_VkNativeBufferANDROID(pool, reinterpret_cast<const VkNativeBufferANDROID*>(structExtension), reinterpret_cast<VkNativeBufferANDROID*>(structExtension_out));
   6709             break;
   6710         }
   6711 #endif
   6712 #ifdef VK_EXT_debug_report
   6713         case VK_STRUCTURE_TYPE_DEBUG_REPORT_CALLBACK_CREATE_INFO_EXT:
   6714         {
   6715             deepcopy_VkDebugReportCallbackCreateInfoEXT(pool, reinterpret_cast<const VkDebugReportCallbackCreateInfoEXT*>(structExtension), reinterpret_cast<VkDebugReportCallbackCreateInfoEXT*>(structExtension_out));
   6716             break;
   6717         }
   6718 #endif
   6719 #ifdef VK_AMD_rasterization_order
   6720         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_STATE_RASTERIZATION_ORDER_AMD:
   6721         {
   6722             deepcopy_VkPipelineRasterizationStateRasterizationOrderAMD(pool, reinterpret_cast<const VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension), reinterpret_cast<VkPipelineRasterizationStateRasterizationOrderAMD*>(structExtension_out));
   6723             break;
   6724         }
   6725 #endif
   6726 #ifdef VK_NV_dedicated_allocation
   6727         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_IMAGE_CREATE_INFO_NV:
   6728         {
   6729             deepcopy_VkDedicatedAllocationImageCreateInfoNV(pool, reinterpret_cast<const VkDedicatedAllocationImageCreateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationImageCreateInfoNV*>(structExtension_out));
   6730             break;
   6731         }
   6732         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_BUFFER_CREATE_INFO_NV:
   6733         {
   6734             deepcopy_VkDedicatedAllocationBufferCreateInfoNV(pool, reinterpret_cast<const VkDedicatedAllocationBufferCreateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationBufferCreateInfoNV*>(structExtension_out));
   6735             break;
   6736         }
   6737         case VK_STRUCTURE_TYPE_DEDICATED_ALLOCATION_MEMORY_ALLOCATE_INFO_NV:
   6738         {
   6739             deepcopy_VkDedicatedAllocationMemoryAllocateInfoNV(pool, reinterpret_cast<const VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension), reinterpret_cast<VkDedicatedAllocationMemoryAllocateInfoNV*>(structExtension_out));
   6740             break;
   6741         }
   6742 #endif
   6743 #ifdef VK_AMD_texture_gather_bias_lod
   6744         case VK_STRUCTURE_TYPE_TEXTURE_LOD_GATHER_FORMAT_PROPERTIES_AMD:
   6745         {
   6746             deepcopy_VkTextureLODGatherFormatPropertiesAMD(pool, reinterpret_cast<const VkTextureLODGatherFormatPropertiesAMD*>(structExtension), reinterpret_cast<VkTextureLODGatherFormatPropertiesAMD*>(structExtension_out));
   6747             break;
   6748         }
   6749 #endif
   6750 #ifdef VK_NV_external_memory
   6751         case VK_STRUCTURE_TYPE_EXTERNAL_MEMORY_IMAGE_CREATE_INFO_NV:
   6752         {
   6753             deepcopy_VkExternalMemoryImageCreateInfoNV(pool, reinterpret_cast<const VkExternalMemoryImageCreateInfoNV*>(structExtension), reinterpret_cast<VkExternalMemoryImageCreateInfoNV*>(structExtension_out));
   6754             break;
   6755         }
   6756         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO_NV:
   6757         {
   6758             deepcopy_VkExportMemoryAllocateInfoNV(pool, reinterpret_cast<const VkExportMemoryAllocateInfoNV*>(structExtension), reinterpret_cast<VkExportMemoryAllocateInfoNV*>(structExtension_out));
   6759             break;
   6760         }
   6761 #endif
   6762 #ifdef VK_NV_external_memory_win32
   6763         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_WIN32_HANDLE_INFO_NV:
   6764         {
   6765             deepcopy_VkImportMemoryWin32HandleInfoNV(pool, reinterpret_cast<const VkImportMemoryWin32HandleInfoNV*>(structExtension), reinterpret_cast<VkImportMemoryWin32HandleInfoNV*>(structExtension_out));
   6766             break;
   6767         }
   6768         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_WIN32_HANDLE_INFO_NV:
   6769         {
   6770             deepcopy_VkExportMemoryWin32HandleInfoNV(pool, reinterpret_cast<const VkExportMemoryWin32HandleInfoNV*>(structExtension), reinterpret_cast<VkExportMemoryWin32HandleInfoNV*>(structExtension_out));
   6771             break;
   6772         }
   6773 #endif
   6774 #ifdef VK_NV_win32_keyed_mutex
   6775         case VK_STRUCTURE_TYPE_WIN32_KEYED_MUTEX_ACQUIRE_RELEASE_INFO_NV:
   6776         {
   6777             deepcopy_VkWin32KeyedMutexAcquireReleaseInfoNV(pool, reinterpret_cast<const VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension), reinterpret_cast<VkWin32KeyedMutexAcquireReleaseInfoNV*>(structExtension_out));
   6778             break;
   6779         }
   6780 #endif
   6781 #ifdef VK_EXT_validation_flags
   6782         case VK_STRUCTURE_TYPE_VALIDATION_FLAGS_EXT:
   6783         {
   6784             deepcopy_VkValidationFlagsEXT(pool, reinterpret_cast<const VkValidationFlagsEXT*>(structExtension), reinterpret_cast<VkValidationFlagsEXT*>(structExtension_out));
   6785             break;
   6786         }
   6787 #endif
   6788 #ifdef VK_EXT_conditional_rendering
   6789         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONDITIONAL_RENDERING_FEATURES_EXT:
   6790         {
   6791             deepcopy_VkPhysicalDeviceConditionalRenderingFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceConditionalRenderingFeaturesEXT*>(structExtension_out));
   6792             break;
   6793         }
   6794         case VK_STRUCTURE_TYPE_COMMAND_BUFFER_INHERITANCE_CONDITIONAL_RENDERING_INFO_EXT:
   6795         {
   6796             deepcopy_VkCommandBufferInheritanceConditionalRenderingInfoEXT(pool, reinterpret_cast<const VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension), reinterpret_cast<VkCommandBufferInheritanceConditionalRenderingInfoEXT*>(structExtension_out));
   6797             break;
   6798         }
   6799 #endif
   6800 #ifdef VK_NV_clip_space_w_scaling
   6801         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_W_SCALING_STATE_CREATE_INFO_NV:
   6802         {
   6803             deepcopy_VkPipelineViewportWScalingStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportWScalingStateCreateInfoNV*>(structExtension_out));
   6804             break;
   6805         }
   6806 #endif
   6807 #ifdef VK_EXT_display_control
   6808         case VK_STRUCTURE_TYPE_SWAPCHAIN_COUNTER_CREATE_INFO_EXT:
   6809         {
   6810             deepcopy_VkSwapchainCounterCreateInfoEXT(pool, reinterpret_cast<const VkSwapchainCounterCreateInfoEXT*>(structExtension), reinterpret_cast<VkSwapchainCounterCreateInfoEXT*>(structExtension_out));
   6811             break;
   6812         }
   6813 #endif
   6814 #ifdef VK_GOOGLE_display_timing
   6815         case VK_STRUCTURE_TYPE_PRESENT_TIMES_INFO_GOOGLE:
   6816         {
   6817             deepcopy_VkPresentTimesInfoGOOGLE(pool, reinterpret_cast<const VkPresentTimesInfoGOOGLE*>(structExtension), reinterpret_cast<VkPresentTimesInfoGOOGLE*>(structExtension_out));
   6818             break;
   6819         }
   6820 #endif
   6821 #ifdef VK_NVX_multiview_per_view_attributes
   6822         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_MULTIVIEW_PER_VIEW_ATTRIBUTES_PROPERTIES_NVX:
   6823         {
   6824             deepcopy_VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX(pool, reinterpret_cast<const VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension), reinterpret_cast<VkPhysicalDeviceMultiviewPerViewAttributesPropertiesNVX*>(structExtension_out));
   6825             break;
   6826         }
   6827 #endif
   6828 #ifdef VK_NV_viewport_swizzle
   6829         case VK_STRUCTURE_TYPE_PIPELINE_VIEWPORT_SWIZZLE_STATE_CREATE_INFO_NV:
   6830         {
   6831             deepcopy_VkPipelineViewportSwizzleStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineViewportSwizzleStateCreateInfoNV*>(structExtension_out));
   6832             break;
   6833         }
   6834 #endif
   6835 #ifdef VK_EXT_discard_rectangles
   6836         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DISCARD_RECTANGLE_PROPERTIES_EXT:
   6837         {
   6838             deepcopy_VkPhysicalDeviceDiscardRectanglePropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDiscardRectanglePropertiesEXT*>(structExtension_out));
   6839             break;
   6840         }
   6841         case VK_STRUCTURE_TYPE_PIPELINE_DISCARD_RECTANGLE_STATE_CREATE_INFO_EXT:
   6842         {
   6843             deepcopy_VkPipelineDiscardRectangleStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineDiscardRectangleStateCreateInfoEXT*>(structExtension_out));
   6844             break;
   6845         }
   6846 #endif
   6847 #ifdef VK_EXT_conservative_rasterization
   6848         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_CONSERVATIVE_RASTERIZATION_PROPERTIES_EXT:
   6849         {
   6850             deepcopy_VkPhysicalDeviceConservativeRasterizationPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceConservativeRasterizationPropertiesEXT*>(structExtension_out));
   6851             break;
   6852         }
   6853         case VK_STRUCTURE_TYPE_PIPELINE_RASTERIZATION_CONSERVATIVE_STATE_CREATE_INFO_EXT:
   6854         {
   6855             deepcopy_VkPipelineRasterizationConservativeStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineRasterizationConservativeStateCreateInfoEXT*>(structExtension_out));
   6856             break;
   6857         }
   6858 #endif
   6859 #ifdef VK_EXT_debug_utils
   6860         case VK_STRUCTURE_TYPE_DEBUG_UTILS_MESSENGER_CREATE_INFO_EXT:
   6861         {
   6862             deepcopy_VkDebugUtilsMessengerCreateInfoEXT(pool, reinterpret_cast<const VkDebugUtilsMessengerCreateInfoEXT*>(structExtension), reinterpret_cast<VkDebugUtilsMessengerCreateInfoEXT*>(structExtension_out));
   6863             break;
   6864         }
   6865 #endif
   6866 #ifdef VK_ANDROID_external_memory_android_hardware_buffer
   6867         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_USAGE_ANDROID:
   6868         {
   6869             deepcopy_VkAndroidHardwareBufferUsageANDROID(pool, reinterpret_cast<const VkAndroidHardwareBufferUsageANDROID*>(structExtension), reinterpret_cast<VkAndroidHardwareBufferUsageANDROID*>(structExtension_out));
   6870             break;
   6871         }
   6872         case VK_STRUCTURE_TYPE_ANDROID_HARDWARE_BUFFER_FORMAT_PROPERTIES_ANDROID:
   6873         {
   6874             deepcopy_VkAndroidHardwareBufferFormatPropertiesANDROID(pool, reinterpret_cast<const VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension), reinterpret_cast<VkAndroidHardwareBufferFormatPropertiesANDROID*>(structExtension_out));
   6875             break;
   6876         }
   6877         case VK_STRUCTURE_TYPE_IMPORT_ANDROID_HARDWARE_BUFFER_INFO_ANDROID:
   6878         {
   6879             deepcopy_VkImportAndroidHardwareBufferInfoANDROID(pool, reinterpret_cast<const VkImportAndroidHardwareBufferInfoANDROID*>(structExtension), reinterpret_cast<VkImportAndroidHardwareBufferInfoANDROID*>(structExtension_out));
   6880             break;
   6881         }
   6882         case VK_STRUCTURE_TYPE_EXTERNAL_FORMAT_ANDROID:
   6883         {
   6884             deepcopy_VkExternalFormatANDROID(pool, reinterpret_cast<const VkExternalFormatANDROID*>(structExtension), reinterpret_cast<VkExternalFormatANDROID*>(structExtension_out));
   6885             break;
   6886         }
   6887 #endif
   6888 #ifdef VK_EXT_sampler_filter_minmax
   6889         case VK_STRUCTURE_TYPE_SAMPLER_REDUCTION_MODE_CREATE_INFO_EXT:
   6890         {
   6891             deepcopy_VkSamplerReductionModeCreateInfoEXT(pool, reinterpret_cast<const VkSamplerReductionModeCreateInfoEXT*>(structExtension), reinterpret_cast<VkSamplerReductionModeCreateInfoEXT*>(structExtension_out));
   6892             break;
   6893         }
   6894         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLER_FILTER_MINMAX_PROPERTIES_EXT:
   6895         {
   6896             deepcopy_VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSamplerFilterMinmaxPropertiesEXT*>(structExtension_out));
   6897             break;
   6898         }
   6899 #endif
   6900 #ifdef VK_EXT_sample_locations
   6901         case VK_STRUCTURE_TYPE_SAMPLE_LOCATIONS_INFO_EXT:
   6902         {
   6903             deepcopy_VkSampleLocationsInfoEXT(pool, reinterpret_cast<const VkSampleLocationsInfoEXT*>(structExtension), reinterpret_cast<VkSampleLocationsInfoEXT*>(structExtension_out));
   6904             break;
   6905         }
   6906         case VK_STRUCTURE_TYPE_RENDER_PASS_SAMPLE_LOCATIONS_BEGIN_INFO_EXT:
   6907         {
   6908             deepcopy_VkRenderPassSampleLocationsBeginInfoEXT(pool, reinterpret_cast<const VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension), reinterpret_cast<VkRenderPassSampleLocationsBeginInfoEXT*>(structExtension_out));
   6909             break;
   6910         }
   6911         case VK_STRUCTURE_TYPE_PIPELINE_SAMPLE_LOCATIONS_STATE_CREATE_INFO_EXT:
   6912         {
   6913             deepcopy_VkPipelineSampleLocationsStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineSampleLocationsStateCreateInfoEXT*>(structExtension_out));
   6914             break;
   6915         }
   6916         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SAMPLE_LOCATIONS_PROPERTIES_EXT:
   6917         {
   6918             deepcopy_VkPhysicalDeviceSampleLocationsPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceSampleLocationsPropertiesEXT*>(structExtension_out));
   6919             break;
   6920         }
   6921 #endif
   6922 #ifdef VK_EXT_blend_operation_advanced
   6923         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_FEATURES_EXT:
   6924         {
   6925             deepcopy_VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedFeaturesEXT*>(structExtension_out));
   6926             break;
   6927         }
   6928         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_BLEND_OPERATION_ADVANCED_PROPERTIES_EXT:
   6929         {
   6930             deepcopy_VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceBlendOperationAdvancedPropertiesEXT*>(structExtension_out));
   6931             break;
   6932         }
   6933         case VK_STRUCTURE_TYPE_PIPELINE_COLOR_BLEND_ADVANCED_STATE_CREATE_INFO_EXT:
   6934         {
   6935             deepcopy_VkPipelineColorBlendAdvancedStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineColorBlendAdvancedStateCreateInfoEXT*>(structExtension_out));
   6936             break;
   6937         }
   6938 #endif
   6939 #ifdef VK_NV_fragment_coverage_to_color
   6940         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_TO_COLOR_STATE_CREATE_INFO_NV:
   6941         {
   6942             deepcopy_VkPipelineCoverageToColorStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageToColorStateCreateInfoNV*>(structExtension_out));
   6943             break;
   6944         }
   6945 #endif
   6946 #ifdef VK_NV_framebuffer_mixed_samples
   6947         case VK_STRUCTURE_TYPE_PIPELINE_COVERAGE_MODULATION_STATE_CREATE_INFO_NV:
   6948         {
   6949             deepcopy_VkPipelineCoverageModulationStateCreateInfoNV(pool, reinterpret_cast<const VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension), reinterpret_cast<VkPipelineCoverageModulationStateCreateInfoNV*>(structExtension_out));
   6950             break;
   6951         }
   6952 #endif
   6953 #ifdef VK_EXT_validation_cache
   6954         case VK_STRUCTURE_TYPE_SHADER_MODULE_VALIDATION_CACHE_CREATE_INFO_EXT:
   6955         {
   6956             deepcopy_VkShaderModuleValidationCacheCreateInfoEXT(pool, reinterpret_cast<const VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension), reinterpret_cast<VkShaderModuleValidationCacheCreateInfoEXT*>(structExtension_out));
   6957             break;
   6958         }
   6959 #endif
   6960 #ifdef VK_EXT_descriptor_indexing
   6961         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_LAYOUT_BINDING_FLAGS_CREATE_INFO_EXT:
   6962         {
   6963             deepcopy_VkDescriptorSetLayoutBindingFlagsCreateInfoEXT(pool, reinterpret_cast<const VkDescriptorSetLayoutBindingFlagsCreateInfoEXT*>(structExtension), reinterpret_cast<VkDescriptorSetLayoutBindingFlagsCreateInfoEXT*>(structExtension_out));
   6964             break;
   6965         }
   6966         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_FEATURES_EXT:
   6967         {
   6968             deepcopy_VkPhysicalDeviceDescriptorIndexingFeaturesEXT(pool, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingFeaturesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDescriptorIndexingFeaturesEXT*>(structExtension_out));
   6969             break;
   6970         }
   6971         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_DESCRIPTOR_INDEXING_PROPERTIES_EXT:
   6972         {
   6973             deepcopy_VkPhysicalDeviceDescriptorIndexingPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceDescriptorIndexingPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceDescriptorIndexingPropertiesEXT*>(structExtension_out));
   6974             break;
   6975         }
   6976         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO_EXT:
   6977         {
   6978             deepcopy_VkDescriptorSetVariableDescriptorCountAllocateInfoEXT(pool, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountAllocateInfoEXT*>(structExtension), reinterpret_cast<VkDescriptorSetVariableDescriptorCountAllocateInfoEXT*>(structExtension_out));
   6979             break;
   6980         }
   6981         case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_LAYOUT_SUPPORT_EXT:
   6982         {
   6983             deepcopy_VkDescriptorSetVariableDescriptorCountLayoutSupportEXT(pool, reinterpret_cast<const VkDescriptorSetVariableDescriptorCountLayoutSupportEXT*>(structExtension), reinterpret_cast<VkDescriptorSetVariableDescriptorCountLayoutSupportEXT*>(structExtension_out));
   6984             break;
   6985         }
   6986 #endif
   6987 #ifdef VK_EXT_global_priority
   6988         case VK_STRUCTURE_TYPE_DEVICE_QUEUE_GLOBAL_PRIORITY_CREATE_INFO_EXT:
   6989         {
   6990             deepcopy_VkDeviceQueueGlobalPriorityCreateInfoEXT(pool, reinterpret_cast<const VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension), reinterpret_cast<VkDeviceQueueGlobalPriorityCreateInfoEXT*>(structExtension_out));
   6991             break;
   6992         }
   6993 #endif
   6994 #ifdef VK_EXT_external_memory_host
   6995         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_HOST_POINTER_INFO_EXT:
   6996         {
   6997             deepcopy_VkImportMemoryHostPointerInfoEXT(pool, reinterpret_cast<const VkImportMemoryHostPointerInfoEXT*>(structExtension), reinterpret_cast<VkImportMemoryHostPointerInfoEXT*>(structExtension_out));
   6998             break;
   6999         }
   7000         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_EXTERNAL_MEMORY_HOST_PROPERTIES_EXT:
   7001         {
   7002             deepcopy_VkPhysicalDeviceExternalMemoryHostPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceExternalMemoryHostPropertiesEXT*>(structExtension_out));
   7003             break;
   7004         }
   7005 #endif
   7006 #ifdef VK_AMD_shader_core_properties
   7007         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_SHADER_CORE_PROPERTIES_AMD:
   7008         {
   7009             deepcopy_VkPhysicalDeviceShaderCorePropertiesAMD(pool, reinterpret_cast<const VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension), reinterpret_cast<VkPhysicalDeviceShaderCorePropertiesAMD*>(structExtension_out));
   7010             break;
   7011         }
   7012 #endif
   7013 #ifdef VK_EXT_vertex_attribute_divisor
   7014         case VK_STRUCTURE_TYPE_PHYSICAL_DEVICE_VERTEX_ATTRIBUTE_DIVISOR_PROPERTIES_EXT:
   7015         {
   7016             deepcopy_VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT(pool, reinterpret_cast<const VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension), reinterpret_cast<VkPhysicalDeviceVertexAttributeDivisorPropertiesEXT*>(structExtension_out));
   7017             break;
   7018         }
   7019         case VK_STRUCTURE_TYPE_PIPELINE_VERTEX_INPUT_DIVISOR_STATE_CREATE_INFO_EXT:
   7020         {
   7021             deepcopy_VkPipelineVertexInputDivisorStateCreateInfoEXT(pool, reinterpret_cast<const VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension), reinterpret_cast<VkPipelineVertexInputDivisorStateCreateInfoEXT*>(structExtension_out));
   7022             break;
   7023         }
   7024 #endif
   7025 #ifdef VK_NV_device_diagnostic_checkpoints
   7026         case VK_STRUCTURE_TYPE_QUEUE_FAMILY_CHECKPOINT_PROPERTIES_NV:
   7027         {
   7028             deepcopy_VkQueueFamilyCheckpointPropertiesNV(pool, reinterpret_cast<const VkQueueFamilyCheckpointPropertiesNV*>(structExtension), reinterpret_cast<VkQueueFamilyCheckpointPropertiesNV*>(structExtension_out));
   7029             break;
   7030         }
   7031 #endif
   7032 #ifdef VK_GOOGLE_color_buffer
   7033         case VK_STRUCTURE_TYPE_IMPORT_COLOR_BUFFER_GOOGLE:
   7034         {
   7035             deepcopy_VkImportColorBufferGOOGLE(pool, reinterpret_cast<const VkImportColorBufferGOOGLE*>(structExtension), reinterpret_cast<VkImportColorBufferGOOGLE*>(structExtension_out));
   7036             break;
   7037         }
   7038         case VK_STRUCTURE_TYPE_IMPORT_PHYSICAL_ADDRESS_GOOGLE:
   7039         {
   7040             deepcopy_VkImportPhysicalAddressGOOGLE(pool, reinterpret_cast<const VkImportPhysicalAddressGOOGLE*>(structExtension), reinterpret_cast<VkImportPhysicalAddressGOOGLE*>(structExtension_out));
   7041             break;
   7042         }
   7043 #endif
   7044         default:
   7045         {
   7046             return;
   7047         }
   7048     }
   7049 }
   7050 
   7051 
   7052 } // namespace goldfish_vk
   7053