Path: blob/21.2-virgl/src/virtio/venus-protocol/vn_protocol_driver_queue.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_QUEUE_H8#define VN_PROTOCOL_DRIVER_QUEUE_H910#include "vn_device.h"11#include "vn_protocol_driver_structs.h"1213/* struct VkDeviceGroupSubmitInfo chain */1415static inline size_t16vn_sizeof_VkDeviceGroupSubmitInfo_pnext(const void *val)17{18/* no known/supported struct */19return vn_sizeof_simple_pointer(NULL);20}2122static inline size_t23vn_sizeof_VkDeviceGroupSubmitInfo_self(const VkDeviceGroupSubmitInfo *val)24{25size_t size = 0;26/* skip val->{sType,pNext} */27size += vn_sizeof_uint32_t(&val->waitSemaphoreCount);28if (val->pWaitSemaphoreDeviceIndices) {29size += vn_sizeof_array_size(val->waitSemaphoreCount);30size += vn_sizeof_uint32_t_array(val->pWaitSemaphoreDeviceIndices, val->waitSemaphoreCount);31} else {32size += vn_sizeof_array_size(0);33}34size += vn_sizeof_uint32_t(&val->commandBufferCount);35if (val->pCommandBufferDeviceMasks) {36size += vn_sizeof_array_size(val->commandBufferCount);37size += vn_sizeof_uint32_t_array(val->pCommandBufferDeviceMasks, val->commandBufferCount);38} else {39size += vn_sizeof_array_size(0);40}41size += vn_sizeof_uint32_t(&val->signalSemaphoreCount);42if (val->pSignalSemaphoreDeviceIndices) {43size += vn_sizeof_array_size(val->signalSemaphoreCount);44size += vn_sizeof_uint32_t_array(val->pSignalSemaphoreDeviceIndices, val->signalSemaphoreCount);45} else {46size += vn_sizeof_array_size(0);47}48return size;49}5051static inline size_t52vn_sizeof_VkDeviceGroupSubmitInfo(const VkDeviceGroupSubmitInfo *val)53{54size_t size = 0;5556size += vn_sizeof_VkStructureType(&val->sType);57size += vn_sizeof_VkDeviceGroupSubmitInfo_pnext(val->pNext);58size += vn_sizeof_VkDeviceGroupSubmitInfo_self(val);5960return size;61}6263static inline void64vn_encode_VkDeviceGroupSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)65{66/* no known/supported struct */67vn_encode_simple_pointer(enc, NULL);68}6970static inline void71vn_encode_VkDeviceGroupSubmitInfo_self(struct vn_cs_encoder *enc, const VkDeviceGroupSubmitInfo *val)72{73/* skip val->{sType,pNext} */74vn_encode_uint32_t(enc, &val->waitSemaphoreCount);75if (val->pWaitSemaphoreDeviceIndices) {76vn_encode_array_size(enc, val->waitSemaphoreCount);77vn_encode_uint32_t_array(enc, val->pWaitSemaphoreDeviceIndices, val->waitSemaphoreCount);78} else {79vn_encode_array_size(enc, 0);80}81vn_encode_uint32_t(enc, &val->commandBufferCount);82if (val->pCommandBufferDeviceMasks) {83vn_encode_array_size(enc, val->commandBufferCount);84vn_encode_uint32_t_array(enc, val->pCommandBufferDeviceMasks, val->commandBufferCount);85} else {86vn_encode_array_size(enc, 0);87}88vn_encode_uint32_t(enc, &val->signalSemaphoreCount);89if (val->pSignalSemaphoreDeviceIndices) {90vn_encode_array_size(enc, val->signalSemaphoreCount);91vn_encode_uint32_t_array(enc, val->pSignalSemaphoreDeviceIndices, val->signalSemaphoreCount);92} else {93vn_encode_array_size(enc, 0);94}95}9697static inline void98vn_encode_VkDeviceGroupSubmitInfo(struct vn_cs_encoder *enc, const VkDeviceGroupSubmitInfo *val)99{100assert(val->sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO);101vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO });102vn_encode_VkDeviceGroupSubmitInfo_pnext(enc, val->pNext);103vn_encode_VkDeviceGroupSubmitInfo_self(enc, val);104}105106/* struct VkProtectedSubmitInfo chain */107108static inline size_t109vn_sizeof_VkProtectedSubmitInfo_pnext(const void *val)110{111/* no known/supported struct */112return vn_sizeof_simple_pointer(NULL);113}114115static inline size_t116vn_sizeof_VkProtectedSubmitInfo_self(const VkProtectedSubmitInfo *val)117{118size_t size = 0;119/* skip val->{sType,pNext} */120size += vn_sizeof_VkBool32(&val->protectedSubmit);121return size;122}123124static inline size_t125vn_sizeof_VkProtectedSubmitInfo(const VkProtectedSubmitInfo *val)126{127size_t size = 0;128129size += vn_sizeof_VkStructureType(&val->sType);130size += vn_sizeof_VkProtectedSubmitInfo_pnext(val->pNext);131size += vn_sizeof_VkProtectedSubmitInfo_self(val);132133return size;134}135136static inline void137vn_encode_VkProtectedSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)138{139/* no known/supported struct */140vn_encode_simple_pointer(enc, NULL);141}142143static inline void144vn_encode_VkProtectedSubmitInfo_self(struct vn_cs_encoder *enc, const VkProtectedSubmitInfo *val)145{146/* skip val->{sType,pNext} */147vn_encode_VkBool32(enc, &val->protectedSubmit);148}149150static inline void151vn_encode_VkProtectedSubmitInfo(struct vn_cs_encoder *enc, const VkProtectedSubmitInfo *val)152{153assert(val->sType == VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO);154vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO });155vn_encode_VkProtectedSubmitInfo_pnext(enc, val->pNext);156vn_encode_VkProtectedSubmitInfo_self(enc, val);157}158159/* struct VkTimelineSemaphoreSubmitInfo chain */160161static inline size_t162vn_sizeof_VkTimelineSemaphoreSubmitInfo_pnext(const void *val)163{164/* no known/supported struct */165return vn_sizeof_simple_pointer(NULL);166}167168static inline size_t169vn_sizeof_VkTimelineSemaphoreSubmitInfo_self(const VkTimelineSemaphoreSubmitInfo *val)170{171size_t size = 0;172/* skip val->{sType,pNext} */173size += vn_sizeof_uint32_t(&val->waitSemaphoreValueCount);174if (val->pWaitSemaphoreValues) {175size += vn_sizeof_array_size(val->waitSemaphoreValueCount);176size += vn_sizeof_uint64_t_array(val->pWaitSemaphoreValues, val->waitSemaphoreValueCount);177} else {178size += vn_sizeof_array_size(0);179}180size += vn_sizeof_uint32_t(&val->signalSemaphoreValueCount);181if (val->pSignalSemaphoreValues) {182size += vn_sizeof_array_size(val->signalSemaphoreValueCount);183size += vn_sizeof_uint64_t_array(val->pSignalSemaphoreValues, val->signalSemaphoreValueCount);184} else {185size += vn_sizeof_array_size(0);186}187return size;188}189190static inline size_t191vn_sizeof_VkTimelineSemaphoreSubmitInfo(const VkTimelineSemaphoreSubmitInfo *val)192{193size_t size = 0;194195size += vn_sizeof_VkStructureType(&val->sType);196size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_pnext(val->pNext);197size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_self(val);198199return size;200}201202static inline void203vn_encode_VkTimelineSemaphoreSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)204{205/* no known/supported struct */206vn_encode_simple_pointer(enc, NULL);207}208209static inline void210vn_encode_VkTimelineSemaphoreSubmitInfo_self(struct vn_cs_encoder *enc, const VkTimelineSemaphoreSubmitInfo *val)211{212/* skip val->{sType,pNext} */213vn_encode_uint32_t(enc, &val->waitSemaphoreValueCount);214if (val->pWaitSemaphoreValues) {215vn_encode_array_size(enc, val->waitSemaphoreValueCount);216vn_encode_uint64_t_array(enc, val->pWaitSemaphoreValues, val->waitSemaphoreValueCount);217} else {218vn_encode_array_size(enc, 0);219}220vn_encode_uint32_t(enc, &val->signalSemaphoreValueCount);221if (val->pSignalSemaphoreValues) {222vn_encode_array_size(enc, val->signalSemaphoreValueCount);223vn_encode_uint64_t_array(enc, val->pSignalSemaphoreValues, val->signalSemaphoreValueCount);224} else {225vn_encode_array_size(enc, 0);226}227}228229static inline void230vn_encode_VkTimelineSemaphoreSubmitInfo(struct vn_cs_encoder *enc, const VkTimelineSemaphoreSubmitInfo *val)231{232assert(val->sType == VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO);233vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO });234vn_encode_VkTimelineSemaphoreSubmitInfo_pnext(enc, val->pNext);235vn_encode_VkTimelineSemaphoreSubmitInfo_self(enc, val);236}237238/* struct VkSubmitInfo chain */239240static inline size_t241vn_sizeof_VkSubmitInfo_pnext(const void *val)242{243const VkBaseInStructure *pnext = val;244size_t size = 0;245246while (pnext) {247switch ((int32_t)pnext->sType) {248case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:249size += vn_sizeof_simple_pointer(pnext);250size += vn_sizeof_VkStructureType(&pnext->sType);251size += vn_sizeof_VkSubmitInfo_pnext(pnext->pNext);252size += vn_sizeof_VkDeviceGroupSubmitInfo_self((const VkDeviceGroupSubmitInfo *)pnext);253return size;254case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:255size += vn_sizeof_simple_pointer(pnext);256size += vn_sizeof_VkStructureType(&pnext->sType);257size += vn_sizeof_VkSubmitInfo_pnext(pnext->pNext);258size += vn_sizeof_VkProtectedSubmitInfo_self((const VkProtectedSubmitInfo *)pnext);259return size;260case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:261size += vn_sizeof_simple_pointer(pnext);262size += vn_sizeof_VkStructureType(&pnext->sType);263size += vn_sizeof_VkSubmitInfo_pnext(pnext->pNext);264size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_self((const VkTimelineSemaphoreSubmitInfo *)pnext);265return size;266default:267/* ignore unknown/unsupported struct */268break;269}270pnext = pnext->pNext;271}272273return vn_sizeof_simple_pointer(NULL);274}275276static inline size_t277vn_sizeof_VkSubmitInfo_self(const VkSubmitInfo *val)278{279size_t size = 0;280/* skip val->{sType,pNext} */281size += vn_sizeof_uint32_t(&val->waitSemaphoreCount);282if (val->pWaitSemaphores) {283size += vn_sizeof_array_size(val->waitSemaphoreCount);284for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)285size += vn_sizeof_VkSemaphore(&val->pWaitSemaphores[i]);286} else {287size += vn_sizeof_array_size(0);288}289if (val->pWaitDstStageMask) {290size += vn_sizeof_array_size(val->waitSemaphoreCount);291for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)292size += vn_sizeof_VkFlags(&val->pWaitDstStageMask[i]);293} else {294size += vn_sizeof_array_size(0);295}296size += vn_sizeof_uint32_t(&val->commandBufferCount);297if (val->pCommandBuffers) {298size += vn_sizeof_array_size(val->commandBufferCount);299for (uint32_t i = 0; i < val->commandBufferCount; i++)300size += vn_sizeof_VkCommandBuffer(&val->pCommandBuffers[i]);301} else {302size += vn_sizeof_array_size(0);303}304size += vn_sizeof_uint32_t(&val->signalSemaphoreCount);305if (val->pSignalSemaphores) {306size += vn_sizeof_array_size(val->signalSemaphoreCount);307for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)308size += vn_sizeof_VkSemaphore(&val->pSignalSemaphores[i]);309} else {310size += vn_sizeof_array_size(0);311}312return size;313}314315static inline size_t316vn_sizeof_VkSubmitInfo(const VkSubmitInfo *val)317{318size_t size = 0;319320size += vn_sizeof_VkStructureType(&val->sType);321size += vn_sizeof_VkSubmitInfo_pnext(val->pNext);322size += vn_sizeof_VkSubmitInfo_self(val);323324return size;325}326327static inline void328vn_encode_VkSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)329{330const VkBaseInStructure *pnext = val;331332while (pnext) {333switch ((int32_t)pnext->sType) {334case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:335vn_encode_simple_pointer(enc, pnext);336vn_encode_VkStructureType(enc, &pnext->sType);337vn_encode_VkSubmitInfo_pnext(enc, pnext->pNext);338vn_encode_VkDeviceGroupSubmitInfo_self(enc, (const VkDeviceGroupSubmitInfo *)pnext);339return;340case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:341vn_encode_simple_pointer(enc, pnext);342vn_encode_VkStructureType(enc, &pnext->sType);343vn_encode_VkSubmitInfo_pnext(enc, pnext->pNext);344vn_encode_VkProtectedSubmitInfo_self(enc, (const VkProtectedSubmitInfo *)pnext);345return;346case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:347vn_encode_simple_pointer(enc, pnext);348vn_encode_VkStructureType(enc, &pnext->sType);349vn_encode_VkSubmitInfo_pnext(enc, pnext->pNext);350vn_encode_VkTimelineSemaphoreSubmitInfo_self(enc, (const VkTimelineSemaphoreSubmitInfo *)pnext);351return;352default:353/* ignore unknown/unsupported struct */354break;355}356pnext = pnext->pNext;357}358359vn_encode_simple_pointer(enc, NULL);360}361362static inline void363vn_encode_VkSubmitInfo_self(struct vn_cs_encoder *enc, const VkSubmitInfo *val)364{365/* skip val->{sType,pNext} */366vn_encode_uint32_t(enc, &val->waitSemaphoreCount);367if (val->pWaitSemaphores) {368vn_encode_array_size(enc, val->waitSemaphoreCount);369for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)370vn_encode_VkSemaphore(enc, &val->pWaitSemaphores[i]);371} else {372vn_encode_array_size(enc, 0);373}374if (val->pWaitDstStageMask) {375vn_encode_array_size(enc, val->waitSemaphoreCount);376for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)377vn_encode_VkFlags(enc, &val->pWaitDstStageMask[i]);378} else {379vn_encode_array_size(enc, 0);380}381vn_encode_uint32_t(enc, &val->commandBufferCount);382if (val->pCommandBuffers) {383vn_encode_array_size(enc, val->commandBufferCount);384for (uint32_t i = 0; i < val->commandBufferCount; i++)385vn_encode_VkCommandBuffer(enc, &val->pCommandBuffers[i]);386} else {387vn_encode_array_size(enc, 0);388}389vn_encode_uint32_t(enc, &val->signalSemaphoreCount);390if (val->pSignalSemaphores) {391vn_encode_array_size(enc, val->signalSemaphoreCount);392for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)393vn_encode_VkSemaphore(enc, &val->pSignalSemaphores[i]);394} else {395vn_encode_array_size(enc, 0);396}397}398399static inline void400vn_encode_VkSubmitInfo(struct vn_cs_encoder *enc, const VkSubmitInfo *val)401{402assert(val->sType == VK_STRUCTURE_TYPE_SUBMIT_INFO);403vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_SUBMIT_INFO });404vn_encode_VkSubmitInfo_pnext(enc, val->pNext);405vn_encode_VkSubmitInfo_self(enc, val);406}407408/* struct VkSparseMemoryBind */409410static inline size_t411vn_sizeof_VkSparseMemoryBind(const VkSparseMemoryBind *val)412{413size_t size = 0;414size += vn_sizeof_VkDeviceSize(&val->resourceOffset);415size += vn_sizeof_VkDeviceSize(&val->size);416size += vn_sizeof_VkDeviceMemory(&val->memory);417size += vn_sizeof_VkDeviceSize(&val->memoryOffset);418size += vn_sizeof_VkFlags(&val->flags);419return size;420}421422static inline void423vn_encode_VkSparseMemoryBind(struct vn_cs_encoder *enc, const VkSparseMemoryBind *val)424{425vn_encode_VkDeviceSize(enc, &val->resourceOffset);426vn_encode_VkDeviceSize(enc, &val->size);427vn_encode_VkDeviceMemory(enc, &val->memory);428vn_encode_VkDeviceSize(enc, &val->memoryOffset);429vn_encode_VkFlags(enc, &val->flags);430}431432/* struct VkSparseBufferMemoryBindInfo */433434static inline size_t435vn_sizeof_VkSparseBufferMemoryBindInfo(const VkSparseBufferMemoryBindInfo *val)436{437size_t size = 0;438size += vn_sizeof_VkBuffer(&val->buffer);439size += vn_sizeof_uint32_t(&val->bindCount);440if (val->pBinds) {441size += vn_sizeof_array_size(val->bindCount);442for (uint32_t i = 0; i < val->bindCount; i++)443size += vn_sizeof_VkSparseMemoryBind(&val->pBinds[i]);444} else {445size += vn_sizeof_array_size(0);446}447return size;448}449450static inline void451vn_encode_VkSparseBufferMemoryBindInfo(struct vn_cs_encoder *enc, const VkSparseBufferMemoryBindInfo *val)452{453vn_encode_VkBuffer(enc, &val->buffer);454vn_encode_uint32_t(enc, &val->bindCount);455if (val->pBinds) {456vn_encode_array_size(enc, val->bindCount);457for (uint32_t i = 0; i < val->bindCount; i++)458vn_encode_VkSparseMemoryBind(enc, &val->pBinds[i]);459} else {460vn_encode_array_size(enc, 0);461}462}463464/* struct VkSparseImageOpaqueMemoryBindInfo */465466static inline size_t467vn_sizeof_VkSparseImageOpaqueMemoryBindInfo(const VkSparseImageOpaqueMemoryBindInfo *val)468{469size_t size = 0;470size += vn_sizeof_VkImage(&val->image);471size += vn_sizeof_uint32_t(&val->bindCount);472if (val->pBinds) {473size += vn_sizeof_array_size(val->bindCount);474for (uint32_t i = 0; i < val->bindCount; i++)475size += vn_sizeof_VkSparseMemoryBind(&val->pBinds[i]);476} else {477size += vn_sizeof_array_size(0);478}479return size;480}481482static inline void483vn_encode_VkSparseImageOpaqueMemoryBindInfo(struct vn_cs_encoder *enc, const VkSparseImageOpaqueMemoryBindInfo *val)484{485vn_encode_VkImage(enc, &val->image);486vn_encode_uint32_t(enc, &val->bindCount);487if (val->pBinds) {488vn_encode_array_size(enc, val->bindCount);489for (uint32_t i = 0; i < val->bindCount; i++)490vn_encode_VkSparseMemoryBind(enc, &val->pBinds[i]);491} else {492vn_encode_array_size(enc, 0);493}494}495496/* struct VkSparseImageMemoryBind */497498static inline size_t499vn_sizeof_VkSparseImageMemoryBind(const VkSparseImageMemoryBind *val)500{501size_t size = 0;502size += vn_sizeof_VkImageSubresource(&val->subresource);503size += vn_sizeof_VkOffset3D(&val->offset);504size += vn_sizeof_VkExtent3D(&val->extent);505size += vn_sizeof_VkDeviceMemory(&val->memory);506size += vn_sizeof_VkDeviceSize(&val->memoryOffset);507size += vn_sizeof_VkFlags(&val->flags);508return size;509}510511static inline void512vn_encode_VkSparseImageMemoryBind(struct vn_cs_encoder *enc, const VkSparseImageMemoryBind *val)513{514vn_encode_VkImageSubresource(enc, &val->subresource);515vn_encode_VkOffset3D(enc, &val->offset);516vn_encode_VkExtent3D(enc, &val->extent);517vn_encode_VkDeviceMemory(enc, &val->memory);518vn_encode_VkDeviceSize(enc, &val->memoryOffset);519vn_encode_VkFlags(enc, &val->flags);520}521522/* struct VkSparseImageMemoryBindInfo */523524static inline size_t525vn_sizeof_VkSparseImageMemoryBindInfo(const VkSparseImageMemoryBindInfo *val)526{527size_t size = 0;528size += vn_sizeof_VkImage(&val->image);529size += vn_sizeof_uint32_t(&val->bindCount);530if (val->pBinds) {531size += vn_sizeof_array_size(val->bindCount);532for (uint32_t i = 0; i < val->bindCount; i++)533size += vn_sizeof_VkSparseImageMemoryBind(&val->pBinds[i]);534} else {535size += vn_sizeof_array_size(0);536}537return size;538}539540static inline void541vn_encode_VkSparseImageMemoryBindInfo(struct vn_cs_encoder *enc, const VkSparseImageMemoryBindInfo *val)542{543vn_encode_VkImage(enc, &val->image);544vn_encode_uint32_t(enc, &val->bindCount);545if (val->pBinds) {546vn_encode_array_size(enc, val->bindCount);547for (uint32_t i = 0; i < val->bindCount; i++)548vn_encode_VkSparseImageMemoryBind(enc, &val->pBinds[i]);549} else {550vn_encode_array_size(enc, 0);551}552}553554/* struct VkDeviceGroupBindSparseInfo chain */555556static inline size_t557vn_sizeof_VkDeviceGroupBindSparseInfo_pnext(const void *val)558{559/* no known/supported struct */560return vn_sizeof_simple_pointer(NULL);561}562563static inline size_t564vn_sizeof_VkDeviceGroupBindSparseInfo_self(const VkDeviceGroupBindSparseInfo *val)565{566size_t size = 0;567/* skip val->{sType,pNext} */568size += vn_sizeof_uint32_t(&val->resourceDeviceIndex);569size += vn_sizeof_uint32_t(&val->memoryDeviceIndex);570return size;571}572573static inline size_t574vn_sizeof_VkDeviceGroupBindSparseInfo(const VkDeviceGroupBindSparseInfo *val)575{576size_t size = 0;577578size += vn_sizeof_VkStructureType(&val->sType);579size += vn_sizeof_VkDeviceGroupBindSparseInfo_pnext(val->pNext);580size += vn_sizeof_VkDeviceGroupBindSparseInfo_self(val);581582return size;583}584585static inline void586vn_encode_VkDeviceGroupBindSparseInfo_pnext(struct vn_cs_encoder *enc, const void *val)587{588/* no known/supported struct */589vn_encode_simple_pointer(enc, NULL);590}591592static inline void593vn_encode_VkDeviceGroupBindSparseInfo_self(struct vn_cs_encoder *enc, const VkDeviceGroupBindSparseInfo *val)594{595/* skip val->{sType,pNext} */596vn_encode_uint32_t(enc, &val->resourceDeviceIndex);597vn_encode_uint32_t(enc, &val->memoryDeviceIndex);598}599600static inline void601vn_encode_VkDeviceGroupBindSparseInfo(struct vn_cs_encoder *enc, const VkDeviceGroupBindSparseInfo *val)602{603assert(val->sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO);604vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO });605vn_encode_VkDeviceGroupBindSparseInfo_pnext(enc, val->pNext);606vn_encode_VkDeviceGroupBindSparseInfo_self(enc, val);607}608609/* struct VkBindSparseInfo chain */610611static inline size_t612vn_sizeof_VkBindSparseInfo_pnext(const void *val)613{614const VkBaseInStructure *pnext = val;615size_t size = 0;616617while (pnext) {618switch ((int32_t)pnext->sType) {619case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:620size += vn_sizeof_simple_pointer(pnext);621size += vn_sizeof_VkStructureType(&pnext->sType);622size += vn_sizeof_VkBindSparseInfo_pnext(pnext->pNext);623size += vn_sizeof_VkDeviceGroupBindSparseInfo_self((const VkDeviceGroupBindSparseInfo *)pnext);624return size;625case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:626size += vn_sizeof_simple_pointer(pnext);627size += vn_sizeof_VkStructureType(&pnext->sType);628size += vn_sizeof_VkBindSparseInfo_pnext(pnext->pNext);629size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_self((const VkTimelineSemaphoreSubmitInfo *)pnext);630return size;631default:632/* ignore unknown/unsupported struct */633break;634}635pnext = pnext->pNext;636}637638return vn_sizeof_simple_pointer(NULL);639}640641static inline size_t642vn_sizeof_VkBindSparseInfo_self(const VkBindSparseInfo *val)643{644size_t size = 0;645/* skip val->{sType,pNext} */646size += vn_sizeof_uint32_t(&val->waitSemaphoreCount);647if (val->pWaitSemaphores) {648size += vn_sizeof_array_size(val->waitSemaphoreCount);649for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)650size += vn_sizeof_VkSemaphore(&val->pWaitSemaphores[i]);651} else {652size += vn_sizeof_array_size(0);653}654size += vn_sizeof_uint32_t(&val->bufferBindCount);655if (val->pBufferBinds) {656size += vn_sizeof_array_size(val->bufferBindCount);657for (uint32_t i = 0; i < val->bufferBindCount; i++)658size += vn_sizeof_VkSparseBufferMemoryBindInfo(&val->pBufferBinds[i]);659} else {660size += vn_sizeof_array_size(0);661}662size += vn_sizeof_uint32_t(&val->imageOpaqueBindCount);663if (val->pImageOpaqueBinds) {664size += vn_sizeof_array_size(val->imageOpaqueBindCount);665for (uint32_t i = 0; i < val->imageOpaqueBindCount; i++)666size += vn_sizeof_VkSparseImageOpaqueMemoryBindInfo(&val->pImageOpaqueBinds[i]);667} else {668size += vn_sizeof_array_size(0);669}670size += vn_sizeof_uint32_t(&val->imageBindCount);671if (val->pImageBinds) {672size += vn_sizeof_array_size(val->imageBindCount);673for (uint32_t i = 0; i < val->imageBindCount; i++)674size += vn_sizeof_VkSparseImageMemoryBindInfo(&val->pImageBinds[i]);675} else {676size += vn_sizeof_array_size(0);677}678size += vn_sizeof_uint32_t(&val->signalSemaphoreCount);679if (val->pSignalSemaphores) {680size += vn_sizeof_array_size(val->signalSemaphoreCount);681for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)682size += vn_sizeof_VkSemaphore(&val->pSignalSemaphores[i]);683} else {684size += vn_sizeof_array_size(0);685}686return size;687}688689static inline size_t690vn_sizeof_VkBindSparseInfo(const VkBindSparseInfo *val)691{692size_t size = 0;693694size += vn_sizeof_VkStructureType(&val->sType);695size += vn_sizeof_VkBindSparseInfo_pnext(val->pNext);696size += vn_sizeof_VkBindSparseInfo_self(val);697698return size;699}700701static inline void702vn_encode_VkBindSparseInfo_pnext(struct vn_cs_encoder *enc, const void *val)703{704const VkBaseInStructure *pnext = val;705706while (pnext) {707switch ((int32_t)pnext->sType) {708case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:709vn_encode_simple_pointer(enc, pnext);710vn_encode_VkStructureType(enc, &pnext->sType);711vn_encode_VkBindSparseInfo_pnext(enc, pnext->pNext);712vn_encode_VkDeviceGroupBindSparseInfo_self(enc, (const VkDeviceGroupBindSparseInfo *)pnext);713return;714case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:715vn_encode_simple_pointer(enc, pnext);716vn_encode_VkStructureType(enc, &pnext->sType);717vn_encode_VkBindSparseInfo_pnext(enc, pnext->pNext);718vn_encode_VkTimelineSemaphoreSubmitInfo_self(enc, (const VkTimelineSemaphoreSubmitInfo *)pnext);719return;720default:721/* ignore unknown/unsupported struct */722break;723}724pnext = pnext->pNext;725}726727vn_encode_simple_pointer(enc, NULL);728}729730static inline void731vn_encode_VkBindSparseInfo_self(struct vn_cs_encoder *enc, const VkBindSparseInfo *val)732{733/* skip val->{sType,pNext} */734vn_encode_uint32_t(enc, &val->waitSemaphoreCount);735if (val->pWaitSemaphores) {736vn_encode_array_size(enc, val->waitSemaphoreCount);737for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)738vn_encode_VkSemaphore(enc, &val->pWaitSemaphores[i]);739} else {740vn_encode_array_size(enc, 0);741}742vn_encode_uint32_t(enc, &val->bufferBindCount);743if (val->pBufferBinds) {744vn_encode_array_size(enc, val->bufferBindCount);745for (uint32_t i = 0; i < val->bufferBindCount; i++)746vn_encode_VkSparseBufferMemoryBindInfo(enc, &val->pBufferBinds[i]);747} else {748vn_encode_array_size(enc, 0);749}750vn_encode_uint32_t(enc, &val->imageOpaqueBindCount);751if (val->pImageOpaqueBinds) {752vn_encode_array_size(enc, val->imageOpaqueBindCount);753for (uint32_t i = 0; i < val->imageOpaqueBindCount; i++)754vn_encode_VkSparseImageOpaqueMemoryBindInfo(enc, &val->pImageOpaqueBinds[i]);755} else {756vn_encode_array_size(enc, 0);757}758vn_encode_uint32_t(enc, &val->imageBindCount);759if (val->pImageBinds) {760vn_encode_array_size(enc, val->imageBindCount);761for (uint32_t i = 0; i < val->imageBindCount; i++)762vn_encode_VkSparseImageMemoryBindInfo(enc, &val->pImageBinds[i]);763} else {764vn_encode_array_size(enc, 0);765}766vn_encode_uint32_t(enc, &val->signalSemaphoreCount);767if (val->pSignalSemaphores) {768vn_encode_array_size(enc, val->signalSemaphoreCount);769for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)770vn_encode_VkSemaphore(enc, &val->pSignalSemaphores[i]);771} else {772vn_encode_array_size(enc, 0);773}774}775776static inline void777vn_encode_VkBindSparseInfo(struct vn_cs_encoder *enc, const VkBindSparseInfo *val)778{779assert(val->sType == VK_STRUCTURE_TYPE_BIND_SPARSE_INFO);780vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_BIND_SPARSE_INFO });781vn_encode_VkBindSparseInfo_pnext(enc, val->pNext);782vn_encode_VkBindSparseInfo_self(enc, val);783}784785static inline size_t vn_sizeof_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)786{787const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueSubmit_EXT;788const VkFlags cmd_flags = 0;789size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);790791cmd_size += vn_sizeof_VkQueue(&queue);792cmd_size += vn_sizeof_uint32_t(&submitCount);793if (pSubmits) {794cmd_size += vn_sizeof_array_size(submitCount);795for (uint32_t i = 0; i < submitCount; i++)796cmd_size += vn_sizeof_VkSubmitInfo(&pSubmits[i]);797} else {798cmd_size += vn_sizeof_array_size(0);799}800cmd_size += vn_sizeof_VkFence(&fence);801802return cmd_size;803}804805static inline void vn_encode_vkQueueSubmit(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)806{807const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueSubmit_EXT;808809vn_encode_VkCommandTypeEXT(enc, &cmd_type);810vn_encode_VkFlags(enc, &cmd_flags);811812vn_encode_VkQueue(enc, &queue);813vn_encode_uint32_t(enc, &submitCount);814if (pSubmits) {815vn_encode_array_size(enc, submitCount);816for (uint32_t i = 0; i < submitCount; i++)817vn_encode_VkSubmitInfo(enc, &pSubmits[i]);818} else {819vn_encode_array_size(enc, 0);820}821vn_encode_VkFence(enc, &fence);822}823824static inline size_t vn_sizeof_vkQueueSubmit_reply(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)825{826const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueSubmit_EXT;827size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);828829VkResult ret;830cmd_size += vn_sizeof_VkResult(&ret);831/* skip queue */832/* skip submitCount */833/* skip pSubmits */834/* skip fence */835836return cmd_size;837}838839static inline VkResult vn_decode_vkQueueSubmit_reply(struct vn_cs_decoder *dec, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)840{841VkCommandTypeEXT command_type;842vn_decode_VkCommandTypeEXT(dec, &command_type);843assert(command_type == VK_COMMAND_TYPE_vkQueueSubmit_EXT);844845VkResult ret;846vn_decode_VkResult(dec, &ret);847/* skip queue */848/* skip submitCount */849/* skip pSubmits */850/* skip fence */851852return ret;853}854855static inline size_t vn_sizeof_vkQueueWaitIdle(VkQueue queue)856{857const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueWaitIdle_EXT;858const VkFlags cmd_flags = 0;859size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);860861cmd_size += vn_sizeof_VkQueue(&queue);862863return cmd_size;864}865866static inline void vn_encode_vkQueueWaitIdle(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkQueue queue)867{868const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueWaitIdle_EXT;869870vn_encode_VkCommandTypeEXT(enc, &cmd_type);871vn_encode_VkFlags(enc, &cmd_flags);872873vn_encode_VkQueue(enc, &queue);874}875876static inline size_t vn_sizeof_vkQueueWaitIdle_reply(VkQueue queue)877{878const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueWaitIdle_EXT;879size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);880881VkResult ret;882cmd_size += vn_sizeof_VkResult(&ret);883/* skip queue */884885return cmd_size;886}887888static inline VkResult vn_decode_vkQueueWaitIdle_reply(struct vn_cs_decoder *dec, VkQueue queue)889{890VkCommandTypeEXT command_type;891vn_decode_VkCommandTypeEXT(dec, &command_type);892assert(command_type == VK_COMMAND_TYPE_vkQueueWaitIdle_EXT);893894VkResult ret;895vn_decode_VkResult(dec, &ret);896/* skip queue */897898return ret;899}900901static inline size_t vn_sizeof_vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)902{903const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueBindSparse_EXT;904const VkFlags cmd_flags = 0;905size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);906907cmd_size += vn_sizeof_VkQueue(&queue);908cmd_size += vn_sizeof_uint32_t(&bindInfoCount);909if (pBindInfo) {910cmd_size += vn_sizeof_array_size(bindInfoCount);911for (uint32_t i = 0; i < bindInfoCount; i++)912cmd_size += vn_sizeof_VkBindSparseInfo(&pBindInfo[i]);913} else {914cmd_size += vn_sizeof_array_size(0);915}916cmd_size += vn_sizeof_VkFence(&fence);917918return cmd_size;919}920921static inline void vn_encode_vkQueueBindSparse(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)922{923const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueBindSparse_EXT;924925vn_encode_VkCommandTypeEXT(enc, &cmd_type);926vn_encode_VkFlags(enc, &cmd_flags);927928vn_encode_VkQueue(enc, &queue);929vn_encode_uint32_t(enc, &bindInfoCount);930if (pBindInfo) {931vn_encode_array_size(enc, bindInfoCount);932for (uint32_t i = 0; i < bindInfoCount; i++)933vn_encode_VkBindSparseInfo(enc, &pBindInfo[i]);934} else {935vn_encode_array_size(enc, 0);936}937vn_encode_VkFence(enc, &fence);938}939940static inline size_t vn_sizeof_vkQueueBindSparse_reply(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)941{942const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueBindSparse_EXT;943size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);944945VkResult ret;946cmd_size += vn_sizeof_VkResult(&ret);947/* skip queue */948/* skip bindInfoCount */949/* skip pBindInfo */950/* skip fence */951952return cmd_size;953}954955static inline VkResult vn_decode_vkQueueBindSparse_reply(struct vn_cs_decoder *dec, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)956{957VkCommandTypeEXT command_type;958vn_decode_VkCommandTypeEXT(dec, &command_type);959assert(command_type == VK_COMMAND_TYPE_vkQueueBindSparse_EXT);960961VkResult ret;962vn_decode_VkResult(dec, &ret);963/* skip queue */964/* skip bindInfoCount */965/* skip pBindInfo */966/* skip fence */967968return ret;969}970971static inline void vn_submit_vkQueueSubmit(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence, struct vn_instance_submit_command *submit)972{973uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];974void *cmd_data = local_cmd_data;975size_t cmd_size = vn_sizeof_vkQueueSubmit(queue, submitCount, pSubmits, fence);976if (cmd_size > sizeof(local_cmd_data)) {977cmd_data = malloc(cmd_size);978if (!cmd_data)979cmd_size = 0;980}981const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkQueueSubmit_reply(queue, submitCount, pSubmits, fence) : 0;982983struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);984if (cmd_size) {985vn_encode_vkQueueSubmit(enc, cmd_flags, queue, submitCount, pSubmits, fence);986vn_instance_submit_command(vn_instance, submit);987if (cmd_data != local_cmd_data)988free(cmd_data);989}990}991992static inline void vn_submit_vkQueueWaitIdle(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkQueue queue, struct vn_instance_submit_command *submit)993{994uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];995void *cmd_data = local_cmd_data;996size_t cmd_size = vn_sizeof_vkQueueWaitIdle(queue);997if (cmd_size > sizeof(local_cmd_data)) {998cmd_data = malloc(cmd_size);999if (!cmd_data)1000cmd_size = 0;1001}1002const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkQueueWaitIdle_reply(queue) : 0;10031004struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);1005if (cmd_size) {1006vn_encode_vkQueueWaitIdle(enc, cmd_flags, queue);1007vn_instance_submit_command(vn_instance, submit);1008if (cmd_data != local_cmd_data)1009free(cmd_data);1010}1011}10121013static inline void vn_submit_vkQueueBindSparse(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence, struct vn_instance_submit_command *submit)1014{1015uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];1016void *cmd_data = local_cmd_data;1017size_t cmd_size = vn_sizeof_vkQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);1018if (cmd_size > sizeof(local_cmd_data)) {1019cmd_data = malloc(cmd_size);1020if (!cmd_data)1021cmd_size = 0;1022}1023const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkQueueBindSparse_reply(queue, bindInfoCount, pBindInfo, fence) : 0;10241025struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);1026if (cmd_size) {1027vn_encode_vkQueueBindSparse(enc, cmd_flags, queue, bindInfoCount, pBindInfo, fence);1028vn_instance_submit_command(vn_instance, submit);1029if (cmd_data != local_cmd_data)1030free(cmd_data);1031}1032}10331034static inline VkResult vn_call_vkQueueSubmit(struct vn_instance *vn_instance, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)1035{1036struct vn_instance_submit_command submit;1037vn_submit_vkQueueSubmit(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, queue, submitCount, pSubmits, fence, &submit);1038struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);1039if (dec) {1040const VkResult ret = vn_decode_vkQueueSubmit_reply(dec, queue, submitCount, pSubmits, fence);1041vn_instance_free_command_reply(vn_instance, &submit);1042return ret;1043} else {1044return VK_ERROR_OUT_OF_HOST_MEMORY;1045}1046}10471048static inline void vn_async_vkQueueSubmit(struct vn_instance *vn_instance, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)1049{1050struct vn_instance_submit_command submit;1051vn_submit_vkQueueSubmit(vn_instance, 0, queue, submitCount, pSubmits, fence, &submit);1052}10531054static inline VkResult vn_call_vkQueueWaitIdle(struct vn_instance *vn_instance, VkQueue queue)1055{1056struct vn_instance_submit_command submit;1057vn_submit_vkQueueWaitIdle(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, queue, &submit);1058struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);1059if (dec) {1060const VkResult ret = vn_decode_vkQueueWaitIdle_reply(dec, queue);1061vn_instance_free_command_reply(vn_instance, &submit);1062return ret;1063} else {1064return VK_ERROR_OUT_OF_HOST_MEMORY;1065}1066}10671068static inline void vn_async_vkQueueWaitIdle(struct vn_instance *vn_instance, VkQueue queue)1069{1070struct vn_instance_submit_command submit;1071vn_submit_vkQueueWaitIdle(vn_instance, 0, queue, &submit);1072}10731074static inline VkResult vn_call_vkQueueBindSparse(struct vn_instance *vn_instance, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)1075{1076struct vn_instance_submit_command submit;1077vn_submit_vkQueueBindSparse(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, queue, bindInfoCount, pBindInfo, fence, &submit);1078struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);1079if (dec) {1080const VkResult ret = vn_decode_vkQueueBindSparse_reply(dec, queue, bindInfoCount, pBindInfo, fence);1081vn_instance_free_command_reply(vn_instance, &submit);1082return ret;1083} else {1084return VK_ERROR_OUT_OF_HOST_MEMORY;1085}1086}10871088static inline void vn_async_vkQueueBindSparse(struct vn_instance *vn_instance, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)1089{1090struct vn_instance_submit_command submit;1091vn_submit_vkQueueBindSparse(vn_instance, 0, queue, bindInfoCount, pBindInfo, fence, &submit);1092}10931094#endif /* VN_PROTOCOL_DRIVER_QUEUE_H */109510961097