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_TRANSPORT_H
      9 #define VN_PROTOCOL_DRIVER_TRANSPORT_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  *   vkGetMemoryFdKHR
     18  *   vkGetMemoryFdPropertiesKHR
     19  */
     20 
     21 /* struct VkCommandStreamDescriptionMESA */
     22 
     23 static inline size_t
     24 vn_sizeof_VkCommandStreamDescriptionMESA(const VkCommandStreamDescriptionMESA *val)
     25 {
     26     size_t size = 0;
     27     size += vn_sizeof_uint32_t(&val->resourceId);
     28     size += vn_sizeof_size_t(&val->offset);
     29     size += vn_sizeof_size_t(&val->size);
     30     return size;
     31 }
     32 
     33 static inline void
     34 vn_encode_VkCommandStreamDescriptionMESA(struct vn_cs_encoder *enc, const VkCommandStreamDescriptionMESA *val)
     35 {
     36     vn_encode_uint32_t(enc, &val->resourceId);
     37     vn_encode_size_t(enc, &val->offset);
     38     vn_encode_size_t(enc, &val->size);
     39 }
     40 
     41 /* struct VkCommandStreamDependencyMESA */
     42 
     43 static inline size_t
     44 vn_sizeof_VkCommandStreamDependencyMESA(const VkCommandStreamDependencyMESA *val)
     45 {
     46     size_t size = 0;
     47     size += vn_sizeof_uint32_t(&val->srcCommandStream);
     48     size += vn_sizeof_uint32_t(&val->dstCommandStream);
     49     return size;
     50 }
     51 
     52 static inline void
     53 vn_encode_VkCommandStreamDependencyMESA(struct vn_cs_encoder *enc, const VkCommandStreamDependencyMESA *val)
     54 {
     55     vn_encode_uint32_t(enc, &val->srcCommandStream);
     56     vn_encode_uint32_t(enc, &val->dstCommandStream);
     57 }
     58 
     59 /* struct VkRingCreateInfoMESA chain */
     60 
     61 static inline size_t
     62 vn_sizeof_VkRingCreateInfoMESA_pnext(const void *val)
     63 {
     64     /* no known/supported struct */
     65     return vn_sizeof_simple_pointer(NULL);
     66 }
     67 
     68 static inline size_t
     69 vn_sizeof_VkRingCreateInfoMESA_self(const VkRingCreateInfoMESA *val)
     70 {
     71     size_t size = 0;
     72     /* skip val->{sType,pNext} */
     73     size += vn_sizeof_VkFlags(&val->flags);
     74     size += vn_sizeof_uint32_t(&val->resourceId);
     75     size += vn_sizeof_size_t(&val->offset);
     76     size += vn_sizeof_size_t(&val->size);
     77     size += vn_sizeof_uint64_t(&val->idleTimeout);
     78     size += vn_sizeof_size_t(&val->headOffset);
     79     size += vn_sizeof_size_t(&val->tailOffset);
     80     size += vn_sizeof_size_t(&val->statusOffset);
     81     size += vn_sizeof_size_t(&val->bufferOffset);
     82     size += vn_sizeof_size_t(&val->bufferSize);
     83     size += vn_sizeof_size_t(&val->extraOffset);
     84     size += vn_sizeof_size_t(&val->extraSize);
     85     return size;
     86 }
     87 
     88 static inline size_t
     89 vn_sizeof_VkRingCreateInfoMESA(const VkRingCreateInfoMESA *val)
     90 {
     91     size_t size = 0;
     92 
     93     size += vn_sizeof_VkStructureType(&val->sType);
     94     size += vn_sizeof_VkRingCreateInfoMESA_pnext(val->pNext);
     95     size += vn_sizeof_VkRingCreateInfoMESA_self(val);
     96 
     97     return size;
     98 }
     99 
    100 static inline void
    101 vn_encode_VkRingCreateInfoMESA_pnext(struct vn_cs_encoder *enc, const void *val)
    102 {
    103     /* no known/supported struct */
    104     vn_encode_simple_pointer(enc, NULL);
    105 }
    106 
    107 static inline void
    108 vn_encode_VkRingCreateInfoMESA_self(struct vn_cs_encoder *enc, const VkRingCreateInfoMESA *val)
    109 {
    110     /* skip val->{sType,pNext} */
    111     vn_encode_VkFlags(enc, &val->flags);
    112     vn_encode_uint32_t(enc, &val->resourceId);
    113     vn_encode_size_t(enc, &val->offset);
    114     vn_encode_size_t(enc, &val->size);
    115     vn_encode_uint64_t(enc, &val->idleTimeout);
    116     vn_encode_size_t(enc, &val->headOffset);
    117     vn_encode_size_t(enc, &val->tailOffset);
    118     vn_encode_size_t(enc, &val->statusOffset);
    119     vn_encode_size_t(enc, &val->bufferOffset);
    120     vn_encode_size_t(enc, &val->bufferSize);
    121     vn_encode_size_t(enc, &val->extraOffset);
    122     vn_encode_size_t(enc, &val->extraSize);
    123 }
    124 
    125 static inline void
    126 vn_encode_VkRingCreateInfoMESA(struct vn_cs_encoder *enc, const VkRingCreateInfoMESA *val)
    127 {
    128     assert(val->sType == VK_STRUCTURE_TYPE_RING_CREATE_INFO_MESA);
    129     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_RING_CREATE_INFO_MESA });
    130     vn_encode_VkRingCreateInfoMESA_pnext(enc, val->pNext);
    131     vn_encode_VkRingCreateInfoMESA_self(enc, val);
    132 }
    133 
    134 /* struct VkMemoryResourceAllocationSizeProperties100000MESA chain */
    135 
    136 static inline size_t
    137 vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_pnext(const void *val)
    138 {
    139     /* no known/supported struct */
    140     return vn_sizeof_simple_pointer(NULL);
    141 }
    142 
    143 static inline size_t
    144 vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_self(const VkMemoryResourceAllocationSizeProperties100000MESA *val)
    145 {
    146     size_t size = 0;
    147     /* skip val->{sType,pNext} */
    148     size += vn_sizeof_uint64_t(&val->allocationSize);
    149     return size;
    150 }
    151 
    152 static inline size_t
    153 vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA(const VkMemoryResourceAllocationSizeProperties100000MESA *val)
    154 {
    155     size_t size = 0;
    156 
    157     size += vn_sizeof_VkStructureType(&val->sType);
    158     size += vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_pnext(val->pNext);
    159     size += vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_self(val);
    160 
    161     return size;
    162 }
    163 
    164 static inline void
    165 vn_decode_VkMemoryResourceAllocationSizeProperties100000MESA_pnext(struct vn_cs_decoder *dec, const void *val)
    166 {
    167     /* no known/supported struct */
    168     if (vn_decode_simple_pointer(dec))
    169         assert(false);
    170 }
    171 
    172 static inline void
    173 vn_decode_VkMemoryResourceAllocationSizeProperties100000MESA_self(struct vn_cs_decoder *dec, VkMemoryResourceAllocationSizeProperties100000MESA *val)
    174 {
    175     /* skip val->{sType,pNext} */
    176     vn_decode_uint64_t(dec, &val->allocationSize);
    177 }
    178 
    179 static inline void
    180 vn_decode_VkMemoryResourceAllocationSizeProperties100000MESA(struct vn_cs_decoder *dec, VkMemoryResourceAllocationSizeProperties100000MESA *val)
    181 {
    182     VkStructureType stype;
    183     vn_decode_VkStructureType(dec, &stype);
    184     assert(stype == VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA);
    185 
    186     assert(val->sType == stype);
    187     vn_decode_VkMemoryResourceAllocationSizeProperties100000MESA_pnext(dec, val->pNext);
    188     vn_decode_VkMemoryResourceAllocationSizeProperties100000MESA_self(dec, val);
    189 }
    190 
    191 static inline size_t
    192 vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_pnext_partial(const void *val)
    193 {
    194     /* no known/supported struct */
    195     return vn_sizeof_simple_pointer(NULL);
    196 }
    197 
    198 static inline size_t
    199 vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_self_partial(const VkMemoryResourceAllocationSizeProperties100000MESA *val)
    200 {
    201     size_t size = 0;
    202     /* skip val->{sType,pNext} */
    203     /* skip val->allocationSize */
    204     return size;
    205 }
    206 
    207 static inline size_t
    208 vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_partial(const VkMemoryResourceAllocationSizeProperties100000MESA *val)
    209 {
    210     size_t size = 0;
    211 
    212     size += vn_sizeof_VkStructureType(&val->sType);
    213     size += vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_pnext_partial(val->pNext);
    214     size += vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_self_partial(val);
    215 
    216     return size;
    217 }
    218 
    219 static inline void
    220 vn_encode_VkMemoryResourceAllocationSizeProperties100000MESA_pnext_partial(struct vn_cs_encoder *enc, const void *val)
    221 {
    222     /* no known/supported struct */
    223     vn_encode_simple_pointer(enc, NULL);
    224 }
    225 
    226 static inline void
    227 vn_encode_VkMemoryResourceAllocationSizeProperties100000MESA_self_partial(struct vn_cs_encoder *enc, const VkMemoryResourceAllocationSizeProperties100000MESA *val)
    228 {
    229     /* skip val->{sType,pNext} */
    230     /* skip val->allocationSize */
    231 }
    232 
    233 static inline void
    234 vn_encode_VkMemoryResourceAllocationSizeProperties100000MESA_partial(struct vn_cs_encoder *enc, const VkMemoryResourceAllocationSizeProperties100000MESA *val)
    235 {
    236     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA);
    237     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA });
    238     vn_encode_VkMemoryResourceAllocationSizeProperties100000MESA_pnext_partial(enc, val->pNext);
    239     vn_encode_VkMemoryResourceAllocationSizeProperties100000MESA_self_partial(enc, val);
    240 }
    241 
    242 /* struct VkMemoryResourcePropertiesMESA chain */
    243 
    244 static inline size_t
    245 vn_sizeof_VkMemoryResourcePropertiesMESA_pnext(const void *val)
    246 {
    247     const VkBaseInStructure *pnext = val;
    248     size_t size = 0;
    249 
    250     while (pnext) {
    251         switch ((int32_t)pnext->sType) {
    252         case VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA:
    253             size += vn_sizeof_simple_pointer(pnext);
    254             size += vn_sizeof_VkStructureType(&pnext->sType);
    255             size += vn_sizeof_VkMemoryResourcePropertiesMESA_pnext(pnext->pNext);
    256             size += vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_self((const VkMemoryResourceAllocationSizeProperties100000MESA *)pnext);
    257             return size;
    258         default:
    259             /* ignore unknown/unsupported struct */
    260             break;
    261         }
    262         pnext = pnext->pNext;
    263     }
    264 
    265     return vn_sizeof_simple_pointer(NULL);
    266 }
    267 
    268 static inline size_t
    269 vn_sizeof_VkMemoryResourcePropertiesMESA_self(const VkMemoryResourcePropertiesMESA *val)
    270 {
    271     size_t size = 0;
    272     /* skip val->{sType,pNext} */
    273     size += vn_sizeof_uint32_t(&val->memoryTypeBits);
    274     return size;
    275 }
    276 
    277 static inline size_t
    278 vn_sizeof_VkMemoryResourcePropertiesMESA(const VkMemoryResourcePropertiesMESA *val)
    279 {
    280     size_t size = 0;
    281 
    282     size += vn_sizeof_VkStructureType(&val->sType);
    283     size += vn_sizeof_VkMemoryResourcePropertiesMESA_pnext(val->pNext);
    284     size += vn_sizeof_VkMemoryResourcePropertiesMESA_self(val);
    285 
    286     return size;
    287 }
    288 
    289 static inline void
    290 vn_decode_VkMemoryResourcePropertiesMESA_pnext(struct vn_cs_decoder *dec, const void *val)
    291 {
    292     VkBaseOutStructure *pnext = (VkBaseOutStructure *)val;
    293     VkStructureType stype;
    294 
    295     if (!vn_decode_simple_pointer(dec))
    296         return;
    297 
    298     vn_decode_VkStructureType(dec, &stype);
    299     while (true) {
    300         assert(pnext);
    301         if (pnext->sType == stype)
    302             break;
    303     }
    304 
    305     switch ((int32_t)pnext->sType) {
    306     case VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA:
    307         vn_decode_VkMemoryResourcePropertiesMESA_pnext(dec, pnext->pNext);
    308         vn_decode_VkMemoryResourceAllocationSizeProperties100000MESA_self(dec, (VkMemoryResourceAllocationSizeProperties100000MESA *)pnext);
    309         break;
    310     default:
    311         assert(false);
    312         break;
    313     }
    314 }
    315 
    316 static inline void
    317 vn_decode_VkMemoryResourcePropertiesMESA_self(struct vn_cs_decoder *dec, VkMemoryResourcePropertiesMESA *val)
    318 {
    319     /* skip val->{sType,pNext} */
    320     vn_decode_uint32_t(dec, &val->memoryTypeBits);
    321 }
    322 
    323 static inline void
    324 vn_decode_VkMemoryResourcePropertiesMESA(struct vn_cs_decoder *dec, VkMemoryResourcePropertiesMESA *val)
    325 {
    326     VkStructureType stype;
    327     vn_decode_VkStructureType(dec, &stype);
    328     assert(stype == VK_STRUCTURE_TYPE_MEMORY_RESOURCE_PROPERTIES_MESA);
    329 
    330     assert(val->sType == stype);
    331     vn_decode_VkMemoryResourcePropertiesMESA_pnext(dec, val->pNext);
    332     vn_decode_VkMemoryResourcePropertiesMESA_self(dec, val);
    333 }
    334 
    335 static inline size_t
    336 vn_sizeof_VkMemoryResourcePropertiesMESA_pnext_partial(const void *val)
    337 {
    338     const VkBaseInStructure *pnext = val;
    339     size_t size = 0;
    340 
    341     while (pnext) {
    342         switch ((int32_t)pnext->sType) {
    343         case VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA:
    344             size += vn_sizeof_simple_pointer(pnext);
    345             size += vn_sizeof_VkStructureType(&pnext->sType);
    346             size += vn_sizeof_VkMemoryResourcePropertiesMESA_pnext_partial(pnext->pNext);
    347             size += vn_sizeof_VkMemoryResourceAllocationSizeProperties100000MESA_self_partial((const VkMemoryResourceAllocationSizeProperties100000MESA *)pnext);
    348             return size;
    349         default:
    350             /* ignore unknown/unsupported struct */
    351             break;
    352         }
    353         pnext = pnext->pNext;
    354     }
    355 
    356     return vn_sizeof_simple_pointer(NULL);
    357 }
    358 
    359 static inline size_t
    360 vn_sizeof_VkMemoryResourcePropertiesMESA_self_partial(const VkMemoryResourcePropertiesMESA *val)
    361 {
    362     size_t size = 0;
    363     /* skip val->{sType,pNext} */
    364     /* skip val->memoryTypeBits */
    365     return size;
    366 }
    367 
    368 static inline size_t
    369 vn_sizeof_VkMemoryResourcePropertiesMESA_partial(const VkMemoryResourcePropertiesMESA *val)
    370 {
    371     size_t size = 0;
    372 
    373     size += vn_sizeof_VkStructureType(&val->sType);
    374     size += vn_sizeof_VkMemoryResourcePropertiesMESA_pnext_partial(val->pNext);
    375     size += vn_sizeof_VkMemoryResourcePropertiesMESA_self_partial(val);
    376 
    377     return size;
    378 }
    379 
    380 static inline void
    381 vn_encode_VkMemoryResourcePropertiesMESA_pnext_partial(struct vn_cs_encoder *enc, const void *val)
    382 {
    383     const VkBaseInStructure *pnext = val;
    384 
    385     while (pnext) {
    386         switch ((int32_t)pnext->sType) {
    387         case VK_STRUCTURE_TYPE_MEMORY_RESOURCE_ALLOCATION_SIZE_PROPERTIES_100000_MESA:
    388             vn_encode_simple_pointer(enc, pnext);
    389             vn_encode_VkStructureType(enc, &pnext->sType);
    390             vn_encode_VkMemoryResourcePropertiesMESA_pnext_partial(enc, pnext->pNext);
    391             vn_encode_VkMemoryResourceAllocationSizeProperties100000MESA_self_partial(enc, (const VkMemoryResourceAllocationSizeProperties100000MESA *)pnext);
    392             return;
    393         default:
    394             /* ignore unknown/unsupported struct */
    395             break;
    396         }
    397         pnext = pnext->pNext;
    398     }
    399 
    400     vn_encode_simple_pointer(enc, NULL);
    401 }
    402 
    403 static inline void
    404 vn_encode_VkMemoryResourcePropertiesMESA_self_partial(struct vn_cs_encoder *enc, const VkMemoryResourcePropertiesMESA *val)
    405 {
    406     /* skip val->{sType,pNext} */
    407     /* skip val->memoryTypeBits */
    408 }
    409 
    410 static inline void
    411 vn_encode_VkMemoryResourcePropertiesMESA_partial(struct vn_cs_encoder *enc, const VkMemoryResourcePropertiesMESA *val)
    412 {
    413     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_RESOURCE_PROPERTIES_MESA);
    414     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_RESOURCE_PROPERTIES_MESA });
    415     vn_encode_VkMemoryResourcePropertiesMESA_pnext_partial(enc, val->pNext);
    416     vn_encode_VkMemoryResourcePropertiesMESA_self_partial(enc, val);
    417 }
    418 
    419 static inline size_t vn_sizeof_vkSetReplyCommandStreamMESA(const VkCommandStreamDescriptionMESA* pStream)
    420 {
    421     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkSetReplyCommandStreamMESA_EXT;
    422     const VkFlags cmd_flags = 0;
    423     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    424 
    425     cmd_size += vn_sizeof_simple_pointer(pStream);
    426     if (pStream)
    427         cmd_size += vn_sizeof_VkCommandStreamDescriptionMESA(pStream);
    428 
    429     return cmd_size;
    430 }
    431 
    432 static inline void vn_encode_vkSetReplyCommandStreamMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, const VkCommandStreamDescriptionMESA* pStream)
    433 {
    434     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkSetReplyCommandStreamMESA_EXT;
    435 
    436     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    437     vn_encode_VkFlags(enc, &cmd_flags);
    438 
    439     if (vn_encode_simple_pointer(enc, pStream))
    440         vn_encode_VkCommandStreamDescriptionMESA(enc, pStream);
    441 }
    442 
    443 static inline size_t vn_sizeof_vkSetReplyCommandStreamMESA_reply(const VkCommandStreamDescriptionMESA* pStream)
    444 {
    445     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkSetReplyCommandStreamMESA_EXT;
    446     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    447 
    448     /* skip pStream */
    449 
    450     return cmd_size;
    451 }
    452 
    453 static inline void vn_decode_vkSetReplyCommandStreamMESA_reply(struct vn_cs_decoder *dec, const VkCommandStreamDescriptionMESA* pStream)
    454 {
    455     VkCommandTypeEXT command_type;
    456     vn_decode_VkCommandTypeEXT(dec, &command_type);
    457     assert(command_type == VK_COMMAND_TYPE_vkSetReplyCommandStreamMESA_EXT);
    458 
    459     /* skip pStream */
    460 }
    461 
    462 static inline size_t vn_sizeof_vkSeekReplyCommandStreamMESA(size_t position)
    463 {
    464     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkSeekReplyCommandStreamMESA_EXT;
    465     const VkFlags cmd_flags = 0;
    466     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    467 
    468     cmd_size += vn_sizeof_size_t(&position);
    469 
    470     return cmd_size;
    471 }
    472 
    473 static inline void vn_encode_vkSeekReplyCommandStreamMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, size_t position)
    474 {
    475     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkSeekReplyCommandStreamMESA_EXT;
    476 
    477     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    478     vn_encode_VkFlags(enc, &cmd_flags);
    479 
    480     vn_encode_size_t(enc, &position);
    481 }
    482 
    483 static inline size_t vn_sizeof_vkSeekReplyCommandStreamMESA_reply(size_t position)
    484 {
    485     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkSeekReplyCommandStreamMESA_EXT;
    486     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    487 
    488     /* skip position */
    489 
    490     return cmd_size;
    491 }
    492 
    493 static inline void vn_decode_vkSeekReplyCommandStreamMESA_reply(struct vn_cs_decoder *dec, size_t position)
    494 {
    495     VkCommandTypeEXT command_type;
    496     vn_decode_VkCommandTypeEXT(dec, &command_type);
    497     assert(command_type == VK_COMMAND_TYPE_vkSeekReplyCommandStreamMESA_EXT);
    498 
    499     /* skip position */
    500 }
    501 
    502 static inline size_t vn_sizeof_vkExecuteCommandStreamsMESA(uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags)
    503 {
    504     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkExecuteCommandStreamsMESA_EXT;
    505     const VkFlags cmd_flags = 0;
    506     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    507 
    508     cmd_size += vn_sizeof_uint32_t(&streamCount);
    509     if (pStreams) {
    510         cmd_size += vn_sizeof_array_size(streamCount);
    511         for (uint32_t i = 0; i < streamCount; i++)
    512             cmd_size += vn_sizeof_VkCommandStreamDescriptionMESA(&pStreams[i]);
    513     } else {
    514         cmd_size += vn_sizeof_array_size(0);
    515     }
    516     if (pReplyPositions) {
    517         cmd_size += vn_sizeof_array_size(streamCount);
    518         cmd_size += vn_sizeof_size_t_array(pReplyPositions, streamCount);
    519     } else {
    520         cmd_size += vn_sizeof_array_size(0);
    521     }
    522     cmd_size += vn_sizeof_uint32_t(&dependencyCount);
    523     if (pDependencies) {
    524         cmd_size += vn_sizeof_array_size(dependencyCount);
    525         for (uint32_t i = 0; i < dependencyCount; i++)
    526             cmd_size += vn_sizeof_VkCommandStreamDependencyMESA(&pDependencies[i]);
    527     } else {
    528         cmd_size += vn_sizeof_array_size(0);
    529     }
    530     cmd_size += vn_sizeof_VkFlags(&flags);
    531 
    532     return cmd_size;
    533 }
    534 
    535 static inline void vn_encode_vkExecuteCommandStreamsMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags)
    536 {
    537     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkExecuteCommandStreamsMESA_EXT;
    538 
    539     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    540     vn_encode_VkFlags(enc, &cmd_flags);
    541 
    542     vn_encode_uint32_t(enc, &streamCount);
    543     if (pStreams) {
    544         vn_encode_array_size(enc, streamCount);
    545         for (uint32_t i = 0; i < streamCount; i++)
    546             vn_encode_VkCommandStreamDescriptionMESA(enc, &pStreams[i]);
    547     } else {
    548         vn_encode_array_size(enc, 0);
    549     }
    550     if (pReplyPositions) {
    551         vn_encode_array_size(enc, streamCount);
    552         vn_encode_size_t_array(enc, pReplyPositions, streamCount);
    553     } else {
    554         vn_encode_array_size(enc, 0);
    555     }
    556     vn_encode_uint32_t(enc, &dependencyCount);
    557     if (pDependencies) {
    558         vn_encode_array_size(enc, dependencyCount);
    559         for (uint32_t i = 0; i < dependencyCount; i++)
    560             vn_encode_VkCommandStreamDependencyMESA(enc, &pDependencies[i]);
    561     } else {
    562         vn_encode_array_size(enc, 0);
    563     }
    564     vn_encode_VkFlags(enc, &flags);
    565 }
    566 
    567 static inline size_t vn_sizeof_vkExecuteCommandStreamsMESA_reply(uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags)
    568 {
    569     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkExecuteCommandStreamsMESA_EXT;
    570     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    571 
    572     /* skip streamCount */
    573     /* skip pStreams */
    574     /* skip pReplyPositions */
    575     /* skip dependencyCount */
    576     /* skip pDependencies */
    577     /* skip flags */
    578 
    579     return cmd_size;
    580 }
    581 
    582 static inline void vn_decode_vkExecuteCommandStreamsMESA_reply(struct vn_cs_decoder *dec, uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags)
    583 {
    584     VkCommandTypeEXT command_type;
    585     vn_decode_VkCommandTypeEXT(dec, &command_type);
    586     assert(command_type == VK_COMMAND_TYPE_vkExecuteCommandStreamsMESA_EXT);
    587 
    588     /* skip streamCount */
    589     /* skip pStreams */
    590     /* skip pReplyPositions */
    591     /* skip dependencyCount */
    592     /* skip pDependencies */
    593     /* skip flags */
    594 }
    595 
    596 static inline size_t vn_sizeof_vkCreateRingMESA(uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo)
    597 {
    598     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateRingMESA_EXT;
    599     const VkFlags cmd_flags = 0;
    600     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    601 
    602     cmd_size += vn_sizeof_uint64_t(&ring);
    603     cmd_size += vn_sizeof_simple_pointer(pCreateInfo);
    604     if (pCreateInfo)
    605         cmd_size += vn_sizeof_VkRingCreateInfoMESA(pCreateInfo);
    606 
    607     return cmd_size;
    608 }
    609 
    610 static inline void vn_encode_vkCreateRingMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo)
    611 {
    612     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateRingMESA_EXT;
    613 
    614     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    615     vn_encode_VkFlags(enc, &cmd_flags);
    616 
    617     vn_encode_uint64_t(enc, &ring);
    618     if (vn_encode_simple_pointer(enc, pCreateInfo))
    619         vn_encode_VkRingCreateInfoMESA(enc, pCreateInfo);
    620 }
    621 
    622 static inline size_t vn_sizeof_vkCreateRingMESA_reply(uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo)
    623 {
    624     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateRingMESA_EXT;
    625     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    626 
    627     /* skip ring */
    628     /* skip pCreateInfo */
    629 
    630     return cmd_size;
    631 }
    632 
    633 static inline void vn_decode_vkCreateRingMESA_reply(struct vn_cs_decoder *dec, uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo)
    634 {
    635     VkCommandTypeEXT command_type;
    636     vn_decode_VkCommandTypeEXT(dec, &command_type);
    637     assert(command_type == VK_COMMAND_TYPE_vkCreateRingMESA_EXT);
    638 
    639     /* skip ring */
    640     /* skip pCreateInfo */
    641 }
    642 
    643 static inline size_t vn_sizeof_vkDestroyRingMESA(uint64_t ring)
    644 {
    645     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyRingMESA_EXT;
    646     const VkFlags cmd_flags = 0;
    647     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    648 
    649     cmd_size += vn_sizeof_uint64_t(&ring);
    650 
    651     return cmd_size;
    652 }
    653 
    654 static inline void vn_encode_vkDestroyRingMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, uint64_t ring)
    655 {
    656     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyRingMESA_EXT;
    657 
    658     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    659     vn_encode_VkFlags(enc, &cmd_flags);
    660 
    661     vn_encode_uint64_t(enc, &ring);
    662 }
    663 
    664 static inline size_t vn_sizeof_vkDestroyRingMESA_reply(uint64_t ring)
    665 {
    666     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyRingMESA_EXT;
    667     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    668 
    669     /* skip ring */
    670 
    671     return cmd_size;
    672 }
    673 
    674 static inline void vn_decode_vkDestroyRingMESA_reply(struct vn_cs_decoder *dec, uint64_t ring)
    675 {
    676     VkCommandTypeEXT command_type;
    677     vn_decode_VkCommandTypeEXT(dec, &command_type);
    678     assert(command_type == VK_COMMAND_TYPE_vkDestroyRingMESA_EXT);
    679 
    680     /* skip ring */
    681 }
    682 
    683 static inline size_t vn_sizeof_vkNotifyRingMESA(uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags)
    684 {
    685     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkNotifyRingMESA_EXT;
    686     const VkFlags cmd_flags = 0;
    687     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    688 
    689     cmd_size += vn_sizeof_uint64_t(&ring);
    690     cmd_size += vn_sizeof_uint32_t(&seqno);
    691     cmd_size += vn_sizeof_VkFlags(&flags);
    692 
    693     return cmd_size;
    694 }
    695 
    696 static inline void vn_encode_vkNotifyRingMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags)
    697 {
    698     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkNotifyRingMESA_EXT;
    699 
    700     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    701     vn_encode_VkFlags(enc, &cmd_flags);
    702 
    703     vn_encode_uint64_t(enc, &ring);
    704     vn_encode_uint32_t(enc, &seqno);
    705     vn_encode_VkFlags(enc, &flags);
    706 }
    707 
    708 static inline size_t vn_sizeof_vkNotifyRingMESA_reply(uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags)
    709 {
    710     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkNotifyRingMESA_EXT;
    711     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    712 
    713     /* skip ring */
    714     /* skip seqno */
    715     /* skip flags */
    716 
    717     return cmd_size;
    718 }
    719 
    720 static inline void vn_decode_vkNotifyRingMESA_reply(struct vn_cs_decoder *dec, uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags)
    721 {
    722     VkCommandTypeEXT command_type;
    723     vn_decode_VkCommandTypeEXT(dec, &command_type);
    724     assert(command_type == VK_COMMAND_TYPE_vkNotifyRingMESA_EXT);
    725 
    726     /* skip ring */
    727     /* skip seqno */
    728     /* skip flags */
    729 }
    730 
    731 static inline size_t vn_sizeof_vkWriteRingExtraMESA(uint64_t ring, size_t offset, uint32_t value)
    732 {
    733     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkWriteRingExtraMESA_EXT;
    734     const VkFlags cmd_flags = 0;
    735     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    736 
    737     cmd_size += vn_sizeof_uint64_t(&ring);
    738     cmd_size += vn_sizeof_size_t(&offset);
    739     cmd_size += vn_sizeof_uint32_t(&value);
    740 
    741     return cmd_size;
    742 }
    743 
    744 static inline void vn_encode_vkWriteRingExtraMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, uint64_t ring, size_t offset, uint32_t value)
    745 {
    746     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkWriteRingExtraMESA_EXT;
    747 
    748     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    749     vn_encode_VkFlags(enc, &cmd_flags);
    750 
    751     vn_encode_uint64_t(enc, &ring);
    752     vn_encode_size_t(enc, &offset);
    753     vn_encode_uint32_t(enc, &value);
    754 }
    755 
    756 static inline size_t vn_sizeof_vkWriteRingExtraMESA_reply(uint64_t ring, size_t offset, uint32_t value)
    757 {
    758     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkWriteRingExtraMESA_EXT;
    759     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    760 
    761     /* skip ring */
    762     /* skip offset */
    763     /* skip value */
    764 
    765     return cmd_size;
    766 }
    767 
    768 static inline void vn_decode_vkWriteRingExtraMESA_reply(struct vn_cs_decoder *dec, uint64_t ring, size_t offset, uint32_t value)
    769 {
    770     VkCommandTypeEXT command_type;
    771     vn_decode_VkCommandTypeEXT(dec, &command_type);
    772     assert(command_type == VK_COMMAND_TYPE_vkWriteRingExtraMESA_EXT);
    773 
    774     /* skip ring */
    775     /* skip offset */
    776     /* skip value */
    777 }
    778 
    779 static inline size_t vn_sizeof_vkGetMemoryResourcePropertiesMESA(VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties)
    780 {
    781     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetMemoryResourcePropertiesMESA_EXT;
    782     const VkFlags cmd_flags = 0;
    783     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    784 
    785     cmd_size += vn_sizeof_VkDevice(&device);
    786     cmd_size += vn_sizeof_uint32_t(&resourceId);
    787     cmd_size += vn_sizeof_simple_pointer(pMemoryResourceProperties);
    788     if (pMemoryResourceProperties)
    789         cmd_size += vn_sizeof_VkMemoryResourcePropertiesMESA_partial(pMemoryResourceProperties);
    790 
    791     return cmd_size;
    792 }
    793 
    794 static inline void vn_encode_vkGetMemoryResourcePropertiesMESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties)
    795 {
    796     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetMemoryResourcePropertiesMESA_EXT;
    797 
    798     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    799     vn_encode_VkFlags(enc, &cmd_flags);
    800 
    801     vn_encode_VkDevice(enc, &device);
    802     vn_encode_uint32_t(enc, &resourceId);
    803     if (vn_encode_simple_pointer(enc, pMemoryResourceProperties))
    804         vn_encode_VkMemoryResourcePropertiesMESA_partial(enc, pMemoryResourceProperties);
    805 }
    806 
    807 static inline size_t vn_sizeof_vkGetMemoryResourcePropertiesMESA_reply(VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties)
    808 {
    809     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetMemoryResourcePropertiesMESA_EXT;
    810     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    811 
    812     VkResult ret;
    813     cmd_size += vn_sizeof_VkResult(&ret);
    814     /* skip device */
    815     /* skip resourceId */
    816     cmd_size += vn_sizeof_simple_pointer(pMemoryResourceProperties);
    817     if (pMemoryResourceProperties)
    818         cmd_size += vn_sizeof_VkMemoryResourcePropertiesMESA(pMemoryResourceProperties);
    819 
    820     return cmd_size;
    821 }
    822 
    823 static inline VkResult vn_decode_vkGetMemoryResourcePropertiesMESA_reply(struct vn_cs_decoder *dec, VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties)
    824 {
    825     VkCommandTypeEXT command_type;
    826     vn_decode_VkCommandTypeEXT(dec, &command_type);
    827     assert(command_type == VK_COMMAND_TYPE_vkGetMemoryResourcePropertiesMESA_EXT);
    828 
    829     VkResult ret;
    830     vn_decode_VkResult(dec, &ret);
    831     /* skip device */
    832     /* skip resourceId */
    833     if (vn_decode_simple_pointer(dec)) {
    834         vn_decode_VkMemoryResourcePropertiesMESA(dec, pMemoryResourceProperties);
    835     } else {
    836         pMemoryResourceProperties = NULL;
    837     }
    838 
    839     return ret;
    840 }
    841 
    842 static inline size_t vn_sizeof_vkGetVenusExperimentalFeatureData100000MESA(size_t* pDataSize, void* pData)
    843 {
    844     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetVenusExperimentalFeatureData100000MESA_EXT;
    845     const VkFlags cmd_flags = 0;
    846     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
    847 
    848     cmd_size += vn_sizeof_simple_pointer(pDataSize);
    849     if (pDataSize)
    850         cmd_size += vn_sizeof_size_t(pDataSize);
    851     cmd_size += vn_sizeof_simple_pointer(pData); /* out */
    852 
    853     return cmd_size;
    854 }
    855 
    856 static inline void vn_encode_vkGetVenusExperimentalFeatureData100000MESA(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, size_t* pDataSize, void* pData)
    857 {
    858     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetVenusExperimentalFeatureData100000MESA_EXT;
    859 
    860     vn_encode_VkCommandTypeEXT(enc, &cmd_type);
    861     vn_encode_VkFlags(enc, &cmd_flags);
    862 
    863     if (vn_encode_simple_pointer(enc, pDataSize))
    864         vn_encode_size_t(enc, pDataSize);
    865     vn_encode_array_size(enc, pData ? (pDataSize ? *pDataSize : 0) : 0); /* out */
    866 }
    867 
    868 static inline size_t vn_sizeof_vkGetVenusExperimentalFeatureData100000MESA_reply(size_t* pDataSize, void* pData)
    869 {
    870     const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkGetVenusExperimentalFeatureData100000MESA_EXT;
    871     size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
    872 
    873     cmd_size += vn_sizeof_simple_pointer(pDataSize);
    874     if (pDataSize)
    875         cmd_size += vn_sizeof_size_t(pDataSize);
    876     if (pData) {
    877         cmd_size += vn_sizeof_array_size((pDataSize ? *pDataSize : 0));
    878         cmd_size += vn_sizeof_blob_array(pData, (pDataSize ? *pDataSize : 0));
    879     } else {
    880         cmd_size += vn_sizeof_array_size(0);
    881     }
    882 
    883     return cmd_size;
    884 }
    885 
    886 static inline void vn_decode_vkGetVenusExperimentalFeatureData100000MESA_reply(struct vn_cs_decoder *dec, size_t* pDataSize, void* pData)
    887 {
    888     VkCommandTypeEXT command_type;
    889     vn_decode_VkCommandTypeEXT(dec, &command_type);
    890     assert(command_type == VK_COMMAND_TYPE_vkGetVenusExperimentalFeatureData100000MESA_EXT);
    891 
    892     if (vn_decode_simple_pointer(dec)) {
    893         vn_decode_size_t(dec, pDataSize);
    894     } else {
    895         pDataSize = NULL;
    896     }
    897     if (vn_peek_array_size(dec)) {
    898         const size_t array_size = vn_decode_array_size(dec, (pDataSize ? *pDataSize : 0));
    899         vn_decode_blob_array(dec, pData, array_size);
    900     } else {
    901         vn_decode_array_size_unchecked(dec);
    902         pData = NULL;
    903     }
    904 }
    905 
    906 static inline void vn_submit_vkSetReplyCommandStreamMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, const VkCommandStreamDescriptionMESA* pStream, struct vn_instance_submit_command *submit)
    907 {
    908     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
    909     void *cmd_data = local_cmd_data;
    910     size_t cmd_size = vn_sizeof_vkSetReplyCommandStreamMESA(pStream);
    911     if (cmd_size > sizeof(local_cmd_data)) {
    912         cmd_data = malloc(cmd_size);
    913         if (!cmd_data)
    914             cmd_size = 0;
    915     }
    916     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkSetReplyCommandStreamMESA_reply(pStream) : 0;
    917 
    918     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
    919     if (cmd_size) {
    920         vn_encode_vkSetReplyCommandStreamMESA(enc, cmd_flags, pStream);
    921         vn_instance_submit_command(vn_instance, submit);
    922         if (cmd_data != local_cmd_data)
    923             free(cmd_data);
    924     }
    925 }
    926 
    927 static inline void vn_submit_vkSeekReplyCommandStreamMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, size_t position, struct vn_instance_submit_command *submit)
    928 {
    929     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
    930     void *cmd_data = local_cmd_data;
    931     size_t cmd_size = vn_sizeof_vkSeekReplyCommandStreamMESA(position);
    932     if (cmd_size > sizeof(local_cmd_data)) {
    933         cmd_data = malloc(cmd_size);
    934         if (!cmd_data)
    935             cmd_size = 0;
    936     }
    937     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkSeekReplyCommandStreamMESA_reply(position) : 0;
    938 
    939     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
    940     if (cmd_size) {
    941         vn_encode_vkSeekReplyCommandStreamMESA(enc, cmd_flags, position);
    942         vn_instance_submit_command(vn_instance, submit);
    943         if (cmd_data != local_cmd_data)
    944             free(cmd_data);
    945     }
    946 }
    947 
    948 static inline void vn_submit_vkExecuteCommandStreamsMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags, struct vn_instance_submit_command *submit)
    949 {
    950     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
    951     void *cmd_data = local_cmd_data;
    952     size_t cmd_size = vn_sizeof_vkExecuteCommandStreamsMESA(streamCount, pStreams, pReplyPositions, dependencyCount, pDependencies, flags);
    953     if (cmd_size > sizeof(local_cmd_data)) {
    954         cmd_data = malloc(cmd_size);
    955         if (!cmd_data)
    956             cmd_size = 0;
    957     }
    958     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkExecuteCommandStreamsMESA_reply(streamCount, pStreams, pReplyPositions, dependencyCount, pDependencies, flags) : 0;
    959 
    960     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
    961     if (cmd_size) {
    962         vn_encode_vkExecuteCommandStreamsMESA(enc, cmd_flags, streamCount, pStreams, pReplyPositions, dependencyCount, pDependencies, flags);
    963         vn_instance_submit_command(vn_instance, submit);
    964         if (cmd_data != local_cmd_data)
    965             free(cmd_data);
    966     }
    967 }
    968 
    969 static inline void vn_submit_vkCreateRingMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo, struct vn_instance_submit_command *submit)
    970 {
    971     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
    972     void *cmd_data = local_cmd_data;
    973     size_t cmd_size = vn_sizeof_vkCreateRingMESA(ring, pCreateInfo);
    974     if (cmd_size > sizeof(local_cmd_data)) {
    975         cmd_data = malloc(cmd_size);
    976         if (!cmd_data)
    977             cmd_size = 0;
    978     }
    979     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkCreateRingMESA_reply(ring, pCreateInfo) : 0;
    980 
    981     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
    982     if (cmd_size) {
    983         vn_encode_vkCreateRingMESA(enc, cmd_flags, ring, pCreateInfo);
    984         vn_instance_submit_command(vn_instance, submit);
    985         if (cmd_data != local_cmd_data)
    986             free(cmd_data);
    987     }
    988 }
    989 
    990 static inline void vn_submit_vkDestroyRingMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, uint64_t ring, struct vn_instance_submit_command *submit)
    991 {
    992     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
    993     void *cmd_data = local_cmd_data;
    994     size_t cmd_size = vn_sizeof_vkDestroyRingMESA(ring);
    995     if (cmd_size > sizeof(local_cmd_data)) {
    996         cmd_data = malloc(cmd_size);
    997         if (!cmd_data)
    998             cmd_size = 0;
    999     }
   1000     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkDestroyRingMESA_reply(ring) : 0;
   1001 
   1002     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1003     if (cmd_size) {
   1004         vn_encode_vkDestroyRingMESA(enc, cmd_flags, ring);
   1005         vn_instance_submit_command(vn_instance, submit);
   1006         if (cmd_data != local_cmd_data)
   1007             free(cmd_data);
   1008     }
   1009 }
   1010 
   1011 static inline void vn_submit_vkNotifyRingMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags, struct vn_instance_submit_command *submit)
   1012 {
   1013     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1014     void *cmd_data = local_cmd_data;
   1015     size_t cmd_size = vn_sizeof_vkNotifyRingMESA(ring, seqno, flags);
   1016     if (cmd_size > sizeof(local_cmd_data)) {
   1017         cmd_data = malloc(cmd_size);
   1018         if (!cmd_data)
   1019             cmd_size = 0;
   1020     }
   1021     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkNotifyRingMESA_reply(ring, seqno, flags) : 0;
   1022 
   1023     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1024     if (cmd_size) {
   1025         vn_encode_vkNotifyRingMESA(enc, cmd_flags, ring, seqno, flags);
   1026         vn_instance_submit_command(vn_instance, submit);
   1027         if (cmd_data != local_cmd_data)
   1028             free(cmd_data);
   1029     }
   1030 }
   1031 
   1032 static inline void vn_submit_vkWriteRingExtraMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, uint64_t ring, size_t offset, uint32_t value, struct vn_instance_submit_command *submit)
   1033 {
   1034     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1035     void *cmd_data = local_cmd_data;
   1036     size_t cmd_size = vn_sizeof_vkWriteRingExtraMESA(ring, offset, value);
   1037     if (cmd_size > sizeof(local_cmd_data)) {
   1038         cmd_data = malloc(cmd_size);
   1039         if (!cmd_data)
   1040             cmd_size = 0;
   1041     }
   1042     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkWriteRingExtraMESA_reply(ring, offset, value) : 0;
   1043 
   1044     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1045     if (cmd_size) {
   1046         vn_encode_vkWriteRingExtraMESA(enc, cmd_flags, ring, offset, value);
   1047         vn_instance_submit_command(vn_instance, submit);
   1048         if (cmd_data != local_cmd_data)
   1049             free(cmd_data);
   1050     }
   1051 }
   1052 
   1053 static inline void vn_submit_vkGetMemoryResourcePropertiesMESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties, struct vn_instance_submit_command *submit)
   1054 {
   1055     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1056     void *cmd_data = local_cmd_data;
   1057     size_t cmd_size = vn_sizeof_vkGetMemoryResourcePropertiesMESA(device, resourceId, pMemoryResourceProperties);
   1058     if (cmd_size > sizeof(local_cmd_data)) {
   1059         cmd_data = malloc(cmd_size);
   1060         if (!cmd_data)
   1061             cmd_size = 0;
   1062     }
   1063     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkGetMemoryResourcePropertiesMESA_reply(device, resourceId, pMemoryResourceProperties) : 0;
   1064 
   1065     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1066     if (cmd_size) {
   1067         vn_encode_vkGetMemoryResourcePropertiesMESA(enc, cmd_flags, device, resourceId, pMemoryResourceProperties);
   1068         vn_instance_submit_command(vn_instance, submit);
   1069         if (cmd_data != local_cmd_data)
   1070             free(cmd_data);
   1071     }
   1072 }
   1073 
   1074 static inline void vn_submit_vkGetVenusExperimentalFeatureData100000MESA(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, size_t* pDataSize, void* pData, struct vn_instance_submit_command *submit)
   1075 {
   1076     uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
   1077     void *cmd_data = local_cmd_data;
   1078     size_t cmd_size = vn_sizeof_vkGetVenusExperimentalFeatureData100000MESA(pDataSize, pData);
   1079     if (cmd_size > sizeof(local_cmd_data)) {
   1080         cmd_data = malloc(cmd_size);
   1081         if (!cmd_data)
   1082             cmd_size = 0;
   1083     }
   1084     const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkGetVenusExperimentalFeatureData100000MESA_reply(pDataSize, pData) : 0;
   1085 
   1086     struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
   1087     if (cmd_size) {
   1088         vn_encode_vkGetVenusExperimentalFeatureData100000MESA(enc, cmd_flags, pDataSize, pData);
   1089         vn_instance_submit_command(vn_instance, submit);
   1090         if (cmd_data != local_cmd_data)
   1091             free(cmd_data);
   1092     }
   1093 }
   1094 
   1095 static inline void vn_call_vkSetReplyCommandStreamMESA(struct vn_instance *vn_instance, const VkCommandStreamDescriptionMESA* pStream)
   1096 {
   1097     VN_TRACE_FUNC();
   1098 
   1099     struct vn_instance_submit_command submit;
   1100     vn_submit_vkSetReplyCommandStreamMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, pStream, &submit);
   1101     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1102     if (dec) {
   1103         vn_decode_vkSetReplyCommandStreamMESA_reply(dec, pStream);
   1104         vn_instance_free_command_reply(vn_instance, &submit);
   1105     }
   1106 }
   1107 
   1108 static inline void vn_async_vkSetReplyCommandStreamMESA(struct vn_instance *vn_instance, const VkCommandStreamDescriptionMESA* pStream)
   1109 {
   1110     struct vn_instance_submit_command submit;
   1111     vn_submit_vkSetReplyCommandStreamMESA(vn_instance, 0, pStream, &submit);
   1112 }
   1113 
   1114 static inline void vn_call_vkSeekReplyCommandStreamMESA(struct vn_instance *vn_instance, size_t position)
   1115 {
   1116     VN_TRACE_FUNC();
   1117 
   1118     struct vn_instance_submit_command submit;
   1119     vn_submit_vkSeekReplyCommandStreamMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, position, &submit);
   1120     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1121     if (dec) {
   1122         vn_decode_vkSeekReplyCommandStreamMESA_reply(dec, position);
   1123         vn_instance_free_command_reply(vn_instance, &submit);
   1124     }
   1125 }
   1126 
   1127 static inline void vn_async_vkSeekReplyCommandStreamMESA(struct vn_instance *vn_instance, size_t position)
   1128 {
   1129     struct vn_instance_submit_command submit;
   1130     vn_submit_vkSeekReplyCommandStreamMESA(vn_instance, 0, position, &submit);
   1131 }
   1132 
   1133 static inline void vn_call_vkExecuteCommandStreamsMESA(struct vn_instance *vn_instance, uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags)
   1134 {
   1135     VN_TRACE_FUNC();
   1136 
   1137     struct vn_instance_submit_command submit;
   1138     vn_submit_vkExecuteCommandStreamsMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, streamCount, pStreams, pReplyPositions, dependencyCount, pDependencies, flags, &submit);
   1139     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1140     if (dec) {
   1141         vn_decode_vkExecuteCommandStreamsMESA_reply(dec, streamCount, pStreams, pReplyPositions, dependencyCount, pDependencies, flags);
   1142         vn_instance_free_command_reply(vn_instance, &submit);
   1143     }
   1144 }
   1145 
   1146 static inline void vn_async_vkExecuteCommandStreamsMESA(struct vn_instance *vn_instance, uint32_t streamCount, const VkCommandStreamDescriptionMESA* pStreams, const size_t* pReplyPositions, uint32_t dependencyCount, const VkCommandStreamDependencyMESA* pDependencies, VkCommandStreamExecutionFlagsMESA flags)
   1147 {
   1148     struct vn_instance_submit_command submit;
   1149     vn_submit_vkExecuteCommandStreamsMESA(vn_instance, 0, streamCount, pStreams, pReplyPositions, dependencyCount, pDependencies, flags, &submit);
   1150 }
   1151 
   1152 static inline void vn_call_vkCreateRingMESA(struct vn_instance *vn_instance, uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo)
   1153 {
   1154     VN_TRACE_FUNC();
   1155 
   1156     struct vn_instance_submit_command submit;
   1157     vn_submit_vkCreateRingMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, ring, pCreateInfo, &submit);
   1158     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1159     if (dec) {
   1160         vn_decode_vkCreateRingMESA_reply(dec, ring, pCreateInfo);
   1161         vn_instance_free_command_reply(vn_instance, &submit);
   1162     }
   1163 }
   1164 
   1165 static inline void vn_async_vkCreateRingMESA(struct vn_instance *vn_instance, uint64_t ring, const VkRingCreateInfoMESA* pCreateInfo)
   1166 {
   1167     struct vn_instance_submit_command submit;
   1168     vn_submit_vkCreateRingMESA(vn_instance, 0, ring, pCreateInfo, &submit);
   1169 }
   1170 
   1171 static inline void vn_call_vkDestroyRingMESA(struct vn_instance *vn_instance, uint64_t ring)
   1172 {
   1173     VN_TRACE_FUNC();
   1174 
   1175     struct vn_instance_submit_command submit;
   1176     vn_submit_vkDestroyRingMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, ring, &submit);
   1177     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1178     if (dec) {
   1179         vn_decode_vkDestroyRingMESA_reply(dec, ring);
   1180         vn_instance_free_command_reply(vn_instance, &submit);
   1181     }
   1182 }
   1183 
   1184 static inline void vn_async_vkDestroyRingMESA(struct vn_instance *vn_instance, uint64_t ring)
   1185 {
   1186     struct vn_instance_submit_command submit;
   1187     vn_submit_vkDestroyRingMESA(vn_instance, 0, ring, &submit);
   1188 }
   1189 
   1190 static inline void vn_call_vkNotifyRingMESA(struct vn_instance *vn_instance, uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags)
   1191 {
   1192     VN_TRACE_FUNC();
   1193 
   1194     struct vn_instance_submit_command submit;
   1195     vn_submit_vkNotifyRingMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, ring, seqno, flags, &submit);
   1196     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1197     if (dec) {
   1198         vn_decode_vkNotifyRingMESA_reply(dec, ring, seqno, flags);
   1199         vn_instance_free_command_reply(vn_instance, &submit);
   1200     }
   1201 }
   1202 
   1203 static inline void vn_async_vkNotifyRingMESA(struct vn_instance *vn_instance, uint64_t ring, uint32_t seqno, VkRingNotifyFlagsMESA flags)
   1204 {
   1205     struct vn_instance_submit_command submit;
   1206     vn_submit_vkNotifyRingMESA(vn_instance, 0, ring, seqno, flags, &submit);
   1207 }
   1208 
   1209 static inline void vn_call_vkWriteRingExtraMESA(struct vn_instance *vn_instance, uint64_t ring, size_t offset, uint32_t value)
   1210 {
   1211     VN_TRACE_FUNC();
   1212 
   1213     struct vn_instance_submit_command submit;
   1214     vn_submit_vkWriteRingExtraMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, ring, offset, value, &submit);
   1215     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1216     if (dec) {
   1217         vn_decode_vkWriteRingExtraMESA_reply(dec, ring, offset, value);
   1218         vn_instance_free_command_reply(vn_instance, &submit);
   1219     }
   1220 }
   1221 
   1222 static inline void vn_async_vkWriteRingExtraMESA(struct vn_instance *vn_instance, uint64_t ring, size_t offset, uint32_t value)
   1223 {
   1224     struct vn_instance_submit_command submit;
   1225     vn_submit_vkWriteRingExtraMESA(vn_instance, 0, ring, offset, value, &submit);
   1226 }
   1227 
   1228 static inline VkResult vn_call_vkGetMemoryResourcePropertiesMESA(struct vn_instance *vn_instance, VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties)
   1229 {
   1230     VN_TRACE_FUNC();
   1231 
   1232     struct vn_instance_submit_command submit;
   1233     vn_submit_vkGetMemoryResourcePropertiesMESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, resourceId, pMemoryResourceProperties, &submit);
   1234     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1235     if (dec) {
   1236         const VkResult ret = vn_decode_vkGetMemoryResourcePropertiesMESA_reply(dec, device, resourceId, pMemoryResourceProperties);
   1237         vn_instance_free_command_reply(vn_instance, &submit);
   1238         return ret;
   1239     } else {
   1240         return VK_ERROR_OUT_OF_HOST_MEMORY;
   1241     }
   1242 }
   1243 
   1244 static inline void vn_async_vkGetMemoryResourcePropertiesMESA(struct vn_instance *vn_instance, VkDevice device, uint32_t resourceId, VkMemoryResourcePropertiesMESA* pMemoryResourceProperties)
   1245 {
   1246     struct vn_instance_submit_command submit;
   1247     vn_submit_vkGetMemoryResourcePropertiesMESA(vn_instance, 0, device, resourceId, pMemoryResourceProperties, &submit);
   1248 }
   1249 
   1250 static inline void vn_call_vkGetVenusExperimentalFeatureData100000MESA(struct vn_instance *vn_instance, size_t* pDataSize, void* pData)
   1251 {
   1252     VN_TRACE_FUNC();
   1253 
   1254     struct vn_instance_submit_command submit;
   1255     vn_submit_vkGetVenusExperimentalFeatureData100000MESA(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, pDataSize, pData, &submit);
   1256     struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
   1257     if (dec) {
   1258         vn_decode_vkGetVenusExperimentalFeatureData100000MESA_reply(dec, pDataSize, pData);
   1259         vn_instance_free_command_reply(vn_instance, &submit);
   1260     }
   1261 }
   1262 
   1263 static inline void vn_async_vkGetVenusExperimentalFeatureData100000MESA(struct vn_instance *vn_instance, size_t* pDataSize, void* pData)
   1264 {
   1265     struct vn_instance_submit_command submit;
   1266     vn_submit_vkGetVenusExperimentalFeatureData100000MESA(vn_instance, 0, pDataSize, pData, &submit);
   1267 }
   1268 
   1269 #endif /* VN_PROTOCOL_DRIVER_TRANSPORT_H */
   1270