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_FRAMEBUFFER_H 9#define VN_PROTOCOL_DRIVER_FRAMEBUFFER_H 10 11#include "vn_instance.h" 12#include "vn_protocol_driver_structs.h" 13 14/* struct VkFramebufferAttachmentImageInfo chain */ 15 16static inline size_t 17vn_sizeof_VkFramebufferAttachmentImageInfo_pnext(const void *val) 18{ 19 /* no known/supported struct */ 20 return vn_sizeof_simple_pointer(NULL); 21} 22 23static inline size_t 24vn_sizeof_VkFramebufferAttachmentImageInfo_self(const VkFramebufferAttachmentImageInfo *val) 25{ 26 size_t size = 0; 27 /* skip val->{sType,pNext} */ 28 size += vn_sizeof_VkFlags(&val->flags); 29 size += vn_sizeof_VkFlags(&val->usage); 30 size += vn_sizeof_uint32_t(&val->width); 31 size += vn_sizeof_uint32_t(&val->height); 32 size += vn_sizeof_uint32_t(&val->layerCount); 33 size += vn_sizeof_uint32_t(&val->viewFormatCount); 34 if (val->pViewFormats) { 35 size += vn_sizeof_array_size(val->viewFormatCount); 36 size += vn_sizeof_VkFormat_array(val->pViewFormats, val->viewFormatCount); 37 } else { 38 size += vn_sizeof_array_size(0); 39 } 40 return size; 41} 42 43static inline size_t 44vn_sizeof_VkFramebufferAttachmentImageInfo(const VkFramebufferAttachmentImageInfo *val) 45{ 46 size_t size = 0; 47 48 size += vn_sizeof_VkStructureType(&val->sType); 49 size += vn_sizeof_VkFramebufferAttachmentImageInfo_pnext(val->pNext); 50 size += vn_sizeof_VkFramebufferAttachmentImageInfo_self(val); 51 52 return size; 53} 54 55static inline void 56vn_encode_VkFramebufferAttachmentImageInfo_pnext(struct vn_cs_encoder *enc, const void *val) 57{ 58 /* no known/supported struct */ 59 vn_encode_simple_pointer(enc, NULL); 60} 61 62static inline void 63vn_encode_VkFramebufferAttachmentImageInfo_self(struct vn_cs_encoder *enc, const VkFramebufferAttachmentImageInfo *val) 64{ 65 /* skip val->{sType,pNext} */ 66 vn_encode_VkFlags(enc, &val->flags); 67 vn_encode_VkFlags(enc, &val->usage); 68 vn_encode_uint32_t(enc, &val->width); 69 vn_encode_uint32_t(enc, &val->height); 70 vn_encode_uint32_t(enc, &val->layerCount); 71 vn_encode_uint32_t(enc, &val->viewFormatCount); 72 if (val->pViewFormats) { 73 vn_encode_array_size(enc, val->viewFormatCount); 74 vn_encode_VkFormat_array(enc, val->pViewFormats, val->viewFormatCount); 75 } else { 76 vn_encode_array_size(enc, 0); 77 } 78} 79 80static inline void 81vn_encode_VkFramebufferAttachmentImageInfo(struct vn_cs_encoder *enc, const VkFramebufferAttachmentImageInfo *val) 82{ 83 assert(val->sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO); 84 vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENT_IMAGE_INFO }); 85 vn_encode_VkFramebufferAttachmentImageInfo_pnext(enc, val->pNext); 86 vn_encode_VkFramebufferAttachmentImageInfo_self(enc, val); 87} 88 89/* struct VkFramebufferAttachmentsCreateInfo chain */ 90 91static inline size_t 92vn_sizeof_VkFramebufferAttachmentsCreateInfo_pnext(const void *val) 93{ 94 /* no known/supported struct */ 95 return vn_sizeof_simple_pointer(NULL); 96} 97 98static inline size_t 99vn_sizeof_VkFramebufferAttachmentsCreateInfo_self(const VkFramebufferAttachmentsCreateInfo *val) 100{ 101 size_t size = 0; 102 /* skip val->{sType,pNext} */ 103 size += vn_sizeof_uint32_t(&val->attachmentImageInfoCount); 104 if (val->pAttachmentImageInfos) { 105 size += vn_sizeof_array_size(val->attachmentImageInfoCount); 106 for (uint32_t i = 0; i < val->attachmentImageInfoCount; i++) 107 size += vn_sizeof_VkFramebufferAttachmentImageInfo(&val->pAttachmentImageInfos[i]); 108 } else { 109 size += vn_sizeof_array_size(0); 110 } 111 return size; 112} 113 114static inline size_t 115vn_sizeof_VkFramebufferAttachmentsCreateInfo(const VkFramebufferAttachmentsCreateInfo *val) 116{ 117 size_t size = 0; 118 119 size += vn_sizeof_VkStructureType(&val->sType); 120 size += vn_sizeof_VkFramebufferAttachmentsCreateInfo_pnext(val->pNext); 121 size += vn_sizeof_VkFramebufferAttachmentsCreateInfo_self(val); 122 123 return size; 124} 125 126static inline void 127vn_encode_VkFramebufferAttachmentsCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val) 128{ 129 /* no known/supported struct */ 130 vn_encode_simple_pointer(enc, NULL); 131} 132 133static inline void 134vn_encode_VkFramebufferAttachmentsCreateInfo_self(struct vn_cs_encoder *enc, const VkFramebufferAttachmentsCreateInfo *val) 135{ 136 /* skip val->{sType,pNext} */ 137 vn_encode_uint32_t(enc, &val->attachmentImageInfoCount); 138 if (val->pAttachmentImageInfos) { 139 vn_encode_array_size(enc, val->attachmentImageInfoCount); 140 for (uint32_t i = 0; i < val->attachmentImageInfoCount; i++) 141 vn_encode_VkFramebufferAttachmentImageInfo(enc, &val->pAttachmentImageInfos[i]); 142 } else { 143 vn_encode_array_size(enc, 0); 144 } 145} 146 147static inline void 148vn_encode_VkFramebufferAttachmentsCreateInfo(struct vn_cs_encoder *enc, const VkFramebufferAttachmentsCreateInfo *val) 149{ 150 assert(val->sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO); 151 vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO }); 152 vn_encode_VkFramebufferAttachmentsCreateInfo_pnext(enc, val->pNext); 153 vn_encode_VkFramebufferAttachmentsCreateInfo_self(enc, val); 154} 155 156/* struct VkFramebufferCreateInfo chain */ 157 158static inline size_t 159vn_sizeof_VkFramebufferCreateInfo_pnext(const void *val) 160{ 161 const VkBaseInStructure *pnext = val; 162 size_t size = 0; 163 164 while (pnext) { 165 switch ((int32_t)pnext->sType) { 166 case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: 167 size += vn_sizeof_simple_pointer(pnext); 168 size += vn_sizeof_VkStructureType(&pnext->sType); 169 size += vn_sizeof_VkFramebufferCreateInfo_pnext(pnext->pNext); 170 size += vn_sizeof_VkFramebufferAttachmentsCreateInfo_self((const VkFramebufferAttachmentsCreateInfo *)pnext); 171 return size; 172 default: 173 /* ignore unknown/unsupported struct */ 174 break; 175 } 176 pnext = pnext->pNext; 177 } 178 179 return vn_sizeof_simple_pointer(NULL); 180} 181 182static inline size_t 183vn_sizeof_VkFramebufferCreateInfo_self(const VkFramebufferCreateInfo *val) 184{ 185 size_t size = 0; 186 /* skip val->{sType,pNext} */ 187 size += vn_sizeof_VkFlags(&val->flags); 188 size += vn_sizeof_VkRenderPass(&val->renderPass); 189 size += vn_sizeof_uint32_t(&val->attachmentCount); 190 if (val->pAttachments) { 191 size += vn_sizeof_array_size(val->attachmentCount); 192 for (uint32_t i = 0; i < val->attachmentCount; i++) 193 size += vn_sizeof_VkImageView(&val->pAttachments[i]); 194 } else { 195 size += vn_sizeof_array_size(0); 196 } 197 size += vn_sizeof_uint32_t(&val->width); 198 size += vn_sizeof_uint32_t(&val->height); 199 size += vn_sizeof_uint32_t(&val->layers); 200 return size; 201} 202 203static inline size_t 204vn_sizeof_VkFramebufferCreateInfo(const VkFramebufferCreateInfo *val) 205{ 206 size_t size = 0; 207 208 size += vn_sizeof_VkStructureType(&val->sType); 209 size += vn_sizeof_VkFramebufferCreateInfo_pnext(val->pNext); 210 size += vn_sizeof_VkFramebufferCreateInfo_self(val); 211 212 return size; 213} 214 215static inline void 216vn_encode_VkFramebufferCreateInfo_pnext(struct vn_cs_encoder *enc, const void *val) 217{ 218 const VkBaseInStructure *pnext = val; 219 220 while (pnext) { 221 switch ((int32_t)pnext->sType) { 222 case VK_STRUCTURE_TYPE_FRAMEBUFFER_ATTACHMENTS_CREATE_INFO: 223 vn_encode_simple_pointer(enc, pnext); 224 vn_encode_VkStructureType(enc, &pnext->sType); 225 vn_encode_VkFramebufferCreateInfo_pnext(enc, pnext->pNext); 226 vn_encode_VkFramebufferAttachmentsCreateInfo_self(enc, (const VkFramebufferAttachmentsCreateInfo *)pnext); 227 return; 228 default: 229 /* ignore unknown/unsupported struct */ 230 break; 231 } 232 pnext = pnext->pNext; 233 } 234 235 vn_encode_simple_pointer(enc, NULL); 236} 237 238static inline void 239vn_encode_VkFramebufferCreateInfo_self(struct vn_cs_encoder *enc, const VkFramebufferCreateInfo *val) 240{ 241 /* skip val->{sType,pNext} */ 242 vn_encode_VkFlags(enc, &val->flags); 243 vn_encode_VkRenderPass(enc, &val->renderPass); 244 vn_encode_uint32_t(enc, &val->attachmentCount); 245 if (val->pAttachments) { 246 vn_encode_array_size(enc, val->attachmentCount); 247 for (uint32_t i = 0; i < val->attachmentCount; i++) 248 vn_encode_VkImageView(enc, &val->pAttachments[i]); 249 } else { 250 vn_encode_array_size(enc, 0); 251 } 252 vn_encode_uint32_t(enc, &val->width); 253 vn_encode_uint32_t(enc, &val->height); 254 vn_encode_uint32_t(enc, &val->layers); 255} 256 257static inline void 258vn_encode_VkFramebufferCreateInfo(struct vn_cs_encoder *enc, const VkFramebufferCreateInfo *val) 259{ 260 assert(val->sType == VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO); 261 vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_FRAMEBUFFER_CREATE_INFO }); 262 vn_encode_VkFramebufferCreateInfo_pnext(enc, val->pNext); 263 vn_encode_VkFramebufferCreateInfo_self(enc, val); 264} 265 266static inline size_t vn_sizeof_vkCreateFramebuffer(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) 267{ 268 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateFramebuffer_EXT; 269 const VkFlags cmd_flags = 0; 270 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags); 271 272 cmd_size += vn_sizeof_VkDevice(&device); 273 cmd_size += vn_sizeof_simple_pointer(pCreateInfo); 274 if (pCreateInfo) 275 cmd_size += vn_sizeof_VkFramebufferCreateInfo(pCreateInfo); 276 cmd_size += vn_sizeof_simple_pointer(pAllocator); 277 if (pAllocator) 278 assert(false); 279 cmd_size += vn_sizeof_simple_pointer(pFramebuffer); 280 if (pFramebuffer) 281 cmd_size += vn_sizeof_VkFramebuffer(pFramebuffer); 282 283 return cmd_size; 284} 285 286static inline void vn_encode_vkCreateFramebuffer(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) 287{ 288 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateFramebuffer_EXT; 289 290 vn_encode_VkCommandTypeEXT(enc, &cmd_type); 291 vn_encode_VkFlags(enc, &cmd_flags); 292 293 vn_encode_VkDevice(enc, &device); 294 if (vn_encode_simple_pointer(enc, pCreateInfo)) 295 vn_encode_VkFramebufferCreateInfo(enc, pCreateInfo); 296 if (vn_encode_simple_pointer(enc, pAllocator)) 297 assert(false); 298 if (vn_encode_simple_pointer(enc, pFramebuffer)) 299 vn_encode_VkFramebuffer(enc, pFramebuffer); 300} 301 302static inline size_t vn_sizeof_vkCreateFramebuffer_reply(VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) 303{ 304 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkCreateFramebuffer_EXT; 305 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type); 306 307 VkResult ret; 308 cmd_size += vn_sizeof_VkResult(&ret); 309 /* skip device */ 310 /* skip pCreateInfo */ 311 /* skip pAllocator */ 312 cmd_size += vn_sizeof_simple_pointer(pFramebuffer); 313 if (pFramebuffer) 314 cmd_size += vn_sizeof_VkFramebuffer(pFramebuffer); 315 316 return cmd_size; 317} 318 319static inline VkResult vn_decode_vkCreateFramebuffer_reply(struct vn_cs_decoder *dec, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) 320{ 321 VkCommandTypeEXT command_type; 322 vn_decode_VkCommandTypeEXT(dec, &command_type); 323 assert(command_type == VK_COMMAND_TYPE_vkCreateFramebuffer_EXT); 324 325 VkResult ret; 326 vn_decode_VkResult(dec, &ret); 327 /* skip device */ 328 /* skip pCreateInfo */ 329 /* skip pAllocator */ 330 if (vn_decode_simple_pointer(dec)) { 331 vn_decode_VkFramebuffer(dec, pFramebuffer); 332 } else { 333 pFramebuffer = NULL; 334 } 335 336 return ret; 337} 338 339static inline size_t vn_sizeof_vkDestroyFramebuffer(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) 340{ 341 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyFramebuffer_EXT; 342 const VkFlags cmd_flags = 0; 343 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags); 344 345 cmd_size += vn_sizeof_VkDevice(&device); 346 cmd_size += vn_sizeof_VkFramebuffer(&framebuffer); 347 cmd_size += vn_sizeof_simple_pointer(pAllocator); 348 if (pAllocator) 349 assert(false); 350 351 return cmd_size; 352} 353 354static inline void vn_encode_vkDestroyFramebuffer(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) 355{ 356 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyFramebuffer_EXT; 357 358 vn_encode_VkCommandTypeEXT(enc, &cmd_type); 359 vn_encode_VkFlags(enc, &cmd_flags); 360 361 vn_encode_VkDevice(enc, &device); 362 vn_encode_VkFramebuffer(enc, &framebuffer); 363 if (vn_encode_simple_pointer(enc, pAllocator)) 364 assert(false); 365} 366 367static inline size_t vn_sizeof_vkDestroyFramebuffer_reply(VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) 368{ 369 const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkDestroyFramebuffer_EXT; 370 size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type); 371 372 /* skip device */ 373 /* skip framebuffer */ 374 /* skip pAllocator */ 375 376 return cmd_size; 377} 378 379static inline void vn_decode_vkDestroyFramebuffer_reply(struct vn_cs_decoder *dec, VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) 380{ 381 VkCommandTypeEXT command_type; 382 vn_decode_VkCommandTypeEXT(dec, &command_type); 383 assert(command_type == VK_COMMAND_TYPE_vkDestroyFramebuffer_EXT); 384 385 /* skip device */ 386 /* skip framebuffer */ 387 /* skip pAllocator */ 388} 389 390static inline void vn_submit_vkCreateFramebuffer(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer, struct vn_instance_submit_command *submit) 391{ 392 uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE]; 393 void *cmd_data = local_cmd_data; 394 size_t cmd_size = vn_sizeof_vkCreateFramebuffer(device, pCreateInfo, pAllocator, pFramebuffer); 395 if (cmd_size > sizeof(local_cmd_data)) { 396 cmd_data = malloc(cmd_size); 397 if (!cmd_data) 398 cmd_size = 0; 399 } 400 const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkCreateFramebuffer_reply(device, pCreateInfo, pAllocator, pFramebuffer) : 0; 401 402 struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size); 403 if (cmd_size) { 404 vn_encode_vkCreateFramebuffer(enc, cmd_flags, device, pCreateInfo, pAllocator, pFramebuffer); 405 vn_instance_submit_command(vn_instance, submit); 406 if (cmd_data != local_cmd_data) 407 free(cmd_data); 408 } 409} 410 411static inline void vn_submit_vkDestroyFramebuffer(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator, struct vn_instance_submit_command *submit) 412{ 413 uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE]; 414 void *cmd_data = local_cmd_data; 415 size_t cmd_size = vn_sizeof_vkDestroyFramebuffer(device, framebuffer, pAllocator); 416 if (cmd_size > sizeof(local_cmd_data)) { 417 cmd_data = malloc(cmd_size); 418 if (!cmd_data) 419 cmd_size = 0; 420 } 421 const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkDestroyFramebuffer_reply(device, framebuffer, pAllocator) : 0; 422 423 struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size); 424 if (cmd_size) { 425 vn_encode_vkDestroyFramebuffer(enc, cmd_flags, device, framebuffer, pAllocator); 426 vn_instance_submit_command(vn_instance, submit); 427 if (cmd_data != local_cmd_data) 428 free(cmd_data); 429 } 430} 431 432static inline VkResult vn_call_vkCreateFramebuffer(struct vn_instance *vn_instance, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) 433{ 434 VN_TRACE_FUNC(); 435 436 struct vn_instance_submit_command submit; 437 vn_submit_vkCreateFramebuffer(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, pCreateInfo, pAllocator, pFramebuffer, &submit); 438 struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit); 439 if (dec) { 440 const VkResult ret = vn_decode_vkCreateFramebuffer_reply(dec, device, pCreateInfo, pAllocator, pFramebuffer); 441 vn_instance_free_command_reply(vn_instance, &submit); 442 return ret; 443 } else { 444 return VK_ERROR_OUT_OF_HOST_MEMORY; 445 } 446} 447 448static inline void vn_async_vkCreateFramebuffer(struct vn_instance *vn_instance, VkDevice device, const VkFramebufferCreateInfo* pCreateInfo, const VkAllocationCallbacks* pAllocator, VkFramebuffer* pFramebuffer) 449{ 450 struct vn_instance_submit_command submit; 451 vn_submit_vkCreateFramebuffer(vn_instance, 0, device, pCreateInfo, pAllocator, pFramebuffer, &submit); 452} 453 454static inline void vn_call_vkDestroyFramebuffer(struct vn_instance *vn_instance, VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) 455{ 456 VN_TRACE_FUNC(); 457 458 struct vn_instance_submit_command submit; 459 vn_submit_vkDestroyFramebuffer(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, device, framebuffer, pAllocator, &submit); 460 struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit); 461 if (dec) { 462 vn_decode_vkDestroyFramebuffer_reply(dec, device, framebuffer, pAllocator); 463 vn_instance_free_command_reply(vn_instance, &submit); 464 } 465} 466 467static inline void vn_async_vkDestroyFramebuffer(struct vn_instance *vn_instance, VkDevice device, VkFramebuffer framebuffer, const VkAllocationCallbacks* pAllocator) 468{ 469 struct vn_instance_submit_command submit; 470 vn_submit_vkDestroyFramebuffer(vn_instance, 0, device, framebuffer, pAllocator, &submit); 471} 472 473#endif /* VN_PROTOCOL_DRIVER_FRAMEBUFFER_H */ 474