Home | History | Annotate | Line # | Download | only in venus-protocol
      1 /* This file is generated by venus-protocol.  See vn_protocol_driver.h. */
      2 
      3 /*
      4  * Copyright 2020 Google LLC
      5  * SPDX-License-Identifier: MIT
      6  */
      7 
      8 #ifndef VN_PROTOCOL_DRIVER_DEVICE_MEMORY_H
      9 #define VN_PROTOCOL_DRIVER_DEVICE_MEMORY_H
     10 
     11 #include "vn_instance.h"
     12 #include "vn_protocol_driver_structs.h"
     13 
     14 /*
     15  * These structs/unions/commands are not included
     16  *
     17  *   VkImportMemoryFdInfoKHR
     18  *   vkMapMemory
     19  */
     20 
     21 /* struct VkExportMemoryAllocateInfo chain */
     22 
     23 static inline size_t
     24 vn_sizeof_VkExportMemoryAllocateInfo_pnext(const void *val)
     25 {
     26     /* no known/supported struct */
     27     return vn_sizeof_simple_pointer(NULL);
     28 }
     29 
     30 static inline size_t
     31 vn_sizeof_VkExportMemoryAllocateInfo_self(const VkExportMemoryAllocateInfo *val)
     32 {
     33     size_t size = 0;
     34     /* skip val->{sType,pNext} */
     35     size += vn_sizeof_VkFlags(&val->handleTypes);
     36     return size;
     37 }
     38 
     39 static inline size_t
     40 vn_sizeof_VkExportMemoryAllocateInfo(const VkExportMemoryAllocateInfo *val)
     41 {
     42     size_t size = 0;
     43 
     44     size += vn_sizeof_VkStructureType(&val->sType);
     45     size += vn_sizeof_VkExportMemoryAllocateInfo_pnext(val->pNext);
     46     size += vn_sizeof_VkExportMemoryAllocateInfo_self(val);
     47 
     48     return size;
     49 }
     50 
     51 static inline void
     52 vn_encode_VkExportMemoryAllocateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
     53 {
     54     /* no known/supported struct */
     55     vn_encode_simple_pointer(enc, NULL);
     56 }
     57 
     58 static inline void
     59 vn_encode_VkExportMemoryAllocateInfo_self(struct vn_cs_encoder *enc, const VkExportMemoryAllocateInfo *val)
     60 {
     61     /* skip val->{sType,pNext} */
     62     vn_encode_VkFlags(enc, &val->handleTypes);
     63 }
     64 
     65 static inline void
     66 vn_encode_VkExportMemoryAllocateInfo(struct vn_cs_encoder *enc, const VkExportMemoryAllocateInfo *val)
     67 {
     68     assert(val->sType == VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO);
     69     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO });
     70     vn_encode_VkExportMemoryAllocateInfo_pnext(enc, val->pNext);
     71     vn_encode_VkExportMemoryAllocateInfo_self(enc, val);
     72 }
     73 
     74 /* struct VkMemoryAllocateFlagsInfo chain */
     75 
     76 static inline size_t
     77 vn_sizeof_VkMemoryAllocateFlagsInfo_pnext(const void *val)
     78 {
     79     /* no known/supported struct */
     80     return vn_sizeof_simple_pointer(NULL);
     81 }
     82 
     83 static inline size_t
     84 vn_sizeof_VkMemoryAllocateFlagsInfo_self(const VkMemoryAllocateFlagsInfo *val)
     85 {
     86     size_t size = 0;
     87     /* skip val->{sType,pNext} */
     88     size += vn_sizeof_VkFlags(&val->flags);
     89     size += vn_sizeof_uint32_t(&val->deviceMask);
     90     return size;
     91 }
     92 
     93 static inline size_t
     94 vn_sizeof_VkMemoryAllocateFlagsInfo(const VkMemoryAllocateFlagsInfo *val)
     95 {
     96     size_t size = 0;
     97 
     98     size += vn_sizeof_VkStructureType(&val->sType);
     99     size += vn_sizeof_VkMemoryAllocateFlagsInfo_pnext(val->pNext);
    100     size += vn_sizeof_VkMemoryAllocateFlagsInfo_self(val);
    101 
    102     return size;
    103 }
    104 
    105 static inline void
    106 vn_encode_VkMemoryAllocateFlagsInfo_pnext(struct vn_cs_encoder *enc, const void *val)
    107 {
    108     /* no known/supported struct */
    109     vn_encode_simple_pointer(enc, NULL);
    110 }
    111 
    112 static inline void
    113 vn_encode_VkMemoryAllocateFlagsInfo_self(struct vn_cs_encoder *enc, const VkMemoryAllocateFlagsInfo *val)
    114 {
    115     /* skip val->{sType,pNext} */
    116     vn_encode_VkFlags(enc, &val->flags);
    117     vn_encode_uint32_t(enc, &val->deviceMask);
    118 }
    119 
    120 static inline void
    121 vn_encode_VkMemoryAllocateFlagsInfo(struct vn_cs_encoder *enc, const VkMemoryAllocateFlagsInfo *val)
    122 {
    123     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO);
    124     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO });
    125     vn_encode_VkMemoryAllocateFlagsInfo_pnext(enc, val->pNext);
    126     vn_encode_VkMemoryAllocateFlagsInfo_self(enc, val);
    127 }
    128 
    129 /* struct VkMemoryDedicatedAllocateInfo chain */
    130 
    131 static inline size_t
    132 vn_sizeof_VkMemoryDedicatedAllocateInfo_pnext(const void *val)
    133 {
    134     /* no known/supported struct */
    135     return vn_sizeof_simple_pointer(NULL);
    136 }
    137 
    138 static inline size_t
    139 vn_sizeof_VkMemoryDedicatedAllocateInfo_self(const VkMemoryDedicatedAllocateInfo *val)
    140 {
    141     size_t size = 0;
    142     /* skip val->{sType,pNext} */
    143     size += vn_sizeof_VkImage(&val->image);
    144     size += vn_sizeof_VkBuffer(&val->buffer);
    145     return size;
    146 }
    147 
    148 static inline size_t
    149 vn_sizeof_VkMemoryDedicatedAllocateInfo(const VkMemoryDedicatedAllocateInfo *val)
    150 {
    151     size_t size = 0;
    152 
    153     size += vn_sizeof_VkStructureType(&val->sType);
    154     size += vn_sizeof_VkMemoryDedicatedAllocateInfo_pnext(val->pNext);
    155     size += vn_sizeof_VkMemoryDedicatedAllocateInfo_self(val);
    156 
    157     return size;
    158 }
    159 
    160 static inline void
    161 vn_encode_VkMemoryDedicatedAllocateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
    162 {
    163     /* no known/supported struct */
    164     vn_encode_simple_pointer(enc, NULL);
    165 }
    166 
    167 static inline void
    168 vn_encode_VkMemoryDedicatedAllocateInfo_self(struct vn_cs_encoder *enc, const VkMemoryDedicatedAllocateInfo *val)
    169 {
    170     /* skip val->{sType,pNext} */
    171     vn_encode_VkImage(enc, &val->image);
    172     vn_encode_VkBuffer(enc, &val->buffer);
    173 }
    174 
    175 static inline void
    176 vn_encode_VkMemoryDedicatedAllocateInfo(struct vn_cs_encoder *enc, const VkMemoryDedicatedAllocateInfo *val)
    177 {
    178     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO);
    179     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO });
    180     vn_encode_VkMemoryDedicatedAllocateInfo_pnext(enc, val->pNext);
    181     vn_encode_VkMemoryDedicatedAllocateInfo_self(enc, val);
    182 }
    183 
    184 /* struct VkMemoryOpaqueCaptureAddressAllocateInfo chain */
    185 
    186 static inline size_t
    187 vn_sizeof_VkMemoryOpaqueCaptureAddressAllocateInfo_pnext(const void *val)
    188 {
    189     /* no known/supported struct */
    190     return vn_sizeof_simple_pointer(NULL);
    191 }
    192 
    193 static inline size_t
    194 vn_sizeof_VkMemoryOpaqueCaptureAddressAllocateInfo_self(const VkMemoryOpaqueCaptureAddressAllocateInfo *val)
    195 {
    196     size_t size = 0;
    197     /* skip val->{sType,pNext} */
    198     size += vn_sizeof_uint64_t(&val->opaqueCaptureAddress);
    199     return size;
    200 }
    201 
    202 static inline size_t
    203 vn_sizeof_VkMemoryOpaqueCaptureAddressAllocateInfo(const VkMemoryOpaqueCaptureAddressAllocateInfo *val)
    204 {
    205     size_t size = 0;
    206 
    207     size += vn_sizeof_VkStructureType(&val->sType);
    208     size += vn_sizeof_VkMemoryOpaqueCaptureAddressAllocateInfo_pnext(val->pNext);
    209     size += vn_sizeof_VkMemoryOpaqueCaptureAddressAllocateInfo_self(val);
    210 
    211     return size;
    212 }
    213 
    214 static inline void
    215 vn_encode_VkMemoryOpaqueCaptureAddressAllocateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
    216 {
    217     /* no known/supported struct */
    218     vn_encode_simple_pointer(enc, NULL);
    219 }
    220 
    221 static inline void
    222 vn_encode_VkMemoryOpaqueCaptureAddressAllocateInfo_self(struct vn_cs_encoder *enc, const VkMemoryOpaqueCaptureAddressAllocateInfo *val)
    223 {
    224     /* skip val->{sType,pNext} */
    225     vn_encode_uint64_t(enc, &val->opaqueCaptureAddress);
    226 }
    227 
    228 static inline void
    229 vn_encode_VkMemoryOpaqueCaptureAddressAllocateInfo(struct vn_cs_encoder *enc, const VkMemoryOpaqueCaptureAddressAllocateInfo *val)
    230 {
    231     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO);
    232     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO });
    233     vn_encode_VkMemoryOpaqueCaptureAddressAllocateInfo_pnext(enc, val->pNext);
    234     vn_encode_VkMemoryOpaqueCaptureAddressAllocateInfo_self(enc, val);
    235 }
    236 
    237 /* struct VkImportMemoryResourceInfoMESA chain */
    238 
    239 static inline size_t
    240 vn_sizeof_VkImportMemoryResourceInfoMESA_pnext(const void *val)
    241 {
    242     /* no known/supported struct */
    243     return vn_sizeof_simple_pointer(NULL);
    244 }
    245 
    246 static inline size_t
    247 vn_sizeof_VkImportMemoryResourceInfoMESA_self(const VkImportMemoryResourceInfoMESA *val)
    248 {
    249     size_t size = 0;
    250     /* skip val->{sType,pNext} */
    251     size += vn_sizeof_uint32_t(&val->resourceId);
    252     return size;
    253 }
    254 
    255 static inline size_t
    256 vn_sizeof_VkImportMemoryResourceInfoMESA(const VkImportMemoryResourceInfoMESA *val)
    257 {
    258     size_t size = 0;
    259 
    260     size += vn_sizeof_VkStructureType(&val->sType);
    261     size += vn_sizeof_VkImportMemoryResourceInfoMESA_pnext(val->pNext);
    262     size += vn_sizeof_VkImportMemoryResourceInfoMESA_self(val);
    263 
    264     return size;
    265 }
    266 
    267 static inline void
    268 vn_encode_VkImportMemoryResourceInfoMESA_pnext(struct vn_cs_encoder *enc, const void *val)
    269 {
    270     /* no known/supported struct */
    271     vn_encode_simple_pointer(enc, NULL);
    272 }
    273 
    274 static inline void
    275 vn_encode_VkImportMemoryResourceInfoMESA_self(struct vn_cs_encoder *enc, const VkImportMemoryResourceInfoMESA *val)
    276 {
    277     /* skip val->{sType,pNext} */
    278     vn_encode_uint32_t(enc, &val->resourceId);
    279 }
    280 
    281 static inline void
    282 vn_encode_VkImportMemoryResourceInfoMESA(struct vn_cs_encoder *enc, const VkImportMemoryResourceInfoMESA *val)
    283 {
    284     assert(val->sType == VK_STRUCTURE_TYPE_IMPORT_MEMORY_RESOURCE_INFO_MESA);
    285     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_IMPORT_MEMORY_RESOURCE_INFO_MESA });
    286     vn_encode_VkImportMemoryResourceInfoMESA_pnext(enc, val->pNext);
    287     vn_encode_VkImportMemoryResourceInfoMESA_self(enc, val);
    288 }
    289 
    290 /* struct VkMemoryAllocateInfo chain */
    291 
    292 static inline size_t
    293 vn_sizeof_VkMemoryAllocateInfo_pnext(const void *val)
    294 {
    295     const VkBaseInStructure *pnext = val;
    296     size_t size = 0;
    297 
    298     while (pnext) {
    299         switch ((int32_t)pnext->sType) {
    300         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
    301             size += vn_sizeof_simple_pointer(pnext);
    302             size += vn_sizeof_VkStructureType(&pnext->sType);
    303             size += vn_sizeof_VkMemoryAllocateInfo_pnext(pnext->pNext);
    304             size += vn_sizeof_VkExportMemoryAllocateInfo_self((const VkExportMemoryAllocateInfo *)pnext);
    305             return size;
    306         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
    307             size += vn_sizeof_simple_pointer(pnext);
    308             size += vn_sizeof_VkStructureType(&pnext->sType);
    309             size += vn_sizeof_VkMemoryAllocateInfo_pnext(pnext->pNext);
    310             size += vn_sizeof_VkMemoryAllocateFlagsInfo_self((const VkMemoryAllocateFlagsInfo *)pnext);
    311             return size;
    312         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
    313             size += vn_sizeof_simple_pointer(pnext);
    314             size += vn_sizeof_VkStructureType(&pnext->sType);
    315             size += vn_sizeof_VkMemoryAllocateInfo_pnext(pnext->pNext);
    316             size += vn_sizeof_VkMemoryDedicatedAllocateInfo_self((const VkMemoryDedicatedAllocateInfo *)pnext);
    317             return size;
    318         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
    319             size += vn_sizeof_simple_pointer(pnext);
    320             size += vn_sizeof_VkStructureType(&pnext->sType);
    321             size += vn_sizeof_VkMemoryAllocateInfo_pnext(pnext->pNext);
    322             size += vn_sizeof_VkMemoryOpaqueCaptureAddressAllocateInfo_self((const VkMemoryOpaqueCaptureAddressAllocateInfo *)pnext);
    323             return size;
    324         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_RESOURCE_INFO_MESA:
    325             size += vn_sizeof_simple_pointer(pnext);
    326             size += vn_sizeof_VkStructureType(&pnext->sType);
    327             size += vn_sizeof_VkMemoryAllocateInfo_pnext(pnext->pNext);
    328             size += vn_sizeof_VkImportMemoryResourceInfoMESA_self((const VkImportMemoryResourceInfoMESA *)pnext);
    329             return size;
    330         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
    331         default:
    332             /* ignore unknown/unsupported struct */
    333             break;
    334         }
    335         pnext = pnext->pNext;
    336     }
    337 
    338     return vn_sizeof_simple_pointer(NULL);
    339 }
    340 
    341 static inline size_t
    342 vn_sizeof_VkMemoryAllocateInfo_self(const VkMemoryAllocateInfo *val)
    343 {
    344     size_t size = 0;
    345     /* skip val->{sType,pNext} */
    346     size += vn_sizeof_VkDeviceSize(&val->allocationSize);
    347     size += vn_sizeof_uint32_t(&val->memoryTypeIndex);
    348     return size;
    349 }
    350 
    351 static inline size_t
    352 vn_sizeof_VkMemoryAllocateInfo(const VkMemoryAllocateInfo *val)
    353 {
    354     size_t size = 0;
    355 
    356     size += vn_sizeof_VkStructureType(&val->sType);
    357     size += vn_sizeof_VkMemoryAllocateInfo_pnext(val->pNext);
    358     size += vn_sizeof_VkMemoryAllocateInfo_self(val);
    359 
    360     return size;
    361 }
    362 
    363 static inline void
    364 vn_encode_VkMemoryAllocateInfo_pnext(struct vn_cs_encoder *enc, const void *val)
    365 {
    366     const VkBaseInStructure *pnext = val;
    367 
    368     while (pnext) {
    369         switch ((int32_t)pnext->sType) {
    370         case VK_STRUCTURE_TYPE_EXPORT_MEMORY_ALLOCATE_INFO:
    371             vn_encode_simple_pointer(enc, pnext);
    372             vn_encode_VkStructureType(enc, &pnext->sType);
    373             vn_encode_VkMemoryAllocateInfo_pnext(enc, pnext->pNext);
    374             vn_encode_VkExportMemoryAllocateInfo_self(enc, (const VkExportMemoryAllocateInfo *)pnext);
    375             return;
    376         case VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_FLAGS_INFO:
    377             vn_encode_simple_pointer(enc, pnext);
    378             vn_encode_VkStructureType(enc, &pnext->sType);
    379             vn_encode_VkMemoryAllocateInfo_pnext(enc, pnext->pNext);
    380             vn_encode_VkMemoryAllocateFlagsInfo_self(enc, (const VkMemoryAllocateFlagsInfo *)pnext);
    381             return;
    382         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_ALLOCATE_INFO:
    383             vn_encode_simple_pointer(enc, pnext);
    384             vn_encode_VkStructureType(enc, &pnext->sType);
    385             vn_encode_VkMemoryAllocateInfo_pnext(enc, pnext->pNext);
    386             vn_encode_VkMemoryDedicatedAllocateInfo_self(enc, (const VkMemoryDedicatedAllocateInfo *)pnext);
    387             return;
    388         case VK_STRUCTURE_TYPE_MEMORY_OPAQUE_CAPTURE_ADDRESS_ALLOCATE_INFO:
    389             vn_encode_simple_pointer(enc, pnext);
    390             vn_encode_VkStructureType(enc, &pnext->sType);
    391             vn_encode_VkMemoryAllocateInfo_pnext(enc, pnext->pNext);
    392             vn_encode_VkMemoryOpaqueCaptureAddressAllocateInfo_self(enc, (const VkMemoryOpaqueCaptureAddressAllocateInfo *)pnext);
    393             return;
    394         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_RESOURCE_INFO_MESA:
    395             vn_encode_simple_pointer(enc, pnext);
    396             vn_encode_VkStructureType(enc, &pnext->sType);
    397             vn_encode_VkMemoryAllocateInfo_pnext(enc, pnext->pNext);
    398             vn_encode_VkImportMemoryResourceInfoMESA_self(enc, (const VkImportMemoryResourceInfoMESA *)pnext);
    399             return;
    400         case VK_STRUCTURE_TYPE_IMPORT_MEMORY_FD_INFO_KHR:
    401         default:
    402             /* ignore unknown/unsupported struct */
    403             break;
    404         }
    405         pnext = pnext->pNext;
    406     }
    407 
    408     vn_encode_simple_pointer(enc, NULL);
    409 }
    410 
    411 static inline void
    412 vn_encode_VkMemoryAllocateInfo_self(struct vn_cs_encoder *enc, const VkMemoryAllocateInfo *val)
    413 {
    414     /* skip val->{sType,pNext} */
    415     vn_encode_VkDeviceSize(enc, &val->allocationSize);
    416     vn_encode_uint32_t(enc, &val->memoryTypeIndex);
    417 }
    418 
    419 static inline void
    420 vn_encode_VkMemoryAllocateInfo(struct vn_cs_encoder *enc, const VkMemoryAllocateInfo *val)
    421 {
    422     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO);
    423     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_ALLOCATE_INFO });
    424     vn_encode_VkMemoryAllocateInfo_pnext(enc, val->pNext);
    425     vn_encode_VkMemoryAllocateInfo_self(enc, val);
    426 }
    427 
    428 /* struct VkMappedMemoryRange chain */
    429 
    430 static inline size_t
    431 vn_sizeof_VkMappedMemoryRange_pnext(const void *val)
    432 {
    433     /* no known/supported struct */
    434     return vn_sizeof_simple_pointer(NULL);
    435 }
    436 
    437 static inline size_t
    438 vn_sizeof_VkMappedMemoryRange_self(const VkMappedMemoryRange *val)
    439 {
    440     size_t size = 0;
    441     /* skip val->{sType,pNext} */
    442     size += vn_sizeof_VkDeviceMemory(&val->memory);
    443     size += vn_sizeof_VkDeviceSize(&val->offset);
    444     size += vn_sizeof_VkDeviceSize(&val->size);
    445     return size;
    446 }
    447 
    448 static inline size_t
    449 vn_sizeof_VkMappedMemoryRange(const VkMappedMemoryRange *val)
    450 {
    451     size_t size = 0;
    452 
    453     size += vn_sizeof_VkStructureType(&val->sType);
    454     size += vn_sizeof_VkMappedMemoryRange_pnext(val->pNext);
    455     size += vn_sizeof_VkMappedMemoryRange_self(val);
    456 
    457     return size;
    458 }
    459 
    460 static inline void
    461 vn_encode_VkMappedMemoryRange_pnext(struct vn_cs_encoder *enc, const void *val)
    462 {
    463     /* no known/supported struct */
    464     vn_encode_simple_pointer(enc, NULL);
    465 }
    466 
    467 static inline void
    468 vn_encode_VkMappedMemoryRange_self(struct vn_cs_encoder *enc, const VkMappedMemoryRange *val)
    469 {
    470     /* skip val->{sType,pNext} */
    471     vn_encode_VkDeviceMemory(enc, &val->memory);
    472     vn_encode_VkDeviceSize(enc, &val->offset);
    473     vn_encode_VkDeviceSize(enc, &val->size);
    474 }
    475 
    476 static inline void
    477 vn_encode_VkMappedMemoryRange(struct vn_cs_encoder *enc, const VkMappedMemoryRange *val)
    478 {
    479     assert(val->sType == VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE);
    480     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE });
    481     vn_encode_VkMappedMemoryRange_pnext(enc, val->pNext);
    482     vn_encode_VkMappedMemoryRange_self(enc, val);
    483 }
    484 
    485 static inline void
    486 vn_decode_VkMappedMemoryRange_pnext(struct vn_cs_decoder *dec, const void *val)
    487 {
    488     /* no known/supported struct */
    489     if (vn_decode_simple_pointer(dec))
    490         assert(false);
    491 }
    492 
    493 static inline void
    494 vn_decode_VkMappedMemoryRange_self(struct vn_cs_decoder *dec, VkMappedMemoryRange *val)
    495 {
    496     /* skip val->{sType,pNext} */
    497     vn_decode_VkDeviceMemory(dec, &val->memory);
    498     vn_decode_VkDeviceSize(dec, &val->offset);
    499     vn_decode_VkDeviceSize(dec, &val->size);
    500 }
    501 
    502 static inline void
    503 vn_decode_VkMappedMemoryRange(struct vn_cs_decoder *dec, VkMappedMemoryRange *val)
    504 {
    505     VkStructureType stype;
    506     vn_decode_VkStructureType(dec, &stype);
    507     assert(stype == VK_STRUCTURE_TYPE_MAPPED_MEMORY_RANGE);
    508 
    509     assert(val->sType == stype);
    510     vn_decode_VkMappedMemoryRange_pnext(dec, val->pNext);
    511     vn_decode_VkMappedMemoryRange_self(dec, val);
    512 }
    513 
    514 /* struct VkDeviceMemoryOpaqueCaptureAddressInfo chain */
    515 
    516 static inline size_t
    517 vn_sizeof_VkDeviceMemoryOpaqueCaptureAddressInfo_pnext(const void *val)
    518 {
    519     /* no known/supported struct */
    520     return vn_sizeof_simple_pointer(NULL);
    521 }
    522 
    523 static inline size_t
    524 vn_sizeof_VkDeviceMemoryOpaqueCaptureAddressInfo_self(const VkDeviceMemoryOpaqueCaptureAddressInfo *val)
    525 {
    526     size_t size = 0;
    527     /* skip val->{sType,pNext} */
    528     size += vn_sizeof_VkDeviceMemory(&val->memory);
    529     return size;
    530 }
    531 
    532 static inline size_t
    533 vn_sizeof_VkDeviceMemoryOpaqueCaptureAddressInfo(const VkDeviceMemoryOpaqueCaptureAddressInfo *val)
    534 {
    535     size_t size = 0;
    536 
    537     size += vn_sizeof_VkStructureType(&val->sType);
    538     size += vn_sizeof_VkDeviceMemoryOpaqueCaptureAddressInfo_pnext(val->pNext);
    539     size += vn_sizeof_VkDeviceMemoryOpaqueCaptureAddressInfo_self(val);
    540 
    541     return size;
    542 }
    543 
    544 static inline void
    545 vn_encode_VkDeviceMemoryOpaqueCaptureAddressInfo_pnext(struct vn_cs_encoder *enc, const void *val)
    546 {
    547     /* no known/supported struct */
    548     vn_encode_simple_pointer(enc, NULL);
    549 }
    550 
    551 static inline void
    552 vn_encode_VkDeviceMemoryOpaqueCaptureAddressInfo_self(struct vn_cs_encoder *enc, const VkDeviceMemoryOpaqueCaptureAddressInfo *val)
    553 {
    554     /* skip val->{sType,pNext} */
    555     vn_encode_VkDeviceMemory(enc, &val->memory);
    556 }
    557 
    558 static inline void
    559 vn_encode_VkDeviceMemoryOpaqueCaptureAddressInfo(struct vn_cs_encoder *enc, const VkDeviceMemoryOpaqueCaptureAddressInfo *val)
    560 {
    561     assert(val->sType == VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO);
    562     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO });
    563     vn_encode_VkDeviceMemoryOpaqueCaptureAddressInfo_pnext(enc, val->pNext);
    564     vn_encode_VkDeviceMemoryOpaqueCaptureAddressInfo_self(enc, val);
    565 }
    566 
    567 static inline void
    568 vn_decode_VkDeviceMemoryOpaqueCaptureAddressInfo_pnext(struct vn_cs_decoder *dec, const void *val)
    569 {
    570     /* no known/supported struct */
    571     if (vn_decode_simple_pointer(dec))
    572         assert(false);
    573 }
    574 
    575 static inline void
    576 vn_decode_VkDeviceMemoryOpaqueCaptureAddressInfo_self(struct vn_cs_decoder *dec, VkDeviceMemoryOpaqueCaptureAddressInfo *val)
    577 {
    578     /* skip val->{sType,pNext} */
    579     vn_decode_VkDeviceMemory(dec, &val->memory);
    580 }
    581 
    582 static inline void
    583 vn_decode_VkDeviceMemoryOpaqueCaptureAddressInfo(struct vn_cs_decoder *dec, VkDeviceMemoryOpaqueCaptureAddressInfo *val)
    584 {
    585     VkStructureType stype;
    586     vn_decode_VkStructureType(dec, &stype);
    587     assert(stype == VK_STRUCTURE_TYPE_DEVICE_MEMORY_OPAQUE_CAPTURE_ADDRESS_INFO);
    588 
    589     assert(val->sType == stype);
    590     vn_decode_VkDeviceMemoryOpaqueCaptureAddressInfo_pnext(dec, val->pNext);
    591     vn_decode_VkDeviceMemoryOpaqueCaptureAddressInfo_self(dec, val);
    592 }
    593 
    594 static inline size_t vn_sizeof_vkAllocateMemory(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
    595 {
    596     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkAllocateMemory_EXT;
    597     const VkFlags cmd_flags = 0;
    598     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    599 
    600     cmd_size += vn_sizeof_VkDevice(&device);
    601     cmd_size += vn_sizeof_simple_pointer(pAllocateInfo);
    602     if (pAllocateInfo)
    603         cmd_size += vn_sizeof_VkMemoryAllocateInfo(pAllocateInfo);
    604     cmd_size += vn_sizeof_simple_pointer(pAllocator);
    605     if (pAllocator)
    606         assert(false);
    607     cmd_size += vn_sizeof_simple_pointer(pMemory);
    608     if (pMemory)
    609         cmd_size += vn_sizeof_VkDeviceMemory(pMemory);
    610 
    611     return cmd_size;
    612 }
    613 
    614 static inline void vn_encode_vkAllocateMemory(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
    615 {
    616     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkAllocateMemory_EXT;
    617 
    618     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    619     vn_encode_VkFlags(enc, &cmd_flags);
    620 
    621     vn_encode_VkDevice(enc, &device);
    622     if (vn_encode_simple_pointer(enc, pAllocateInfo))
    623         vn_encode_VkMemoryAllocateInfo(enc, pAllocateInfo);
    624     if (vn_encode_simple_pointer(enc, pAllocator))
    625         assert(false);
    626     if (vn_encode_simple_pointer(enc, pMemory))
    627         vn_encode_VkDeviceMemory(enc, pMemory);
    628 }
    629 
    630 static inline size_t vn_sizeof_vkAllocateMemory_reply(VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
    631 {
    632     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkAllocateMemory_EXT;
    633     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    634 
    635     VkResult ret;
    636     cmd_size += vn_sizeof_VkResult(&ret);
    637     /* skip device */
    638     /* skip pAllocateInfo */
    639     /* skip pAllocator */
    640     cmd_size += vn_sizeof_simple_pointer(pMemory);
    641     if (pMemory)
    642         cmd_size += vn_sizeof_VkDeviceMemory(pMemory);
    643 
    644     return cmd_size;
    645 }
    646 
    647 static inline VkResult vn_decode_vkAllocateMemory_reply(struct vn_cs_decoder *dec, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
    648 {
    649     VkCommandTypeEXT command_type;
    650     vn_decode_VkCommandTypeEXT(dec, &command_type);
    651     assert(command_type == VK_COMMAND_TYPE_vkAllocateMemory_EXT);
    652 
    653     VkResult ret;
    654     vn_decode_VkResult(dec, &ret);
    655     /* skip device */
    656     /* skip pAllocateInfo */
    657     /* skip pAllocator */
    658     if (vn_decode_simple_pointer(dec)) {
    659         vn_decode_VkDeviceMemory(dec, pMemory);
    660     } else {
    661         pMemory = NULL;
    662     }
    663 
    664     return ret;
    665 }
    666 
    667 static inline size_t vn_sizeof_vkFreeMemory(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator)
    668 {
    669     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFreeMemory_EXT;
    670     const VkFlags cmd_flags = 0;
    671     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    672 
    673     cmd_size += vn_sizeof_VkDevice(&device);
    674     cmd_size += vn_sizeof_VkDeviceMemory(&memory);
    675     cmd_size += vn_sizeof_simple_pointer(pAllocator);
    676     if (pAllocator)
    677         assert(false);
    678 
    679     return cmd_size;
    680 }
    681 
    682 static inline void vn_encode_vkFreeMemory(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator)
    683 {
    684     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFreeMemory_EXT;
    685 
    686     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    687     vn_encode_VkFlags(enc, &cmd_flags);
    688 
    689     vn_encode_VkDevice(enc, &device);
    690     vn_encode_VkDeviceMemory(enc, &memory);
    691     if (vn_encode_simple_pointer(enc, pAllocator))
    692         assert(false);
    693 }
    694 
    695 static inline size_t vn_sizeof_vkFreeMemory_reply(VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator)
    696 {
    697     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFreeMemory_EXT;
    698     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    699 
    700     /* skip device */
    701     /* skip memory */
    702     /* skip pAllocator */
    703 
    704     return cmd_size;
    705 }
    706 
    707 static inline void vn_decode_vkFreeMemory_reply(struct vn_cs_decoder *dec, VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator)
    708 {
    709     VkCommandTypeEXT command_type;
    710     vn_decode_VkCommandTypeEXT(dec, &command_type);
    711     assert(command_type == VK_COMMAND_TYPE_vkFreeMemory_EXT);
    712 
    713     /* skip device */
    714     /* skip memory */
    715     /* skip pAllocator */
    716 }
    717 
    718 static inline size_t vn_sizeof_vkUnmapMemory(VkDevice device, VkDeviceMemory memory)
    719 {
    720     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkUnmapMemory_EXT;
    721     const VkFlags cmd_flags = 0;
    722     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    723 
    724     cmd_size += vn_sizeof_VkDevice(&device);
    725     cmd_size += vn_sizeof_VkDeviceMemory(&memory);
    726 
    727     return cmd_size;
    728 }
    729 
    730 static inline void vn_encode_vkUnmapMemory(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDeviceMemory memory)
    731 {
    732     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkUnmapMemory_EXT;
    733 
    734     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    735     vn_encode_VkFlags(enc, &cmd_flags);
    736 
    737     vn_encode_VkDevice(enc, &device);
    738     vn_encode_VkDeviceMemory(enc, &memory);
    739 }
    740 
    741 static inline size_t vn_sizeof_vkUnmapMemory_reply(VkDevice device, VkDeviceMemory memory)
    742 {
    743     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkUnmapMemory_EXT;
    744     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    745 
    746     /* skip device */
    747     /* skip memory */
    748 
    749     return cmd_size;
    750 }
    751 
    752 static inline void vn_decode_vkUnmapMemory_reply(struct vn_cs_decoder *dec, VkDevice device, VkDeviceMemory memory)
    753 {
    754     VkCommandTypeEXT command_type;
    755     vn_decode_VkCommandTypeEXT(dec, &command_type);
    756     assert(command_type == VK_COMMAND_TYPE_vkUnmapMemory_EXT);
    757 
    758     /* skip device */
    759     /* skip memory */
    760 }
    761 
    762 static inline size_t vn_sizeof_vkFlushMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    763 {
    764     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFlushMappedMemoryRanges_EXT;
    765     const VkFlags cmd_flags = 0;
    766     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    767 
    768     cmd_size += vn_sizeof_VkDevice(&device);
    769     cmd_size += vn_sizeof_uint32_t(&memoryRangeCount);
    770     if (pMemoryRanges) {
    771         cmd_size += vn_sizeof_array_size(memoryRangeCount);
    772         for (uint32_t i = 0; i < memoryRangeCount; i++)
    773             cmd_size += vn_sizeof_VkMappedMemoryRange(&pMemoryRanges[i]);
    774     } else {
    775         cmd_size += vn_sizeof_array_size(0);
    776     }
    777 
    778     return cmd_size;
    779 }
    780 
    781 static inline void vn_encode_vkFlushMappedMemoryRanges(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    782 {
    783     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFlushMappedMemoryRanges_EXT;
    784 
    785     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    786     vn_encode_VkFlags(enc, &cmd_flags);
    787 
    788     vn_encode_VkDevice(enc, &device);
    789     vn_encode_uint32_t(enc, &memoryRangeCount);
    790     if (pMemoryRanges) {
    791         vn_encode_array_size(enc, memoryRangeCount);
    792         for (uint32_t i = 0; i < memoryRangeCount; i++)
    793             vn_encode_VkMappedMemoryRange(enc, &pMemoryRanges[i]);
    794     } else {
    795         vn_encode_array_size(enc, 0);
    796     }
    797 }
    798 
    799 static inline size_t vn_sizeof_vkFlushMappedMemoryRanges_reply(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    800 {
    801     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFlushMappedMemoryRanges_EXT;
    802     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    803 
    804     VkResult ret;
    805     cmd_size += vn_sizeof_VkResult(&ret);
    806     /* skip device */
    807     /* skip memoryRangeCount */
    808     /* skip pMemoryRanges */
    809 
    810     return cmd_size;
    811 }
    812 
    813 static inline VkResult vn_decode_vkFlushMappedMemoryRanges_reply(struct vn_cs_decoder *dec, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    814 {
    815     VkCommandTypeEXT command_type;
    816     vn_decode_VkCommandTypeEXT(dec, &command_type);
    817     assert(command_type == VK_COMMAND_TYPE_vkFlushMappedMemoryRanges_EXT);
    818 
    819     VkResult ret;
    820     vn_decode_VkResult(dec, &ret);
    821     /* skip device */
    822     /* skip memoryRangeCount */
    823     /* skip pMemoryRanges */
    824 
    825     return ret;
    826 }
    827 
    828 static inline size_t vn_sizeof_vkInvalidateMappedMemoryRanges(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    829 {
    830     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkInvalidateMappedMemoryRanges_EXT;
    831     const VkFlags cmd_flags = 0;
    832     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    833 
    834     cmd_size += vn_sizeof_VkDevice(&device);
    835     cmd_size += vn_sizeof_uint32_t(&memoryRangeCount);
    836     if (pMemoryRanges) {
    837         cmd_size += vn_sizeof_array_size(memoryRangeCount);
    838         for (uint32_t i = 0; i < memoryRangeCount; i++)
    839             cmd_size += vn_sizeof_VkMappedMemoryRange(&pMemoryRanges[i]);
    840     } else {
    841         cmd_size += vn_sizeof_array_size(0);
    842     }
    843 
    844     return cmd_size;
    845 }
    846 
    847 static inline void vn_encode_vkInvalidateMappedMemoryRanges(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    848 {
    849     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkInvalidateMappedMemoryRanges_EXT;
    850 
    851     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    852     vn_encode_VkFlags(enc, &cmd_flags);
    853 
    854     vn_encode_VkDevice(enc, &device);
    855     vn_encode_uint32_t(enc, &memoryRangeCount);
    856     if (pMemoryRanges) {
    857         vn_encode_array_size(enc, memoryRangeCount);
    858         for (uint32_t i = 0; i < memoryRangeCount; i++)
    859             vn_encode_VkMappedMemoryRange(enc, &pMemoryRanges[i]);
    860     } else {
    861         vn_encode_array_size(enc, 0);
    862     }
    863 }
    864 
    865 static inline size_t vn_sizeof_vkInvalidateMappedMemoryRanges_reply(VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    866 {
    867     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkInvalidateMappedMemoryRanges_EXT;
    868     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    869 
    870     VkResult ret;
    871     cmd_size += vn_sizeof_VkResult(&ret);
    872     /* skip device */
    873     /* skip memoryRangeCount */
    874     /* skip pMemoryRanges */
    875 
    876     return cmd_size;
    877 }
    878 
    879 static inline VkResult vn_decode_vkInvalidateMappedMemoryRanges_reply(struct vn_cs_decoder *dec, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
    880 {
    881     VkCommandTypeEXT command_type;
    882     vn_decode_VkCommandTypeEXT(dec, &command_type);
    883     assert(command_type == VK_COMMAND_TYPE_vkInvalidateMappedMemoryRanges_EXT);
    884 
    885     VkResult ret;
    886     vn_decode_VkResult(dec, &ret);
    887     /* skip device */
    888     /* skip memoryRangeCount */
    889     /* skip pMemoryRanges */
    890 
    891     return ret;
    892 }
    893 
    894 static inline size_t vn_sizeof_vkGetDeviceMemoryCommitment(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
    895 {
    896     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetDeviceMemoryCommitment_EXT;
    897     const VkFlags cmd_flags = 0;
    898     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    899 
    900     cmd_size += vn_sizeof_VkDevice(&device);
    901     cmd_size += vn_sizeof_VkDeviceMemory(&memory);
    902     cmd_size += vn_sizeof_simple_pointer(pCommittedMemoryInBytes); /* out */
    903 
    904     return cmd_size;
    905 }
    906 
    907 static inline void vn_encode_vkGetDeviceMemoryCommitment(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
    908 {
    909     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetDeviceMemoryCommitment_EXT;
    910 
    911     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    912     vn_encode_VkFlags(enc, &cmd_flags);
    913 
    914     vn_encode_VkDevice(enc, &device);
    915     vn_encode_VkDeviceMemory(enc, &memory);
    916     vn_encode_simple_pointer(enc, pCommittedMemoryInBytes); /* out */
    917 }
    918 
    919 static inline size_t vn_sizeof_vkGetDeviceMemoryCommitment_reply(VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
    920 {
    921     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetDeviceMemoryCommitment_EXT;
    922     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    923 
    924     /* skip device */
    925     /* skip memory */
    926     cmd_size += vn_sizeof_simple_pointer(pCommittedMemoryInBytes);
    927     if (pCommittedMemoryInBytes)
    928         cmd_size += vn_sizeof_VkDeviceSize(pCommittedMemoryInBytes);
    929 
    930     return cmd_size;
    931 }
    932 
    933 static inline void vn_decode_vkGetDeviceMemoryCommitment_reply(struct vn_cs_decoder *dec, VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
    934 {
    935     VkCommandTypeEXT command_type;
    936     vn_decode_VkCommandTypeEXT(dec, &command_type);
    937     assert(command_type == VK_COMMAND_TYPE_vkGetDeviceMemoryCommitment_EXT);
    938 
    939     /* skip device */
    940     /* skip memory */
    941     if (vn_decode_simple_pointer(dec)) {
    942         vn_decode_VkDeviceSize(dec, pCommittedMemoryInBytes);
    943     } else {
    944         pCommittedMemoryInBytes = NULL;
    945     }
    946 }
    947 
    948 static inline size_t vn_sizeof_vkGetDeviceMemoryOpaqueCaptureAddress(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
    949 {
    950     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetDeviceMemoryOpaqueCaptureAddress_EXT;
    951     const VkFlags cmd_flags = 0;
    952     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    953 
    954     cmd_size += vn_sizeof_VkDevice(&device);
    955     cmd_size += vn_sizeof_simple_pointer(pInfo);
    956     if (pInfo)
    957         cmd_size += vn_sizeof_VkDeviceMemoryOpaqueCaptureAddressInfo(pInfo);
    958 
    959     return cmd_size;
    960 }
    961 
    962 static inline void vn_encode_vkGetDeviceMemoryOpaqueCaptureAddress(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
    963 {
    964     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetDeviceMemoryOpaqueCaptureAddress_EXT;
    965 
    966     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    967     vn_encode_VkFlags(enc, &cmd_flags);
    968 
    969     vn_encode_VkDevice(enc, &device);
    970     if (vn_encode_simple_pointer(enc, pInfo))
    971         vn_encode_VkDeviceMemoryOpaqueCaptureAddressInfo(enc, pInfo);
    972 }
    973 
    974 static inline size_t vn_sizeof_vkGetDeviceMemoryOpaqueCaptureAddress_reply(VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
    975 {
    976     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetDeviceMemoryOpaqueCaptureAddress_EXT;
    977     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    978 
    979     uint64_t ret;
    980     cmd_size += vn_sizeof_uint64_t(&ret);
    981     /* skip device */
    982     /* skip pInfo */
    983 
    984     return cmd_size;
    985 }
    986 
    987 static inline uint64_t vn_decode_vkGetDeviceMemoryOpaqueCaptureAddress_reply(struct vn_cs_decoder *dec, VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
    988 {
    989     VkCommandTypeEXT command_type;
    990     vn_decode_VkCommandTypeEXT(dec, &command_type);
    991     assert(command_type == VK_COMMAND_TYPE_vkGetDeviceMemoryOpaqueCaptureAddress_EXT);
    992 
    993     uint64_t ret;
    994     vn_decode_uint64_t(dec, &ret);
    995     /* skip device */
    996     /* skip pInfo */
    997 
    998     return ret;
    999 }
   1000 
   1001 static inline void vn_submit_vkAllocateMemory(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory, struct vn_instance_submit_command *submit)
   1002 {
   1003     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1004     void *cmd_data = local_cmd_data;
   1005     size_t cmd_size = vn_sizeof_vkAllocateMemory(device, pAllocateInfo, pAllocator, pMemory);
   1006     if (cmd_size > sizeof(local_cmd_data)) {
   1007         cmd_data = malloc(cmd_size);
   1008         if (!cmd_data)
   1009             cmd_size = 0;
   1010     }
   1011     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkAllocateMemory_reply(device, pAllocateInfo, pAllocator, pMemory) : 0;
   1012 
   1013     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1014     if (cmd_size) {
   1015         vn_encode_vkAllocateMemory(enc, cmd_flags, device, pAllocateInfo, pAllocator, pMemory);
   1016         vn_instance_submit_command(vn_instance, submit);
   1017         if (cmd_data != local_cmd_data)
   1018             free(cmd_data);
   1019     }
   1020 }
   1021 
   1022 static inline void vn_submit_vkFreeMemory(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator, struct vn_instance_submit_command *submit)
   1023 {
   1024     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1025     void *cmd_data = local_cmd_data;
   1026     size_t cmd_size = vn_sizeof_vkFreeMemory(device, memory, pAllocator);
   1027     if (cmd_size > sizeof(local_cmd_data)) {
   1028         cmd_data = malloc(cmd_size);
   1029         if (!cmd_data)
   1030             cmd_size = 0;
   1031     }
   1032     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkFreeMemory_reply(device, memory, pAllocator) : 0;
   1033 
   1034     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1035     if (cmd_size) {
   1036         vn_encode_vkFreeMemory(enc, cmd_flags, device, memory, pAllocator);
   1037         vn_instance_submit_command(vn_instance, submit);
   1038         if (cmd_data != local_cmd_data)
   1039             free(cmd_data);
   1040     }
   1041 }
   1042 
   1043 static inline void vn_submit_vkUnmapMemory(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDeviceMemory memory, struct vn_instance_submit_command *submit)
   1044 {
   1045     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1046     void *cmd_data = local_cmd_data;
   1047     size_t cmd_size = vn_sizeof_vkUnmapMemory(device, memory);
   1048     if (cmd_size > sizeof(local_cmd_data)) {
   1049         cmd_data = malloc(cmd_size);
   1050         if (!cmd_data)
   1051             cmd_size = 0;
   1052     }
   1053     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkUnmapMemory_reply(device, memory) : 0;
   1054 
   1055     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1056     if (cmd_size) {
   1057         vn_encode_vkUnmapMemory(enc, cmd_flags, device, memory);
   1058         vn_instance_submit_command(vn_instance, submit);
   1059         if (cmd_data != local_cmd_data)
   1060             free(cmd_data);
   1061     }
   1062 }
   1063 
   1064 static inline void vn_submit_vkFlushMappedMemoryRanges(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges, struct vn_instance_submit_command *submit)
   1065 {
   1066     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1067     void *cmd_data = local_cmd_data;
   1068     size_t cmd_size = vn_sizeof_vkFlushMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
   1069     if (cmd_size > sizeof(local_cmd_data)) {
   1070         cmd_data = malloc(cmd_size);
   1071         if (!cmd_data)
   1072             cmd_size = 0;
   1073     }
   1074     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkFlushMappedMemoryRanges_reply(device, memoryRangeCount, pMemoryRanges) : 0;
   1075 
   1076     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1077     if (cmd_size) {
   1078         vn_encode_vkFlushMappedMemoryRanges(enc, cmd_flags, device, memoryRangeCount, pMemoryRanges);
   1079         vn_instance_submit_command(vn_instance, submit);
   1080         if (cmd_data != local_cmd_data)
   1081             free(cmd_data);
   1082     }
   1083 }
   1084 
   1085 static inline void vn_submit_vkInvalidateMappedMemoryRanges(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges, struct vn_instance_submit_command *submit)
   1086 {
   1087     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1088     void *cmd_data = local_cmd_data;
   1089     size_t cmd_size = vn_sizeof_vkInvalidateMappedMemoryRanges(device, memoryRangeCount, pMemoryRanges);
   1090     if (cmd_size > sizeof(local_cmd_data)) {
   1091         cmd_data = malloc(cmd_size);
   1092         if (!cmd_data)
   1093             cmd_size = 0;
   1094     }
   1095     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkInvalidateMappedMemoryRanges_reply(device, memoryRangeCount, pMemoryRanges) : 0;
   1096 
   1097     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1098     if (cmd_size) {
   1099         vn_encode_vkInvalidateMappedMemoryRanges(enc, cmd_flags, device, memoryRangeCount, pMemoryRanges);
   1100         vn_instance_submit_command(vn_instance, submit);
   1101         if (cmd_data != local_cmd_data)
   1102             free(cmd_data);
   1103     }
   1104 }
   1105 
   1106 static inline void vn_submit_vkGetDeviceMemoryCommitment(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes, struct vn_instance_submit_command *submit)
   1107 {
   1108     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1109     void *cmd_data = local_cmd_data;
   1110     size_t cmd_size = vn_sizeof_vkGetDeviceMemoryCommitment(device, memory, pCommittedMemoryInBytes);
   1111     if (cmd_size > sizeof(local_cmd_data)) {
   1112         cmd_data = malloc(cmd_size);
   1113         if (!cmd_data)
   1114             cmd_size = 0;
   1115     }
   1116     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkGetDeviceMemoryCommitment_reply(device, memory, pCommittedMemoryInBytes) : 0;
   1117 
   1118     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1119     if (cmd_size) {
   1120         vn_encode_vkGetDeviceMemoryCommitment(enc, cmd_flags, device, memory, pCommittedMemoryInBytes);
   1121         vn_instance_submit_command(vn_instance, submit);
   1122         if (cmd_data != local_cmd_data)
   1123             free(cmd_data);
   1124     }
   1125 }
   1126 
   1127 static inline void vn_submit_vkGetDeviceMemoryOpaqueCaptureAddress(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo, struct vn_instance_submit_command *submit)
   1128 {
   1129     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1130     void *cmd_data = local_cmd_data;
   1131     size_t cmd_size = vn_sizeof_vkGetDeviceMemoryOpaqueCaptureAddress(device, pInfo);
   1132     if (cmd_size > sizeof(local_cmd_data)) {
   1133         cmd_data = malloc(cmd_size);
   1134         if (!cmd_data)
   1135             cmd_size = 0;
   1136     }
   1137     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkGetDeviceMemoryOpaqueCaptureAddress_reply(device, pInfo) : 0;
   1138 
   1139     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1140     if (cmd_size) {
   1141         vn_encode_vkGetDeviceMemoryOpaqueCaptureAddress(enc, cmd_flags, device, pInfo);
   1142         vn_instance_submit_command(vn_instance, submit);
   1143         if (cmd_data != local_cmd_data)
   1144             free(cmd_data);
   1145     }
   1146 }
   1147 
   1148 static inline VkResult vn_call_vkAllocateMemory(struct vn_instance *vn_instance, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
   1149 {
   1150     VN_TRACE_FUNC();
   1151 
   1152     struct vn_instance_submit_command submit;
   1153     vn_submit_vkAllocateMemory(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pAllocateInfo, pAllocator, pMemory, &submit);
   1154     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1155     if (dec) {
   1156         const VkResult ret = vn_decode_vkAllocateMemory_reply(dec, device, pAllocateInfo, pAllocator, pMemory);
   1157         vn_instance_free_command_reply(vn_instance, &submit);
   1158         return ret;
   1159     } else {
   1160         return VK_ERROR_OUT_OF_HOST_MEMORY;
   1161     }
   1162 }
   1163 
   1164 static inline void vn_async_vkAllocateMemory(struct vn_instance *vn_instance, VkDevice device, const VkMemoryAllocateInfo* pAllocateInfo, const VkAllocationCallbacks* pAllocator, VkDeviceMemory* pMemory)
   1165 {
   1166     struct vn_instance_submit_command submit;
   1167     vn_submit_vkAllocateMemory(vn_instance, 0, device, pAllocateInfo, pAllocator, pMemory, &submit);
   1168 }
   1169 
   1170 static inline void vn_call_vkFreeMemory(struct vn_instance *vn_instance, VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator)
   1171 {
   1172     VN_TRACE_FUNC();
   1173 
   1174     struct vn_instance_submit_command submit;
   1175     vn_submit_vkFreeMemory(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, memory, pAllocator, &submit);
   1176     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1177     if (dec) {
   1178         vn_decode_vkFreeMemory_reply(dec, device, memory, pAllocator);
   1179         vn_instance_free_command_reply(vn_instance, &submit);
   1180     }
   1181 }
   1182 
   1183 static inline void vn_async_vkFreeMemory(struct vn_instance *vn_instance, VkDevice device, VkDeviceMemory memory, const VkAllocationCallbacks* pAllocator)
   1184 {
   1185     struct vn_instance_submit_command submit;
   1186     vn_submit_vkFreeMemory(vn_instance, 0, device, memory, pAllocator, &submit);
   1187 }
   1188 
   1189 static inline void vn_call_vkUnmapMemory(struct vn_instance *vn_instance, VkDevice device, VkDeviceMemory memory)
   1190 {
   1191     VN_TRACE_FUNC();
   1192 
   1193     struct vn_instance_submit_command submit;
   1194     vn_submit_vkUnmapMemory(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, memory, &submit);
   1195     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1196     if (dec) {
   1197         vn_decode_vkUnmapMemory_reply(dec, device, memory);
   1198         vn_instance_free_command_reply(vn_instance, &submit);
   1199     }
   1200 }
   1201 
   1202 static inline void vn_async_vkUnmapMemory(struct vn_instance *vn_instance, VkDevice device, VkDeviceMemory memory)
   1203 {
   1204     struct vn_instance_submit_command submit;
   1205     vn_submit_vkUnmapMemory(vn_instance, 0, device, memory, &submit);
   1206 }
   1207 
   1208 static inline VkResult vn_call_vkFlushMappedMemoryRanges(struct vn_instance *vn_instance, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
   1209 {
   1210     VN_TRACE_FUNC();
   1211 
   1212     struct vn_instance_submit_command submit;
   1213     vn_submit_vkFlushMappedMemoryRanges(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, memoryRangeCount, pMemoryRanges, &submit);
   1214     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1215     if (dec) {
   1216         const VkResult ret = vn_decode_vkFlushMappedMemoryRanges_reply(dec, device, memoryRangeCount, pMemoryRanges);
   1217         vn_instance_free_command_reply(vn_instance, &submit);
   1218         return ret;
   1219     } else {
   1220         return VK_ERROR_OUT_OF_HOST_MEMORY;
   1221     }
   1222 }
   1223 
   1224 static inline void vn_async_vkFlushMappedMemoryRanges(struct vn_instance *vn_instance, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
   1225 {
   1226     struct vn_instance_submit_command submit;
   1227     vn_submit_vkFlushMappedMemoryRanges(vn_instance, 0, device, memoryRangeCount, pMemoryRanges, &submit);
   1228 }
   1229 
   1230 static inline VkResult vn_call_vkInvalidateMappedMemoryRanges(struct vn_instance *vn_instance, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
   1231 {
   1232     VN_TRACE_FUNC();
   1233 
   1234     struct vn_instance_submit_command submit;
   1235     vn_submit_vkInvalidateMappedMemoryRanges(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, memoryRangeCount, pMemoryRanges, &submit);
   1236     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1237     if (dec) {
   1238         const VkResult ret = vn_decode_vkInvalidateMappedMemoryRanges_reply(dec, device, memoryRangeCount, pMemoryRanges);
   1239         vn_instance_free_command_reply(vn_instance, &submit);
   1240         return ret;
   1241     } else {
   1242         return VK_ERROR_OUT_OF_HOST_MEMORY;
   1243     }
   1244 }
   1245 
   1246 static inline void vn_async_vkInvalidateMappedMemoryRanges(struct vn_instance *vn_instance, VkDevice device, uint32_t memoryRangeCount, const VkMappedMemoryRange* pMemoryRanges)
   1247 {
   1248     struct vn_instance_submit_command submit;
   1249     vn_submit_vkInvalidateMappedMemoryRanges(vn_instance, 0, device, memoryRangeCount, pMemoryRanges, &submit);
   1250 }
   1251 
   1252 static inline void vn_call_vkGetDeviceMemoryCommitment(struct vn_instance *vn_instance, VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
   1253 {
   1254     VN_TRACE_FUNC();
   1255 
   1256     struct vn_instance_submit_command submit;
   1257     vn_submit_vkGetDeviceMemoryCommitment(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, memory, pCommittedMemoryInBytes, &submit);
   1258     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1259     if (dec) {
   1260         vn_decode_vkGetDeviceMemoryCommitment_reply(dec, device, memory, pCommittedMemoryInBytes);
   1261         vn_instance_free_command_reply(vn_instance, &submit);
   1262     }
   1263 }
   1264 
   1265 static inline void vn_async_vkGetDeviceMemoryCommitment(struct vn_instance *vn_instance, VkDevice device, VkDeviceMemory memory, VkDeviceSize* pCommittedMemoryInBytes)
   1266 {
   1267     struct vn_instance_submit_command submit;
   1268     vn_submit_vkGetDeviceMemoryCommitment(vn_instance, 0, device, memory, pCommittedMemoryInBytes, &submit);
   1269 }
   1270 
   1271 static inline uint64_t vn_call_vkGetDeviceMemoryOpaqueCaptureAddress(struct vn_instance *vn_instance, VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
   1272 {
   1273     VN_TRACE_FUNC();
   1274 
   1275     struct vn_instance_submit_command submit;
   1276     vn_submit_vkGetDeviceMemoryOpaqueCaptureAddress(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pInfo, &submit);
   1277     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1278     if (dec) {
   1279         const uint64_t ret = vn_decode_vkGetDeviceMemoryOpaqueCaptureAddress_reply(dec, device, pInfo);
   1280         vn_instance_free_command_reply(vn_instance, &submit);
   1281         return ret;
   1282     } else {
   1283         return VK_ERROR_OUT_OF_HOST_MEMORY;
   1284     }
   1285 }
   1286 
   1287 static inline void vn_async_vkGetDeviceMemoryOpaqueCaptureAddress(struct vn_instance *vn_instance, VkDevice device, const VkDeviceMemoryOpaqueCaptureAddressInfo* pInfo)
   1288 {
   1289     struct vn_instance_submit_command submit;
   1290     vn_submit_vkGetDeviceMemoryOpaqueCaptureAddress(vn_instance, 0, device, pInfo, &submit);
   1291 }
   1292 
   1293 #endif /* VN_PROTOCOL_DRIVER_DEVICE_MEMORY_H */
   1294