Path: blob/21.2-virgl/src/virtio/venus-protocol/vn_protocol_driver_descriptor_set.h
4560 views
/* This file is generated by venus-protocol. See vn_protocol_driver.h. */12/*3* Copyright 2020 Google LLC4* SPDX-License-Identifier: MIT5*/67#ifndef VN_PROTOCOL_DRIVER_DESCRIPTOR_SET_H8#define VN_PROTOCOL_DRIVER_DESCRIPTOR_SET_H910#include "vn_device.h"11#include "vn_protocol_driver_structs.h"1213/*14* These structs/unions/commands are not included15*16* vkUpdateDescriptorSetWithTemplate17*/1819/* struct VkDescriptorSetVariableDescriptorCountAllocateInfo chain */2021static inline size_t22vn_sizeof_VkDescriptorSetVariableDescriptorCountAllocateInfo_pnext(const void *val)23{24/* no known/supported struct */25return vn_sizeof_simple_pointer(NULL);26}2728static inline size_t29vn_sizeof_VkDescriptorSetVariableDescriptorCountAllocateInfo_self(const VkDescriptorSetVariableDescriptorCountAllocateInfo *val)30{31size_t size = 0;32/* skip val->{sType,pNext} */33size += vn_sizeof_uint32_t(&val->descriptorSetCount);34if (val->pDescriptorCounts) {35size += vn_sizeof_array_size(val->descriptorSetCount);36size += vn_sizeof_uint32_t_array(val->pDescriptorCounts, val->descriptorSetCount);37} else {38size += vn_sizeof_array_size(0);39}40return size;41}4243static inline size_t44vn_sizeof_VkDescriptorSetVariableDescriptorCountAllocateInfo(const VkDescriptorSetVariableDescriptorCountAllocateInfo *val)45{46size_t size = 0;4748size += vn_sizeof_VkStructureType(&val->sType);49size += vn_sizeof_VkDescriptorSetVariableDescriptorCountAllocateInfo_pnext(val->pNext);50size += vn_sizeof_VkDescriptorSetVariableDescriptorCountAllocateInfo_self(val);5152return size;53}5455static inline void56vn_encode_VkDescriptorSetVariableDescriptorCountAllocateInfo_pnext(struct vn_cs_encoder *enc, const void *val)57{58/* no known/supported struct */59vn_encode_simple_pointer(enc, NULL);60}6162static inline void63vn_encode_VkDescriptorSetVariableDescriptorCountAllocateInfo_self(struct vn_cs_encoder *enc, const VkDescriptorSetVariableDescriptorCountAllocateInfo *val)64{65/* skip val->{sType,pNext} */66vn_encode_uint32_t(enc, &val->descriptorSetCount);67if (val->pDescriptorCounts) {68vn_encode_array_size(enc, val->descriptorSetCount);69vn_encode_uint32_t_array(enc, val->pDescriptorCounts, val->descriptorSetCount);70} else {71vn_encode_array_size(enc, 0);72}73}7475static inline void76vn_encode_VkDescriptorSetVariableDescriptorCountAllocateInfo(struct vn_cs_encoder *enc, const VkDescriptorSetVariableDescriptorCountAllocateInfo *val)77{78assert(val->sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO);79vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO });80vn_encode_VkDescriptorSetVariableDescriptorCountAllocateInfo_pnext(enc, val->pNext);81vn_encode_VkDescriptorSetVariableDescriptorCountAllocateInfo_self(enc, val);82}8384/* struct VkDescriptorSetAllocateInfo chain */8586static inline size_t87vn_sizeof_VkDescriptorSetAllocateInfo_pnext(const void *val)88{89const VkBaseInStructure *pnext = val;90size_t size = 0;9192while (pnext) {93switch ((int32_t)pnext->sType) {94case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:95size += vn_sizeof_simple_pointer(pnext);96size += vn_sizeof_VkStructureType(&pnext->sType);97size += vn_sizeof_VkDescriptorSetAllocateInfo_pnext(pnext->pNext);98size += vn_sizeof_VkDescriptorSetVariableDescriptorCountAllocateInfo_self((const VkDescriptorSetVariableDescriptorCountAllocateInfo *)pnext);99return size;100default:101/* ignore unknown/unsupported struct */102break;103}104pnext = pnext->pNext;105}106107return vn_sizeof_simple_pointer(NULL);108}109110static inline size_t111vn_sizeof_VkDescriptorSetAllocateInfo_self(const VkDescriptorSetAllocateInfo *val)112{113size_t size = 0;114/* skip val->{sType,pNext} */115size += vn_sizeof_VkDescriptorPool(&val->descriptorPool);116size += vn_sizeof_uint32_t(&val->descriptorSetCount);117if (val->pSetLayouts) {118size += vn_sizeof_array_size(val->descriptorSetCount);119for (uint32_t i = 0; i < val->descriptorSetCount; i++)120size += vn_sizeof_VkDescriptorSetLayout(&val->pSetLayouts[i]);121} else {122size += vn_sizeof_array_size(0);123}124return size;125}126127static inline size_t128vn_sizeof_VkDescriptorSetAllocateInfo(const VkDescriptorSetAllocateInfo *val)129{130size_t size = 0;131132size += vn_sizeof_VkStructureType(&val->sType);133size += vn_sizeof_VkDescriptorSetAllocateInfo_pnext(val->pNext);134size += vn_sizeof_VkDescriptorSetAllocateInfo_self(val);135136return size;137}138139static inline void140vn_encode_VkDescriptorSetAllocateInfo_pnext(struct vn_cs_encoder *enc, const void *val)141{142const VkBaseInStructure *pnext = val;143144while (pnext) {145switch ((int32_t)pnext->sType) {146case VK_STRUCTURE_TYPE_DESCRIPTOR_SET_VARIABLE_DESCRIPTOR_COUNT_ALLOCATE_INFO:147vn_encode_simple_pointer(enc, pnext);148vn_encode_VkStructureType(enc, &pnext->sType);149vn_encode_VkDescriptorSetAllocateInfo_pnext(enc, pnext->pNext);150vn_encode_VkDescriptorSetVariableDescriptorCountAllocateInfo_self(enc, (const VkDescriptorSetVariableDescriptorCountAllocateInfo *)pnext);151return;152default:153/* ignore unknown/unsupported struct */154break;155}156pnext = pnext->pNext;157}158159vn_encode_simple_pointer(enc, NULL);160}161162static inline void163vn_encode_VkDescriptorSetAllocateInfo_self(struct vn_cs_encoder *enc, const VkDescriptorSetAllocateInfo *val)164{165/* skip val->{sType,pNext} */166vn_encode_VkDescriptorPool(enc, &val->descriptorPool);167vn_encode_uint32_t(enc, &val->descriptorSetCount);168if (val->pSetLayouts) {169vn_encode_array_size(enc, val->descriptorSetCount);170for (uint32_t i = 0; i < val->descriptorSetCount; i++)171vn_encode_VkDescriptorSetLayout(enc, &val->pSetLayouts[i]);172} else {173vn_encode_array_size(enc, 0);174}175}176177static inline void178vn_encode_VkDescriptorSetAllocateInfo(struct vn_cs_encoder *enc, const VkDescriptorSetAllocateInfo *val)179{180assert(val->sType == VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO);181vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DESCRIPTOR_SET_ALLOCATE_INFO });182vn_encode_VkDescriptorSetAllocateInfo_pnext(enc, val->pNext);183vn_encode_VkDescriptorSetAllocateInfo_self(enc, val);184}185186/* struct VkDescriptorImageInfo */187188static inline size_t189vn_sizeof_VkDescriptorImageInfo(const VkDescriptorImageInfo *val)190{191size_t size = 0;192size += vn_sizeof_VkSampler(&val->sampler);193size += vn_sizeof_VkImageView(&val->imageView);194size += vn_sizeof_VkImageLayout(&val->imageLayout);195return size;196}197198static inline void199vn_encode_VkDescriptorImageInfo(struct vn_cs_encoder *enc, const VkDescriptorImageInfo *val)200{201vn_encode_VkSampler(enc, &val->sampler);202vn_encode_VkImageView(enc, &val->imageView);203vn_encode_VkImageLayout(enc, &val->imageLayout);204}205206/* struct VkDescriptorBufferInfo */207208static inline size_t209vn_sizeof_VkDescriptorBufferInfo(const VkDescriptorBufferInfo *val)210{211size_t size = 0;212size += vn_sizeof_VkBuffer(&val->buffer);213size += vn_sizeof_VkDeviceSize(&val->offset);214size += vn_sizeof_VkDeviceSize(&val->range);215return size;216}217218static inline void219vn_encode_VkDescriptorBufferInfo(struct vn_cs_encoder *enc, const VkDescriptorBufferInfo *val)220{221vn_encode_VkBuffer(enc, &val->buffer);222vn_encode_VkDeviceSize(enc, &val->offset);223vn_encode_VkDeviceSize(enc, &val->range);224}225226/* struct VkWriteDescriptorSet chain */227228static inline size_t229vn_sizeof_VkWriteDescriptorSet_pnext(const void *val)230{231/* no known/supported struct */232return vn_sizeof_simple_pointer(NULL);233}234235static inline size_t236vn_sizeof_VkWriteDescriptorSet_self(const VkWriteDescriptorSet *val)237{238size_t size = 0;239/* skip val->{sType,pNext} */240size += vn_sizeof_VkDescriptorSet(&val->dstSet);241size += vn_sizeof_uint32_t(&val->dstBinding);242size += vn_sizeof_uint32_t(&val->dstArrayElement);243size += vn_sizeof_uint32_t(&val->descriptorCount);244size += vn_sizeof_VkDescriptorType(&val->descriptorType);245if (val->pImageInfo) {246size += vn_sizeof_array_size(val->descriptorCount);247for (uint32_t i = 0; i < val->descriptorCount; i++)248size += vn_sizeof_VkDescriptorImageInfo(&val->pImageInfo[i]);249} else {250size += vn_sizeof_array_size(0);251}252if (val->pBufferInfo) {253size += vn_sizeof_array_size(val->descriptorCount);254for (uint32_t i = 0; i < val->descriptorCount; i++)255size += vn_sizeof_VkDescriptorBufferInfo(&val->pBufferInfo[i]);256} else {257size += vn_sizeof_array_size(0);258}259if (val->pTexelBufferView) {260size += vn_sizeof_array_size(val->descriptorCount);261for (uint32_t i = 0; i < val->descriptorCount; i++)262size += vn_sizeof_VkBufferView(&val->pTexelBufferView[i]);263} else {264size += vn_sizeof_array_size(0);265}266return size;267}268269static inline size_t270vn_sizeof_VkWriteDescriptorSet(const VkWriteDescriptorSet *val)271{272size_t size = 0;273274size += vn_sizeof_VkStructureType(&val->sType);275size += vn_sizeof_VkWriteDescriptorSet_pnext(val->pNext);276size += vn_sizeof_VkWriteDescriptorSet_self(val);277278return size;279}280281static inline void282vn_encode_VkWriteDescriptorSet_pnext(struct vn_cs_encoder *enc, const void *val)283{284/* no known/supported struct */285vn_encode_simple_pointer(enc, NULL);286}287288static inline void289vn_encode_VkWriteDescriptorSet_self(struct vn_cs_encoder *enc, const VkWriteDescriptorSet *val)290{291/* skip val->{sType,pNext} */292vn_encode_VkDescriptorSet(enc, &val->dstSet);293vn_encode_uint32_t(enc, &val->dstBinding);294vn_encode_uint32_t(enc, &val->dstArrayElement);295vn_encode_uint32_t(enc, &val->descriptorCount);296vn_encode_VkDescriptorType(enc, &val->descriptorType);297if (val->pImageInfo) {298vn_encode_array_size(enc, val->descriptorCount);299for (uint32_t i = 0; i < val->descriptorCount; i++)300vn_encode_VkDescriptorImageInfo(enc, &val->pImageInfo[i]);301} else {302vn_encode_array_size(enc, 0);303}304if (val->pBufferInfo) {305vn_encode_array_size(enc, val->descriptorCount);306for (uint32_t i = 0; i < val->descriptorCount; i++)307vn_encode_VkDescriptorBufferInfo(enc, &val->pBufferInfo[i]);308} else {309vn_encode_array_size(enc, 0);310}311if (val->pTexelBufferView) {312vn_encode_array_size(enc, val->descriptorCount);313for (uint32_t i = 0; i < val->descriptorCount; i++)314vn_encode_VkBufferView(enc, &val->pTexelBufferView[i]);315} else {316vn_encode_array_size(enc, 0);317}318}319320static inline void321vn_encode_VkWriteDescriptorSet(struct vn_cs_encoder *enc, const VkWriteDescriptorSet *val)322{323assert(val->sType == VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET);324vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET });325vn_encode_VkWriteDescriptorSet_pnext(enc, val->pNext);326vn_encode_VkWriteDescriptorSet_self(enc, val);327}328329/* struct VkCopyDescriptorSet chain */330331static inline size_t332vn_sizeof_VkCopyDescriptorSet_pnext(const void *val)333{334/* no known/supported struct */335return vn_sizeof_simple_pointer(NULL);336}337338static inline size_t339vn_sizeof_VkCopyDescriptorSet_self(const VkCopyDescriptorSet *val)340{341size_t size = 0;342/* skip val->{sType,pNext} */343size += vn_sizeof_VkDescriptorSet(&val->srcSet);344size += vn_sizeof_uint32_t(&val->srcBinding);345size += vn_sizeof_uint32_t(&val->srcArrayElement);346size += vn_sizeof_VkDescriptorSet(&val->dstSet);347size += vn_sizeof_uint32_t(&val->dstBinding);348size += vn_sizeof_uint32_t(&val->dstArrayElement);349size += vn_sizeof_uint32_t(&val->descriptorCount);350return size;351}352353static inline size_t354vn_sizeof_VkCopyDescriptorSet(const VkCopyDescriptorSet *val)355{356size_t size = 0;357358size += vn_sizeof_VkStructureType(&val->sType);359size += vn_sizeof_VkCopyDescriptorSet_pnext(val->pNext);360size += vn_sizeof_VkCopyDescriptorSet_self(val);361362return size;363}364365static inline void366vn_encode_VkCopyDescriptorSet_pnext(struct vn_cs_encoder *enc, const void *val)367{368/* no known/supported struct */369vn_encode_simple_pointer(enc, NULL);370}371372static inline void373vn_encode_VkCopyDescriptorSet_self(struct vn_cs_encoder *enc, const VkCopyDescriptorSet *val)374{375/* skip val->{sType,pNext} */376vn_encode_VkDescriptorSet(enc, &val->srcSet);377vn_encode_uint32_t(enc, &val->srcBinding);378vn_encode_uint32_t(enc, &val->srcArrayElement);379vn_encode_VkDescriptorSet(enc, &val->dstSet);380vn_encode_uint32_t(enc, &val->dstBinding);381vn_encode_uint32_t(enc, &val->dstArrayElement);382vn_encode_uint32_t(enc, &val->descriptorCount);383}384385static inline void386vn_encode_VkCopyDescriptorSet(struct vn_cs_encoder *enc, const VkCopyDescriptorSet *val)387{388assert(val->sType == VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET);389vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_COPY_DESCRIPTOR_SET });390vn_encode_VkCopyDescriptorSet_pnext(enc, val->pNext);391vn_encode_VkCopyDescriptorSet_self(enc, val);392}393394static inline size_t vn_sizeof_vkAllocateDescriptorSets(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)395{396const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkAllocateDescriptorSets_EXT;397const VkFlags cmd_flags = 0;398size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);399400cmd_size += vn_sizeof_VkDevice(&device);401cmd_size += vn_sizeof_simple_pointer(pAllocateInfo);402if (pAllocateInfo)403cmd_size += vn_sizeof_VkDescriptorSetAllocateInfo(pAllocateInfo);404if (pDescriptorSets) {405cmd_size += vn_sizeof_array_size(pAllocateInfo->descriptorSetCount);406for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)407cmd_size += vn_sizeof_VkDescriptorSet(&pDescriptorSets[i]);408} else {409cmd_size += vn_sizeof_array_size(0);410}411412return cmd_size;413}414415static inline void vn_encode_vkAllocateDescriptorSets(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)416{417const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkAllocateDescriptorSets_EXT;418419vn_encode_VkCommandTypeEXT(enc, &cmd_type);420vn_encode_VkFlags(enc, &cmd_flags);421422vn_encode_VkDevice(enc, &device);423if (vn_encode_simple_pointer(enc, pAllocateInfo))424vn_encode_VkDescriptorSetAllocateInfo(enc, pAllocateInfo);425if (pDescriptorSets) {426vn_encode_array_size(enc, pAllocateInfo->descriptorSetCount);427for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)428vn_encode_VkDescriptorSet(enc, &pDescriptorSets[i]);429} else {430vn_encode_array_size(enc, 0);431}432}433434static inline size_t vn_sizeof_vkAllocateDescriptorSets_reply(VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)435{436const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkAllocateDescriptorSets_EXT;437size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);438439VkResult ret;440cmd_size += vn_sizeof_VkResult(&ret);441/* skip device */442/* skip pAllocateInfo */443if (pDescriptorSets) {444cmd_size += vn_sizeof_array_size(pAllocateInfo->descriptorSetCount);445for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)446cmd_size += vn_sizeof_VkDescriptorSet(&pDescriptorSets[i]);447} else {448cmd_size += vn_sizeof_array_size(0);449}450451return cmd_size;452}453454static inline VkResult vn_decode_vkAllocateDescriptorSets_reply(struct vn_cs_decoder *dec, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)455{456VkCommandTypeEXT command_type;457vn_decode_VkCommandTypeEXT(dec, &command_type);458assert(command_type == VK_COMMAND_TYPE_vkAllocateDescriptorSets_EXT);459460VkResult ret;461vn_decode_VkResult(dec, &ret);462/* skip device */463/* skip pAllocateInfo */464if (vn_peek_array_size(dec)) {465vn_decode_array_size(dec, pAllocateInfo->descriptorSetCount);466for (uint32_t i = 0; i < pAllocateInfo->descriptorSetCount; i++)467vn_decode_VkDescriptorSet(dec, &pDescriptorSets[i]);468} else {469vn_decode_array_size(dec, 0);470pDescriptorSets = NULL;471}472473return ret;474}475476static inline size_t vn_sizeof_vkFreeDescriptorSets(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)477{478const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFreeDescriptorSets_EXT;479const VkFlags cmd_flags = 0;480size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);481482cmd_size += vn_sizeof_VkDevice(&device);483cmd_size += vn_sizeof_VkDescriptorPool(&descriptorPool);484cmd_size += vn_sizeof_uint32_t(&descriptorSetCount);485if (pDescriptorSets) {486cmd_size += vn_sizeof_array_size(descriptorSetCount);487for (uint32_t i = 0; i < descriptorSetCount; i++)488cmd_size += vn_sizeof_VkDescriptorSet(&pDescriptorSets[i]);489} else {490cmd_size += vn_sizeof_array_size(0);491}492493return cmd_size;494}495496static inline void vn_encode_vkFreeDescriptorSets(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)497{498const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFreeDescriptorSets_EXT;499500vn_encode_VkCommandTypeEXT(enc, &cmd_type);501vn_encode_VkFlags(enc, &cmd_flags);502503vn_encode_VkDevice(enc, &device);504vn_encode_VkDescriptorPool(enc, &descriptorPool);505vn_encode_uint32_t(enc, &descriptorSetCount);506if (pDescriptorSets) {507vn_encode_array_size(enc, descriptorSetCount);508for (uint32_t i = 0; i < descriptorSetCount; i++)509vn_encode_VkDescriptorSet(enc, &pDescriptorSets[i]);510} else {511vn_encode_array_size(enc, 0);512}513}514515static inline size_t vn_sizeof_vkFreeDescriptorSets_reply(VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)516{517const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkFreeDescriptorSets_EXT;518size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);519520VkResult ret;521cmd_size += vn_sizeof_VkResult(&ret);522/* skip device */523/* skip descriptorPool */524/* skip descriptorSetCount */525/* skip pDescriptorSets */526527return cmd_size;528}529530static inline VkResult vn_decode_vkFreeDescriptorSets_reply(struct vn_cs_decoder *dec, VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)531{532VkCommandTypeEXT command_type;533vn_decode_VkCommandTypeEXT(dec, &command_type);534assert(command_type == VK_COMMAND_TYPE_vkFreeDescriptorSets_EXT);535536VkResult ret;537vn_decode_VkResult(dec, &ret);538/* skip device */539/* skip descriptorPool */540/* skip descriptorSetCount */541/* skip pDescriptorSets */542543return ret;544}545546static inline size_t vn_sizeof_vkUpdateDescriptorSets(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)547{548const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkUpdateDescriptorSets_EXT;549const VkFlags cmd_flags = 0;550size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);551552cmd_size += vn_sizeof_VkDevice(&device);553cmd_size += vn_sizeof_uint32_t(&descriptorWriteCount);554if (pDescriptorWrites) {555cmd_size += vn_sizeof_array_size(descriptorWriteCount);556for (uint32_t i = 0; i < descriptorWriteCount; i++)557cmd_size += vn_sizeof_VkWriteDescriptorSet(&pDescriptorWrites[i]);558} else {559cmd_size += vn_sizeof_array_size(0);560}561cmd_size += vn_sizeof_uint32_t(&descriptorCopyCount);562if (pDescriptorCopies) {563cmd_size += vn_sizeof_array_size(descriptorCopyCount);564for (uint32_t i = 0; i < descriptorCopyCount; i++)565cmd_size += vn_sizeof_VkCopyDescriptorSet(&pDescriptorCopies[i]);566} else {567cmd_size += vn_sizeof_array_size(0);568}569570return cmd_size;571}572573static inline void vn_encode_vkUpdateDescriptorSets(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)574{575const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkUpdateDescriptorSets_EXT;576577vn_encode_VkCommandTypeEXT(enc, &cmd_type);578vn_encode_VkFlags(enc, &cmd_flags);579580vn_encode_VkDevice(enc, &device);581vn_encode_uint32_t(enc, &descriptorWriteCount);582if (pDescriptorWrites) {583vn_encode_array_size(enc, descriptorWriteCount);584for (uint32_t i = 0; i < descriptorWriteCount; i++)585vn_encode_VkWriteDescriptorSet(enc, &pDescriptorWrites[i]);586} else {587vn_encode_array_size(enc, 0);588}589vn_encode_uint32_t(enc, &descriptorCopyCount);590if (pDescriptorCopies) {591vn_encode_array_size(enc, descriptorCopyCount);592for (uint32_t i = 0; i < descriptorCopyCount; i++)593vn_encode_VkCopyDescriptorSet(enc, &pDescriptorCopies[i]);594} else {595vn_encode_array_size(enc, 0);596}597}598599static inline size_t vn_sizeof_vkUpdateDescriptorSets_reply(VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)600{601const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkUpdateDescriptorSets_EXT;602size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);603604/* skip device */605/* skip descriptorWriteCount */606/* skip pDescriptorWrites */607/* skip descriptorCopyCount */608/* skip pDescriptorCopies */609610return cmd_size;611}612613static inline void vn_decode_vkUpdateDescriptorSets_reply(struct vn_cs_decoder *dec, VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)614{615VkCommandTypeEXT command_type;616vn_decode_VkCommandTypeEXT(dec, &command_type);617assert(command_type == VK_COMMAND_TYPE_vkUpdateDescriptorSets_EXT);618619/* skip device */620/* skip descriptorWriteCount */621/* skip pDescriptorWrites */622/* skip descriptorCopyCount */623/* skip pDescriptorCopies */624}625626static inline void vn_submit_vkAllocateDescriptorSets(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets, struct vn_instance_submit_command *submit)627{628uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];629void *cmd_data = local_cmd_data;630size_t cmd_size = vn_sizeof_vkAllocateDescriptorSets(device, pAllocateInfo, pDescriptorSets);631if (cmd_size > sizeof(local_cmd_data)) {632cmd_data = malloc(cmd_size);633if (!cmd_data)634cmd_size = 0;635}636const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkAllocateDescriptorSets_reply(device, pAllocateInfo, pDescriptorSets) : 0;637638struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);639if (cmd_size) {640vn_encode_vkAllocateDescriptorSets(enc, cmd_flags, device, pAllocateInfo, pDescriptorSets);641vn_instance_submit_command(vn_instance, submit);642if (cmd_data != local_cmd_data)643free(cmd_data);644}645}646647static inline void vn_submit_vkFreeDescriptorSets(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets, struct vn_instance_submit_command *submit)648{649uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];650void *cmd_data = local_cmd_data;651size_t cmd_size = vn_sizeof_vkFreeDescriptorSets(device, descriptorPool, descriptorSetCount, pDescriptorSets);652if (cmd_size > sizeof(local_cmd_data)) {653cmd_data = malloc(cmd_size);654if (!cmd_data)655cmd_size = 0;656}657const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkFreeDescriptorSets_reply(device, descriptorPool, descriptorSetCount, pDescriptorSets) : 0;658659struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);660if (cmd_size) {661vn_encode_vkFreeDescriptorSets(enc, cmd_flags, device, descriptorPool, descriptorSetCount, pDescriptorSets);662vn_instance_submit_command(vn_instance, submit);663if (cmd_data != local_cmd_data)664free(cmd_data);665}666}667668static inline void vn_submit_vkUpdateDescriptorSets(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies, struct vn_instance_submit_command *submit)669{670uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];671void *cmd_data = local_cmd_data;672size_t cmd_size = vn_sizeof_vkUpdateDescriptorSets(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);673if (cmd_size > sizeof(local_cmd_data)) {674cmd_data = malloc(cmd_size);675if (!cmd_data)676cmd_size = 0;677}678const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkUpdateDescriptorSets_reply(device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies) : 0;679680struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);681if (cmd_size) {682vn_encode_vkUpdateDescriptorSets(enc, cmd_flags, device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);683vn_instance_submit_command(vn_instance, submit);684if (cmd_data != local_cmd_data)685free(cmd_data);686}687}688689static inline VkResult vn_call_vkAllocateDescriptorSets(struct vn_instance *vn_instance, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)690{691struct vn_instance_submit_command submit;692vn_submit_vkAllocateDescriptorSets(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pAllocateInfo, pDescriptorSets, &submit);693struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);694if (dec) {695const VkResult ret = vn_decode_vkAllocateDescriptorSets_reply(dec, device, pAllocateInfo, pDescriptorSets);696vn_instance_free_command_reply(vn_instance, &submit);697return ret;698} else {699return VK_ERROR_OUT_OF_HOST_MEMORY;700}701}702703static inline void vn_async_vkAllocateDescriptorSets(struct vn_instance *vn_instance, VkDevice device, const VkDescriptorSetAllocateInfo* pAllocateInfo, VkDescriptorSet* pDescriptorSets)704{705struct vn_instance_submit_command submit;706vn_submit_vkAllocateDescriptorSets(vn_instance, 0, device, pAllocateInfo, pDescriptorSets, &submit);707}708709static inline VkResult vn_call_vkFreeDescriptorSets(struct vn_instance *vn_instance, VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)710{711struct vn_instance_submit_command submit;712vn_submit_vkFreeDescriptorSets(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, descriptorPool, descriptorSetCount, pDescriptorSets, &submit);713struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);714if (dec) {715const VkResult ret = vn_decode_vkFreeDescriptorSets_reply(dec, device, descriptorPool, descriptorSetCount, pDescriptorSets);716vn_instance_free_command_reply(vn_instance, &submit);717return ret;718} else {719return VK_ERROR_OUT_OF_HOST_MEMORY;720}721}722723static inline void vn_async_vkFreeDescriptorSets(struct vn_instance *vn_instance, VkDevice device, VkDescriptorPool descriptorPool, uint32_t descriptorSetCount, const VkDescriptorSet* pDescriptorSets)724{725struct vn_instance_submit_command submit;726vn_submit_vkFreeDescriptorSets(vn_instance, 0, device, descriptorPool, descriptorSetCount, pDescriptorSets, &submit);727}728729static inline void vn_call_vkUpdateDescriptorSets(struct vn_instance *vn_instance, VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)730{731struct vn_instance_submit_command submit;732vn_submit_vkUpdateDescriptorSets(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies, &submit);733struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);734if (dec) {735vn_decode_vkUpdateDescriptorSets_reply(dec, device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies);736vn_instance_free_command_reply(vn_instance, &submit);737}738}739740static inline void vn_async_vkUpdateDescriptorSets(struct vn_instance *vn_instance, VkDevice device, uint32_t descriptorWriteCount, const VkWriteDescriptorSet* pDescriptorWrites, uint32_t descriptorCopyCount, const VkCopyDescriptorSet* pDescriptorCopies)741{742struct vn_instance_submit_command submit;743vn_submit_vkUpdateDescriptorSets(vn_instance, 0, device, descriptorWriteCount, pDescriptorWrites, descriptorCopyCount, pDescriptorCopies, &submit);744}745746#endif /* VN_PROTOCOL_DRIVER_DESCRIPTOR_SET_H */747748749