xref: /aosp_15_r20/external/virglrenderer/src/venus/venus-protocol/vn_protocol_renderer_structs.h (revision bbecb9d118dfdb95f99bd754f8fa9be01f189df3)
1 /* This file is generated by venus-protocol.  See vn_protocol_renderer.h. */
2 
3 /*
4  * Copyright 2020 Google LLC
5  * SPDX-License-Identifier: MIT
6  */
7 
8 #ifndef VN_PROTOCOL_RENDERER_STRUCTS_H
9 #define VN_PROTOCOL_RENDERER_STRUCTS_H
10 
11 #include "vn_protocol_renderer_handles.h"
12 
13 #pragma GCC diagnostic push
14 #pragma GCC diagnostic ignored "-Wpointer-arith"
15 #pragma GCC diagnostic ignored "-Wunused-parameter"
16 
17 /*
18  * These structs/unions/commands are not included
19  *
20  *   VkAllocationCallbacks
21  */
22 
23 /* struct VkExtent3D */
24 
25 static inline void
vn_encode_VkExtent3D(struct vn_cs_encoder * enc,const VkExtent3D * val)26 vn_encode_VkExtent3D(struct vn_cs_encoder *enc, const VkExtent3D *val)
27 {
28     vn_encode_uint32_t(enc, &val->width);
29     vn_encode_uint32_t(enc, &val->height);
30     vn_encode_uint32_t(enc, &val->depth);
31 }
32 
33 static inline void
vn_decode_VkExtent3D_temp(struct vn_cs_decoder * dec,VkExtent3D * val)34 vn_decode_VkExtent3D_temp(struct vn_cs_decoder *dec, VkExtent3D *val)
35 {
36     vn_decode_uint32_t(dec, &val->width);
37     vn_decode_uint32_t(dec, &val->height);
38     vn_decode_uint32_t(dec, &val->depth);
39 }
40 
41 static inline void
vn_decode_VkExtent3D_partial_temp(struct vn_cs_decoder * dec,VkExtent3D * val)42 vn_decode_VkExtent3D_partial_temp(struct vn_cs_decoder *dec, VkExtent3D *val)
43 {
44     /* skip val->width */
45     /* skip val->height */
46     /* skip val->depth */
47 }
48 
49 static inline void
vn_replace_VkExtent3D_handle(VkExtent3D * val)50 vn_replace_VkExtent3D_handle(VkExtent3D *val)
51 {
52     /* skip val->width */
53     /* skip val->height */
54     /* skip val->depth */
55 }
56 
57 /* struct VkLayerProperties */
58 
59 static inline void
vn_encode_VkLayerProperties(struct vn_cs_encoder * enc,const VkLayerProperties * val)60 vn_encode_VkLayerProperties(struct vn_cs_encoder *enc, const VkLayerProperties *val)
61 {
62     vn_encode_array_size(enc, VK_MAX_EXTENSION_NAME_SIZE);
63     vn_encode_char_array(enc, val->layerName, VK_MAX_EXTENSION_NAME_SIZE);
64     vn_encode_uint32_t(enc, &val->specVersion);
65     vn_encode_uint32_t(enc, &val->implementationVersion);
66     vn_encode_array_size(enc, VK_MAX_DESCRIPTION_SIZE);
67     vn_encode_char_array(enc, val->description, VK_MAX_DESCRIPTION_SIZE);
68 }
69 
70 static inline void
vn_decode_VkLayerProperties_partial_temp(struct vn_cs_decoder * dec,VkLayerProperties * val)71 vn_decode_VkLayerProperties_partial_temp(struct vn_cs_decoder *dec, VkLayerProperties *val)
72 {
73     /* skip val->layerName */
74     /* skip val->specVersion */
75     /* skip val->implementationVersion */
76     /* skip val->description */
77 }
78 
79 /* struct VkExtensionProperties */
80 
81 static inline void
vn_encode_VkExtensionProperties(struct vn_cs_encoder * enc,const VkExtensionProperties * val)82 vn_encode_VkExtensionProperties(struct vn_cs_encoder *enc, const VkExtensionProperties *val)
83 {
84     vn_encode_array_size(enc, VK_MAX_EXTENSION_NAME_SIZE);
85     vn_encode_char_array(enc, val->extensionName, VK_MAX_EXTENSION_NAME_SIZE);
86     vn_encode_uint32_t(enc, &val->specVersion);
87 }
88 
89 static inline void
vn_decode_VkExtensionProperties_temp(struct vn_cs_decoder * dec,VkExtensionProperties * val)90 vn_decode_VkExtensionProperties_temp(struct vn_cs_decoder *dec, VkExtensionProperties *val)
91 {
92     {
93         const size_t array_size = vn_decode_array_size(dec, VK_MAX_EXTENSION_NAME_SIZE);
94         vn_decode_char_array(dec, val->extensionName, array_size);
95     }
96     vn_decode_uint32_t(dec, &val->specVersion);
97 }
98 
99 static inline void
vn_decode_VkExtensionProperties_partial_temp(struct vn_cs_decoder * dec,VkExtensionProperties * val)100 vn_decode_VkExtensionProperties_partial_temp(struct vn_cs_decoder *dec, VkExtensionProperties *val)
101 {
102     /* skip val->extensionName */
103     /* skip val->specVersion */
104 }
105 
106 static inline void
vn_replace_VkExtensionProperties_handle(VkExtensionProperties * val)107 vn_replace_VkExtensionProperties_handle(VkExtensionProperties *val)
108 {
109     /* skip val->extensionName */
110     /* skip val->specVersion */
111 }
112 
113 /* struct VkMemoryRequirements */
114 
115 static inline void
vn_encode_VkMemoryRequirements(struct vn_cs_encoder * enc,const VkMemoryRequirements * val)116 vn_encode_VkMemoryRequirements(struct vn_cs_encoder *enc, const VkMemoryRequirements *val)
117 {
118     vn_encode_VkDeviceSize(enc, &val->size);
119     vn_encode_VkDeviceSize(enc, &val->alignment);
120     vn_encode_uint32_t(enc, &val->memoryTypeBits);
121 }
122 
123 static inline void
vn_decode_VkMemoryRequirements_partial_temp(struct vn_cs_decoder * dec,VkMemoryRequirements * val)124 vn_decode_VkMemoryRequirements_partial_temp(struct vn_cs_decoder *dec, VkMemoryRequirements *val)
125 {
126     /* skip val->size */
127     /* skip val->alignment */
128     /* skip val->memoryTypeBits */
129 }
130 
131 /* struct VkSparseImageFormatProperties */
132 
133 static inline void
vn_encode_VkSparseImageFormatProperties(struct vn_cs_encoder * enc,const VkSparseImageFormatProperties * val)134 vn_encode_VkSparseImageFormatProperties(struct vn_cs_encoder *enc, const VkSparseImageFormatProperties *val)
135 {
136     vn_encode_VkFlags(enc, &val->aspectMask);
137     vn_encode_VkExtent3D(enc, &val->imageGranularity);
138     vn_encode_VkFlags(enc, &val->flags);
139 }
140 
141 static inline void
vn_decode_VkSparseImageFormatProperties_partial_temp(struct vn_cs_decoder * dec,VkSparseImageFormatProperties * val)142 vn_decode_VkSparseImageFormatProperties_partial_temp(struct vn_cs_decoder *dec, VkSparseImageFormatProperties *val)
143 {
144     /* skip val->aspectMask */
145     vn_decode_VkExtent3D_partial_temp(dec, &val->imageGranularity);
146     /* skip val->flags */
147 }
148 
149 /* struct VkImageSubresource */
150 
151 static inline void
vn_decode_VkImageSubresource_temp(struct vn_cs_decoder * dec,VkImageSubresource * val)152 vn_decode_VkImageSubresource_temp(struct vn_cs_decoder *dec, VkImageSubresource *val)
153 {
154     vn_decode_VkFlags(dec, &val->aspectMask);
155     vn_decode_uint32_t(dec, &val->mipLevel);
156     vn_decode_uint32_t(dec, &val->arrayLayer);
157 }
158 
159 static inline void
vn_replace_VkImageSubresource_handle(VkImageSubresource * val)160 vn_replace_VkImageSubresource_handle(VkImageSubresource *val)
161 {
162     /* skip val->aspectMask */
163     /* skip val->mipLevel */
164     /* skip val->arrayLayer */
165 }
166 
167 /* struct VkOffset3D */
168 
169 static inline void
vn_decode_VkOffset3D_temp(struct vn_cs_decoder * dec,VkOffset3D * val)170 vn_decode_VkOffset3D_temp(struct vn_cs_decoder *dec, VkOffset3D *val)
171 {
172     vn_decode_int32_t(dec, &val->x);
173     vn_decode_int32_t(dec, &val->y);
174     vn_decode_int32_t(dec, &val->z);
175 }
176 
177 static inline void
vn_replace_VkOffset3D_handle(VkOffset3D * val)178 vn_replace_VkOffset3D_handle(VkOffset3D *val)
179 {
180     /* skip val->x */
181     /* skip val->y */
182     /* skip val->z */
183 }
184 
185 /* struct VkSemaphoreTypeCreateInfo chain */
186 
187 static inline void *
vn_decode_VkSemaphoreTypeCreateInfo_pnext_temp(struct vn_cs_decoder * dec)188 vn_decode_VkSemaphoreTypeCreateInfo_pnext_temp(struct vn_cs_decoder *dec)
189 {
190     /* no known/supported struct */
191     if (vn_decode_simple_pointer(dec))
192         vn_cs_decoder_set_fatal(dec);
193     return NULL;
194 }
195 
196 static inline void
vn_decode_VkSemaphoreTypeCreateInfo_self_temp(struct vn_cs_decoder * dec,VkSemaphoreTypeCreateInfo * val)197 vn_decode_VkSemaphoreTypeCreateInfo_self_temp(struct vn_cs_decoder *dec, VkSemaphoreTypeCreateInfo *val)
198 {
199     /* skip val->{sType,pNext} */
200     vn_decode_VkSemaphoreType(dec, &val->semaphoreType);
201     vn_decode_uint64_t(dec, &val->initialValue);
202 }
203 
204 static inline void
vn_decode_VkSemaphoreTypeCreateInfo_temp(struct vn_cs_decoder * dec,VkSemaphoreTypeCreateInfo * val)205 vn_decode_VkSemaphoreTypeCreateInfo_temp(struct vn_cs_decoder *dec, VkSemaphoreTypeCreateInfo *val)
206 {
207     VkStructureType stype;
208     vn_decode_VkStructureType(dec, &stype);
209     if (stype != VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO)
210         vn_cs_decoder_set_fatal(dec);
211 
212     val->sType = stype;
213     val->pNext = vn_decode_VkSemaphoreTypeCreateInfo_pnext_temp(dec);
214     vn_decode_VkSemaphoreTypeCreateInfo_self_temp(dec, val);
215 }
216 
217 static inline void
vn_replace_VkSemaphoreTypeCreateInfo_handle_self(VkSemaphoreTypeCreateInfo * val)218 vn_replace_VkSemaphoreTypeCreateInfo_handle_self(VkSemaphoreTypeCreateInfo *val)
219 {
220     /* skip val->sType */
221     /* skip val->pNext */
222     /* skip val->semaphoreType */
223     /* skip val->initialValue */
224 }
225 
226 static inline void
vn_replace_VkSemaphoreTypeCreateInfo_handle(VkSemaphoreTypeCreateInfo * val)227 vn_replace_VkSemaphoreTypeCreateInfo_handle(VkSemaphoreTypeCreateInfo *val)
228 {
229     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
230 
231     do {
232         switch ((int32_t)pnext->sType) {
233         case VK_STRUCTURE_TYPE_SEMAPHORE_TYPE_CREATE_INFO:
234             vn_replace_VkSemaphoreTypeCreateInfo_handle_self((VkSemaphoreTypeCreateInfo *)pnext);
235             break;
236         default:
237             /* ignore unknown/unsupported struct */
238             break;
239         }
240         pnext = pnext->pNext;
241     } while (pnext);
242 }
243 
244 /* struct VkImageFormatListCreateInfo chain */
245 
246 static inline void *
vn_decode_VkImageFormatListCreateInfo_pnext_temp(struct vn_cs_decoder * dec)247 vn_decode_VkImageFormatListCreateInfo_pnext_temp(struct vn_cs_decoder *dec)
248 {
249     /* no known/supported struct */
250     if (vn_decode_simple_pointer(dec))
251         vn_cs_decoder_set_fatal(dec);
252     return NULL;
253 }
254 
255 static inline void
vn_decode_VkImageFormatListCreateInfo_self_temp(struct vn_cs_decoder * dec,VkImageFormatListCreateInfo * val)256 vn_decode_VkImageFormatListCreateInfo_self_temp(struct vn_cs_decoder *dec, VkImageFormatListCreateInfo *val)
257 {
258     /* skip val->{sType,pNext} */
259     vn_decode_uint32_t(dec, &val->viewFormatCount);
260     if (vn_peek_array_size(dec)) {
261         const size_t array_size = vn_decode_array_size(dec, val->viewFormatCount);
262         val->pViewFormats = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pViewFormats) * array_size);
263         if (!val->pViewFormats) return;
264         vn_decode_VkFormat_array(dec, (VkFormat *)val->pViewFormats, array_size);
265     } else {
266         vn_decode_array_size(dec, val->viewFormatCount);
267         val->pViewFormats = NULL;
268     }
269 }
270 
271 static inline void
vn_decode_VkImageFormatListCreateInfo_temp(struct vn_cs_decoder * dec,VkImageFormatListCreateInfo * val)272 vn_decode_VkImageFormatListCreateInfo_temp(struct vn_cs_decoder *dec, VkImageFormatListCreateInfo *val)
273 {
274     VkStructureType stype;
275     vn_decode_VkStructureType(dec, &stype);
276     if (stype != VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO)
277         vn_cs_decoder_set_fatal(dec);
278 
279     val->sType = stype;
280     val->pNext = vn_decode_VkImageFormatListCreateInfo_pnext_temp(dec);
281     vn_decode_VkImageFormatListCreateInfo_self_temp(dec, val);
282 }
283 
284 static inline void
vn_replace_VkImageFormatListCreateInfo_handle_self(VkImageFormatListCreateInfo * val)285 vn_replace_VkImageFormatListCreateInfo_handle_self(VkImageFormatListCreateInfo *val)
286 {
287     /* skip val->sType */
288     /* skip val->pNext */
289     /* skip val->viewFormatCount */
290     /* skip val->pViewFormats */
291 }
292 
293 static inline void
vn_replace_VkImageFormatListCreateInfo_handle(VkImageFormatListCreateInfo * val)294 vn_replace_VkImageFormatListCreateInfo_handle(VkImageFormatListCreateInfo *val)
295 {
296     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
297 
298     do {
299         switch ((int32_t)pnext->sType) {
300         case VK_STRUCTURE_TYPE_IMAGE_FORMAT_LIST_CREATE_INFO:
301             vn_replace_VkImageFormatListCreateInfo_handle_self((VkImageFormatListCreateInfo *)pnext);
302             break;
303         default:
304             /* ignore unknown/unsupported struct */
305             break;
306         }
307         pnext = pnext->pNext;
308     } while (pnext);
309 }
310 
311 /* struct VkImageStencilUsageCreateInfo chain */
312 
313 static inline void *
vn_decode_VkImageStencilUsageCreateInfo_pnext_temp(struct vn_cs_decoder * dec)314 vn_decode_VkImageStencilUsageCreateInfo_pnext_temp(struct vn_cs_decoder *dec)
315 {
316     /* no known/supported struct */
317     if (vn_decode_simple_pointer(dec))
318         vn_cs_decoder_set_fatal(dec);
319     return NULL;
320 }
321 
322 static inline void
vn_decode_VkImageStencilUsageCreateInfo_self_temp(struct vn_cs_decoder * dec,VkImageStencilUsageCreateInfo * val)323 vn_decode_VkImageStencilUsageCreateInfo_self_temp(struct vn_cs_decoder *dec, VkImageStencilUsageCreateInfo *val)
324 {
325     /* skip val->{sType,pNext} */
326     vn_decode_VkFlags(dec, &val->stencilUsage);
327 }
328 
329 static inline void
vn_decode_VkImageStencilUsageCreateInfo_temp(struct vn_cs_decoder * dec,VkImageStencilUsageCreateInfo * val)330 vn_decode_VkImageStencilUsageCreateInfo_temp(struct vn_cs_decoder *dec, VkImageStencilUsageCreateInfo *val)
331 {
332     VkStructureType stype;
333     vn_decode_VkStructureType(dec, &stype);
334     if (stype != VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO)
335         vn_cs_decoder_set_fatal(dec);
336 
337     val->sType = stype;
338     val->pNext = vn_decode_VkImageStencilUsageCreateInfo_pnext_temp(dec);
339     vn_decode_VkImageStencilUsageCreateInfo_self_temp(dec, val);
340 }
341 
342 static inline void
vn_replace_VkImageStencilUsageCreateInfo_handle_self(VkImageStencilUsageCreateInfo * val)343 vn_replace_VkImageStencilUsageCreateInfo_handle_self(VkImageStencilUsageCreateInfo *val)
344 {
345     /* skip val->sType */
346     /* skip val->pNext */
347     /* skip val->stencilUsage */
348 }
349 
350 static inline void
vn_replace_VkImageStencilUsageCreateInfo_handle(VkImageStencilUsageCreateInfo * val)351 vn_replace_VkImageStencilUsageCreateInfo_handle(VkImageStencilUsageCreateInfo *val)
352 {
353     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
354 
355     do {
356         switch ((int32_t)pnext->sType) {
357         case VK_STRUCTURE_TYPE_IMAGE_STENCIL_USAGE_CREATE_INFO:
358             vn_replace_VkImageStencilUsageCreateInfo_handle_self((VkImageStencilUsageCreateInfo *)pnext);
359             break;
360         default:
361             /* ignore unknown/unsupported struct */
362             break;
363         }
364         pnext = pnext->pNext;
365     } while (pnext);
366 }
367 
368 /* struct VkComponentMapping */
369 
370 static inline void
vn_encode_VkComponentMapping(struct vn_cs_encoder * enc,const VkComponentMapping * val)371 vn_encode_VkComponentMapping(struct vn_cs_encoder *enc, const VkComponentMapping *val)
372 {
373     vn_encode_VkComponentSwizzle(enc, &val->r);
374     vn_encode_VkComponentSwizzle(enc, &val->g);
375     vn_encode_VkComponentSwizzle(enc, &val->b);
376     vn_encode_VkComponentSwizzle(enc, &val->a);
377 }
378 
379 static inline void
vn_decode_VkComponentMapping_temp(struct vn_cs_decoder * dec,VkComponentMapping * val)380 vn_decode_VkComponentMapping_temp(struct vn_cs_decoder *dec, VkComponentMapping *val)
381 {
382     vn_decode_VkComponentSwizzle(dec, &val->r);
383     vn_decode_VkComponentSwizzle(dec, &val->g);
384     vn_decode_VkComponentSwizzle(dec, &val->b);
385     vn_decode_VkComponentSwizzle(dec, &val->a);
386 }
387 
388 static inline void
vn_decode_VkComponentMapping_partial_temp(struct vn_cs_decoder * dec,VkComponentMapping * val)389 vn_decode_VkComponentMapping_partial_temp(struct vn_cs_decoder *dec, VkComponentMapping *val)
390 {
391     /* skip val->r */
392     /* skip val->g */
393     /* skip val->b */
394     /* skip val->a */
395 }
396 
397 static inline void
vn_replace_VkComponentMapping_handle(VkComponentMapping * val)398 vn_replace_VkComponentMapping_handle(VkComponentMapping *val)
399 {
400     /* skip val->r */
401     /* skip val->g */
402     /* skip val->b */
403     /* skip val->a */
404 }
405 
406 /* struct VkImageSubresourceRange */
407 
408 static inline void
vn_decode_VkImageSubresourceRange_temp(struct vn_cs_decoder * dec,VkImageSubresourceRange * val)409 vn_decode_VkImageSubresourceRange_temp(struct vn_cs_decoder *dec, VkImageSubresourceRange *val)
410 {
411     vn_decode_VkFlags(dec, &val->aspectMask);
412     vn_decode_uint32_t(dec, &val->baseMipLevel);
413     vn_decode_uint32_t(dec, &val->levelCount);
414     vn_decode_uint32_t(dec, &val->baseArrayLayer);
415     vn_decode_uint32_t(dec, &val->layerCount);
416 }
417 
418 static inline void
vn_replace_VkImageSubresourceRange_handle(VkImageSubresourceRange * val)419 vn_replace_VkImageSubresourceRange_handle(VkImageSubresourceRange *val)
420 {
421     /* skip val->aspectMask */
422     /* skip val->baseMipLevel */
423     /* skip val->levelCount */
424     /* skip val->baseArrayLayer */
425     /* skip val->layerCount */
426 }
427 
428 /* struct VkSamplerYcbcrConversionInfo chain */
429 
430 static inline void *
vn_decode_VkSamplerYcbcrConversionInfo_pnext_temp(struct vn_cs_decoder * dec)431 vn_decode_VkSamplerYcbcrConversionInfo_pnext_temp(struct vn_cs_decoder *dec)
432 {
433     /* no known/supported struct */
434     if (vn_decode_simple_pointer(dec))
435         vn_cs_decoder_set_fatal(dec);
436     return NULL;
437 }
438 
439 static inline void
vn_decode_VkSamplerYcbcrConversionInfo_self_temp(struct vn_cs_decoder * dec,VkSamplerYcbcrConversionInfo * val)440 vn_decode_VkSamplerYcbcrConversionInfo_self_temp(struct vn_cs_decoder *dec, VkSamplerYcbcrConversionInfo *val)
441 {
442     /* skip val->{sType,pNext} */
443     vn_decode_VkSamplerYcbcrConversion_lookup(dec, &val->conversion);
444 }
445 
446 static inline void
vn_decode_VkSamplerYcbcrConversionInfo_temp(struct vn_cs_decoder * dec,VkSamplerYcbcrConversionInfo * val)447 vn_decode_VkSamplerYcbcrConversionInfo_temp(struct vn_cs_decoder *dec, VkSamplerYcbcrConversionInfo *val)
448 {
449     VkStructureType stype;
450     vn_decode_VkStructureType(dec, &stype);
451     if (stype != VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO)
452         vn_cs_decoder_set_fatal(dec);
453 
454     val->sType = stype;
455     val->pNext = vn_decode_VkSamplerYcbcrConversionInfo_pnext_temp(dec);
456     vn_decode_VkSamplerYcbcrConversionInfo_self_temp(dec, val);
457 }
458 
459 static inline void
vn_replace_VkSamplerYcbcrConversionInfo_handle_self(VkSamplerYcbcrConversionInfo * val)460 vn_replace_VkSamplerYcbcrConversionInfo_handle_self(VkSamplerYcbcrConversionInfo *val)
461 {
462     /* skip val->sType */
463     /* skip val->pNext */
464     vn_replace_VkSamplerYcbcrConversion_handle(&val->conversion);
465 }
466 
467 static inline void
vn_replace_VkSamplerYcbcrConversionInfo_handle(VkSamplerYcbcrConversionInfo * val)468 vn_replace_VkSamplerYcbcrConversionInfo_handle(VkSamplerYcbcrConversionInfo *val)
469 {
470     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
471 
472     do {
473         switch ((int32_t)pnext->sType) {
474         case VK_STRUCTURE_TYPE_SAMPLER_YCBCR_CONVERSION_INFO:
475             vn_replace_VkSamplerYcbcrConversionInfo_handle_self((VkSamplerYcbcrConversionInfo *)pnext);
476             break;
477         default:
478             /* ignore unknown/unsupported struct */
479             break;
480         }
481         pnext = pnext->pNext;
482     } while (pnext);
483 }
484 
485 /* struct VkShaderModuleCreateInfo chain */
486 
487 static inline void *
vn_decode_VkShaderModuleCreateInfo_pnext_temp(struct vn_cs_decoder * dec)488 vn_decode_VkShaderModuleCreateInfo_pnext_temp(struct vn_cs_decoder *dec)
489 {
490     /* no known/supported struct */
491     if (vn_decode_simple_pointer(dec))
492         vn_cs_decoder_set_fatal(dec);
493     return NULL;
494 }
495 
496 static inline void
vn_decode_VkShaderModuleCreateInfo_self_temp(struct vn_cs_decoder * dec,VkShaderModuleCreateInfo * val)497 vn_decode_VkShaderModuleCreateInfo_self_temp(struct vn_cs_decoder *dec, VkShaderModuleCreateInfo *val)
498 {
499     /* skip val->{sType,pNext} */
500     vn_decode_VkFlags(dec, &val->flags);
501     vn_decode_size_t(dec, &val->codeSize);
502     if (vn_peek_array_size(dec)) {
503         const size_t array_size = vn_decode_array_size(dec, val->codeSize / 4);
504         val->pCode = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pCode) * array_size);
505         if (!val->pCode) return;
506         vn_decode_uint32_t_array(dec, (uint32_t *)val->pCode, array_size);
507     } else {
508         vn_decode_array_size(dec, val->codeSize / 4);
509         val->pCode = NULL;
510     }
511 }
512 
513 static inline void
vn_decode_VkShaderModuleCreateInfo_temp(struct vn_cs_decoder * dec,VkShaderModuleCreateInfo * val)514 vn_decode_VkShaderModuleCreateInfo_temp(struct vn_cs_decoder *dec, VkShaderModuleCreateInfo *val)
515 {
516     VkStructureType stype;
517     vn_decode_VkStructureType(dec, &stype);
518     if (stype != VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO)
519         vn_cs_decoder_set_fatal(dec);
520 
521     val->sType = stype;
522     val->pNext = vn_decode_VkShaderModuleCreateInfo_pnext_temp(dec);
523     vn_decode_VkShaderModuleCreateInfo_self_temp(dec, val);
524 }
525 
526 static inline void
vn_replace_VkShaderModuleCreateInfo_handle_self(VkShaderModuleCreateInfo * val)527 vn_replace_VkShaderModuleCreateInfo_handle_self(VkShaderModuleCreateInfo *val)
528 {
529     /* skip val->sType */
530     /* skip val->pNext */
531     /* skip val->flags */
532     /* skip val->codeSize */
533     /* skip val->pCode */
534 }
535 
536 static inline void
vn_replace_VkShaderModuleCreateInfo_handle(VkShaderModuleCreateInfo * val)537 vn_replace_VkShaderModuleCreateInfo_handle(VkShaderModuleCreateInfo *val)
538 {
539     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
540 
541     do {
542         switch ((int32_t)pnext->sType) {
543         case VK_STRUCTURE_TYPE_SHADER_MODULE_CREATE_INFO:
544             vn_replace_VkShaderModuleCreateInfo_handle_self((VkShaderModuleCreateInfo *)pnext);
545             break;
546         default:
547             /* ignore unknown/unsupported struct */
548             break;
549         }
550         pnext = pnext->pNext;
551     } while (pnext);
552 }
553 
554 /* struct VkViewport */
555 
556 static inline void
vn_decode_VkViewport_temp(struct vn_cs_decoder * dec,VkViewport * val)557 vn_decode_VkViewport_temp(struct vn_cs_decoder *dec, VkViewport *val)
558 {
559     vn_decode_float(dec, &val->x);
560     vn_decode_float(dec, &val->y);
561     vn_decode_float(dec, &val->width);
562     vn_decode_float(dec, &val->height);
563     vn_decode_float(dec, &val->minDepth);
564     vn_decode_float(dec, &val->maxDepth);
565 }
566 
567 static inline void
vn_replace_VkViewport_handle(VkViewport * val)568 vn_replace_VkViewport_handle(VkViewport *val)
569 {
570     /* skip val->x */
571     /* skip val->y */
572     /* skip val->width */
573     /* skip val->height */
574     /* skip val->minDepth */
575     /* skip val->maxDepth */
576 }
577 
578 /* struct VkOffset2D */
579 
580 static inline void
vn_encode_VkOffset2D(struct vn_cs_encoder * enc,const VkOffset2D * val)581 vn_encode_VkOffset2D(struct vn_cs_encoder *enc, const VkOffset2D *val)
582 {
583     vn_encode_int32_t(enc, &val->x);
584     vn_encode_int32_t(enc, &val->y);
585 }
586 
587 static inline void
vn_decode_VkOffset2D_temp(struct vn_cs_decoder * dec,VkOffset2D * val)588 vn_decode_VkOffset2D_temp(struct vn_cs_decoder *dec, VkOffset2D *val)
589 {
590     vn_decode_int32_t(dec, &val->x);
591     vn_decode_int32_t(dec, &val->y);
592 }
593 
594 static inline void
vn_decode_VkOffset2D_partial_temp(struct vn_cs_decoder * dec,VkOffset2D * val)595 vn_decode_VkOffset2D_partial_temp(struct vn_cs_decoder *dec, VkOffset2D *val)
596 {
597     /* skip val->x */
598     /* skip val->y */
599 }
600 
601 static inline void
vn_replace_VkOffset2D_handle(VkOffset2D * val)602 vn_replace_VkOffset2D_handle(VkOffset2D *val)
603 {
604     /* skip val->x */
605     /* skip val->y */
606 }
607 
608 /* struct VkExtent2D */
609 
610 static inline void
vn_encode_VkExtent2D(struct vn_cs_encoder * enc,const VkExtent2D * val)611 vn_encode_VkExtent2D(struct vn_cs_encoder *enc, const VkExtent2D *val)
612 {
613     vn_encode_uint32_t(enc, &val->width);
614     vn_encode_uint32_t(enc, &val->height);
615 }
616 
617 static inline void
vn_decode_VkExtent2D_temp(struct vn_cs_decoder * dec,VkExtent2D * val)618 vn_decode_VkExtent2D_temp(struct vn_cs_decoder *dec, VkExtent2D *val)
619 {
620     vn_decode_uint32_t(dec, &val->width);
621     vn_decode_uint32_t(dec, &val->height);
622 }
623 
624 static inline void
vn_decode_VkExtent2D_partial_temp(struct vn_cs_decoder * dec,VkExtent2D * val)625 vn_decode_VkExtent2D_partial_temp(struct vn_cs_decoder *dec, VkExtent2D *val)
626 {
627     /* skip val->width */
628     /* skip val->height */
629 }
630 
631 static inline void
vn_replace_VkExtent2D_handle(VkExtent2D * val)632 vn_replace_VkExtent2D_handle(VkExtent2D *val)
633 {
634     /* skip val->width */
635     /* skip val->height */
636 }
637 
638 /* struct VkRect2D */
639 
640 static inline void
vn_encode_VkRect2D(struct vn_cs_encoder * enc,const VkRect2D * val)641 vn_encode_VkRect2D(struct vn_cs_encoder *enc, const VkRect2D *val)
642 {
643     vn_encode_VkOffset2D(enc, &val->offset);
644     vn_encode_VkExtent2D(enc, &val->extent);
645 }
646 
647 static inline void
vn_decode_VkRect2D_temp(struct vn_cs_decoder * dec,VkRect2D * val)648 vn_decode_VkRect2D_temp(struct vn_cs_decoder *dec, VkRect2D *val)
649 {
650     vn_decode_VkOffset2D_temp(dec, &val->offset);
651     vn_decode_VkExtent2D_temp(dec, &val->extent);
652 }
653 
654 static inline void
vn_decode_VkRect2D_partial_temp(struct vn_cs_decoder * dec,VkRect2D * val)655 vn_decode_VkRect2D_partial_temp(struct vn_cs_decoder *dec, VkRect2D *val)
656 {
657     vn_decode_VkOffset2D_partial_temp(dec, &val->offset);
658     vn_decode_VkExtent2D_partial_temp(dec, &val->extent);
659 }
660 
661 static inline void
vn_replace_VkRect2D_handle(VkRect2D * val)662 vn_replace_VkRect2D_handle(VkRect2D *val)
663 {
664     vn_replace_VkOffset2D_handle(&val->offset);
665     vn_replace_VkExtent2D_handle(&val->extent);
666 }
667 
668 /* union VkClearColorValue */
669 
670 static inline void
vn_decode_VkClearColorValue_temp(struct vn_cs_decoder * dec,VkClearColorValue * val)671 vn_decode_VkClearColorValue_temp(struct vn_cs_decoder *dec, VkClearColorValue *val)
672 {
673     uint32_t tag;
674     vn_decode_uint32_t(dec, &tag);
675     switch (tag) {
676     case 0:
677         {
678             const size_t array_size = vn_decode_array_size(dec, 4);
679             vn_decode_float_array(dec, val->float32, array_size);
680         }
681         break;
682     case 1:
683         {
684             const size_t array_size = vn_decode_array_size(dec, 4);
685             vn_decode_int32_t_array(dec, val->int32, array_size);
686         }
687         break;
688     case 2:
689         {
690             const size_t array_size = vn_decode_array_size(dec, 4);
691             vn_decode_uint32_t_array(dec, val->uint32, array_size);
692         }
693         break;
694     default:
695         vn_cs_decoder_set_fatal(dec);
696         break;
697     }
698 }
699 
700 /* struct VkMutableDescriptorTypeListEXT */
701 
702 static inline void
vn_decode_VkMutableDescriptorTypeListEXT_temp(struct vn_cs_decoder * dec,VkMutableDescriptorTypeListEXT * val)703 vn_decode_VkMutableDescriptorTypeListEXT_temp(struct vn_cs_decoder *dec, VkMutableDescriptorTypeListEXT *val)
704 {
705     vn_decode_uint32_t(dec, &val->descriptorTypeCount);
706     if (vn_peek_array_size(dec)) {
707         const size_t array_size = vn_decode_array_size(dec, val->descriptorTypeCount);
708         val->pDescriptorTypes = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pDescriptorTypes) * array_size);
709         if (!val->pDescriptorTypes) return;
710         vn_decode_VkDescriptorType_array(dec, (VkDescriptorType *)val->pDescriptorTypes, array_size);
711     } else {
712         vn_decode_array_size(dec, val->descriptorTypeCount);
713         val->pDescriptorTypes = NULL;
714     }
715 }
716 
717 static inline void
vn_replace_VkMutableDescriptorTypeListEXT_handle(VkMutableDescriptorTypeListEXT * val)718 vn_replace_VkMutableDescriptorTypeListEXT_handle(VkMutableDescriptorTypeListEXT *val)
719 {
720     /* skip val->descriptorTypeCount */
721     /* skip val->pDescriptorTypes */
722 }
723 
724 /* struct VkMutableDescriptorTypeCreateInfoEXT chain */
725 
726 static inline void *
vn_decode_VkMutableDescriptorTypeCreateInfoEXT_pnext_temp(struct vn_cs_decoder * dec)727 vn_decode_VkMutableDescriptorTypeCreateInfoEXT_pnext_temp(struct vn_cs_decoder *dec)
728 {
729     /* no known/supported struct */
730     if (vn_decode_simple_pointer(dec))
731         vn_cs_decoder_set_fatal(dec);
732     return NULL;
733 }
734 
735 static inline void
vn_decode_VkMutableDescriptorTypeCreateInfoEXT_self_temp(struct vn_cs_decoder * dec,VkMutableDescriptorTypeCreateInfoEXT * val)736 vn_decode_VkMutableDescriptorTypeCreateInfoEXT_self_temp(struct vn_cs_decoder *dec, VkMutableDescriptorTypeCreateInfoEXT *val)
737 {
738     /* skip val->{sType,pNext} */
739     vn_decode_uint32_t(dec, &val->mutableDescriptorTypeListCount);
740     if (vn_peek_array_size(dec)) {
741         const uint32_t iter_count = vn_decode_array_size(dec, val->mutableDescriptorTypeListCount);
742         val->pMutableDescriptorTypeLists = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pMutableDescriptorTypeLists) * iter_count);
743         if (!val->pMutableDescriptorTypeLists) return;
744         for (uint32_t i = 0; i < iter_count; i++)
745             vn_decode_VkMutableDescriptorTypeListEXT_temp(dec, &((VkMutableDescriptorTypeListEXT *)val->pMutableDescriptorTypeLists)[i]);
746     } else {
747         vn_decode_array_size(dec, val->mutableDescriptorTypeListCount);
748         val->pMutableDescriptorTypeLists = NULL;
749     }
750 }
751 
752 static inline void
vn_decode_VkMutableDescriptorTypeCreateInfoEXT_temp(struct vn_cs_decoder * dec,VkMutableDescriptorTypeCreateInfoEXT * val)753 vn_decode_VkMutableDescriptorTypeCreateInfoEXT_temp(struct vn_cs_decoder *dec, VkMutableDescriptorTypeCreateInfoEXT *val)
754 {
755     VkStructureType stype;
756     vn_decode_VkStructureType(dec, &stype);
757     if (stype != VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT)
758         vn_cs_decoder_set_fatal(dec);
759 
760     val->sType = stype;
761     val->pNext = vn_decode_VkMutableDescriptorTypeCreateInfoEXT_pnext_temp(dec);
762     vn_decode_VkMutableDescriptorTypeCreateInfoEXT_self_temp(dec, val);
763 }
764 
765 static inline void
vn_replace_VkMutableDescriptorTypeCreateInfoEXT_handle_self(VkMutableDescriptorTypeCreateInfoEXT * val)766 vn_replace_VkMutableDescriptorTypeCreateInfoEXT_handle_self(VkMutableDescriptorTypeCreateInfoEXT *val)
767 {
768     /* skip val->sType */
769     /* skip val->pNext */
770     /* skip val->mutableDescriptorTypeListCount */
771     if (val->pMutableDescriptorTypeLists) {
772        for (uint32_t i = 0; i < val->mutableDescriptorTypeListCount; i++)
773             vn_replace_VkMutableDescriptorTypeListEXT_handle(&((VkMutableDescriptorTypeListEXT *)val->pMutableDescriptorTypeLists)[i]);
774     }
775 }
776 
777 static inline void
vn_replace_VkMutableDescriptorTypeCreateInfoEXT_handle(VkMutableDescriptorTypeCreateInfoEXT * val)778 vn_replace_VkMutableDescriptorTypeCreateInfoEXT_handle(VkMutableDescriptorTypeCreateInfoEXT *val)
779 {
780     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
781 
782     do {
783         switch ((int32_t)pnext->sType) {
784         case VK_STRUCTURE_TYPE_MUTABLE_DESCRIPTOR_TYPE_CREATE_INFO_EXT:
785             vn_replace_VkMutableDescriptorTypeCreateInfoEXT_handle_self((VkMutableDescriptorTypeCreateInfoEXT *)pnext);
786             break;
787         default:
788             /* ignore unknown/unsupported struct */
789             break;
790         }
791         pnext = pnext->pNext;
792     } while (pnext);
793 }
794 
795 /* struct VkDescriptorImageInfo */
796 
797 static inline void
vn_decode_VkDescriptorImageInfo_temp(struct vn_cs_decoder * dec,VkDescriptorImageInfo * val)798 vn_decode_VkDescriptorImageInfo_temp(struct vn_cs_decoder *dec, VkDescriptorImageInfo *val)
799 {
800     vn_decode_VkSampler_lookup(dec, &val->sampler);
801     vn_decode_VkImageView_lookup(dec, &val->imageView);
802     vn_decode_VkImageLayout(dec, &val->imageLayout);
803 }
804 
805 static inline void
vn_replace_VkDescriptorImageInfo_handle(VkDescriptorImageInfo * val)806 vn_replace_VkDescriptorImageInfo_handle(VkDescriptorImageInfo *val)
807 {
808     vn_replace_VkSampler_handle(&val->sampler);
809     vn_replace_VkImageView_handle(&val->imageView);
810     /* skip val->imageLayout */
811 }
812 
813 /* struct VkDescriptorBufferInfo */
814 
815 static inline void
vn_decode_VkDescriptorBufferInfo_temp(struct vn_cs_decoder * dec,VkDescriptorBufferInfo * val)816 vn_decode_VkDescriptorBufferInfo_temp(struct vn_cs_decoder *dec, VkDescriptorBufferInfo *val)
817 {
818     vn_decode_VkBuffer_lookup(dec, &val->buffer);
819     vn_decode_VkDeviceSize(dec, &val->offset);
820     vn_decode_VkDeviceSize(dec, &val->range);
821 }
822 
823 static inline void
vn_replace_VkDescriptorBufferInfo_handle(VkDescriptorBufferInfo * val)824 vn_replace_VkDescriptorBufferInfo_handle(VkDescriptorBufferInfo *val)
825 {
826     vn_replace_VkBuffer_handle(&val->buffer);
827     /* skip val->offset */
828     /* skip val->range */
829 }
830 
831 /* struct VkWriteDescriptorSetInlineUniformBlock chain */
832 
833 static inline void *
vn_decode_VkWriteDescriptorSetInlineUniformBlock_pnext_temp(struct vn_cs_decoder * dec)834 vn_decode_VkWriteDescriptorSetInlineUniformBlock_pnext_temp(struct vn_cs_decoder *dec)
835 {
836     /* no known/supported struct */
837     if (vn_decode_simple_pointer(dec))
838         vn_cs_decoder_set_fatal(dec);
839     return NULL;
840 }
841 
842 static inline void
vn_decode_VkWriteDescriptorSetInlineUniformBlock_self_temp(struct vn_cs_decoder * dec,VkWriteDescriptorSetInlineUniformBlock * val)843 vn_decode_VkWriteDescriptorSetInlineUniformBlock_self_temp(struct vn_cs_decoder *dec, VkWriteDescriptorSetInlineUniformBlock *val)
844 {
845     /* skip val->{sType,pNext} */
846     vn_decode_uint32_t(dec, &val->dataSize);
847     if (vn_peek_array_size(dec)) {
848         const size_t array_size = vn_decode_array_size(dec, val->dataSize);
849         val->pData = vn_cs_decoder_alloc_temp(dec, array_size);
850         if (!val->pData) return;
851         vn_decode_blob_array(dec, (void *)val->pData, array_size);
852     } else {
853         vn_decode_array_size(dec, val->dataSize);
854         val->pData = NULL;
855     }
856 }
857 
858 static inline void
vn_decode_VkWriteDescriptorSetInlineUniformBlock_temp(struct vn_cs_decoder * dec,VkWriteDescriptorSetInlineUniformBlock * val)859 vn_decode_VkWriteDescriptorSetInlineUniformBlock_temp(struct vn_cs_decoder *dec, VkWriteDescriptorSetInlineUniformBlock *val)
860 {
861     VkStructureType stype;
862     vn_decode_VkStructureType(dec, &stype);
863     if (stype != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK)
864         vn_cs_decoder_set_fatal(dec);
865 
866     val->sType = stype;
867     val->pNext = vn_decode_VkWriteDescriptorSetInlineUniformBlock_pnext_temp(dec);
868     vn_decode_VkWriteDescriptorSetInlineUniformBlock_self_temp(dec, val);
869 }
870 
871 static inline void
vn_replace_VkWriteDescriptorSetInlineUniformBlock_handle_self(VkWriteDescriptorSetInlineUniformBlock * val)872 vn_replace_VkWriteDescriptorSetInlineUniformBlock_handle_self(VkWriteDescriptorSetInlineUniformBlock *val)
873 {
874     /* skip val->sType */
875     /* skip val->pNext */
876     /* skip val->dataSize */
877     /* skip val->pData */
878 }
879 
880 static inline void
vn_replace_VkWriteDescriptorSetInlineUniformBlock_handle(VkWriteDescriptorSetInlineUniformBlock * val)881 vn_replace_VkWriteDescriptorSetInlineUniformBlock_handle(VkWriteDescriptorSetInlineUniformBlock *val)
882 {
883     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
884 
885     do {
886         switch ((int32_t)pnext->sType) {
887         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK:
888             vn_replace_VkWriteDescriptorSetInlineUniformBlock_handle_self((VkWriteDescriptorSetInlineUniformBlock *)pnext);
889             break;
890         default:
891             /* ignore unknown/unsupported struct */
892             break;
893         }
894         pnext = pnext->pNext;
895     } while (pnext);
896 }
897 
898 /* struct VkWriteDescriptorSet chain */
899 
900 static inline void *
vn_decode_VkWriteDescriptorSet_pnext_temp(struct vn_cs_decoder * dec)901 vn_decode_VkWriteDescriptorSet_pnext_temp(struct vn_cs_decoder *dec)
902 {
903     VkBaseOutStructure *pnext;
904     VkStructureType stype;
905 
906     if (!vn_decode_simple_pointer(dec))
907         return NULL;
908 
909     vn_decode_VkStructureType(dec, &stype);
910     switch ((int32_t)stype) {
911     case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK:
912         pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkWriteDescriptorSetInlineUniformBlock));
913         if (pnext) {
914             pnext->sType = stype;
915             pnext->pNext = vn_decode_VkWriteDescriptorSet_pnext_temp(dec);
916             vn_decode_VkWriteDescriptorSetInlineUniformBlock_self_temp(dec, (VkWriteDescriptorSetInlineUniformBlock *)pnext);
917         }
918         break;
919     default:
920         /* unexpected struct */
921         pnext = NULL;
922         vn_cs_decoder_set_fatal(dec);
923         break;
924     }
925 
926     return pnext;
927 }
928 
929 static inline void
vn_decode_VkWriteDescriptorSet_self_temp(struct vn_cs_decoder * dec,VkWriteDescriptorSet * val)930 vn_decode_VkWriteDescriptorSet_self_temp(struct vn_cs_decoder *dec, VkWriteDescriptorSet *val)
931 {
932     /* skip val->{sType,pNext} */
933     vn_decode_VkDescriptorSet_lookup(dec, &val->dstSet);
934     vn_decode_uint32_t(dec, &val->dstBinding);
935     vn_decode_uint32_t(dec, &val->dstArrayElement);
936     vn_decode_uint32_t(dec, &val->descriptorCount);
937     vn_decode_VkDescriptorType(dec, &val->descriptorType);
938     if (vn_peek_array_size(dec)) {
939         const uint32_t iter_count = vn_decode_array_size(dec, val->descriptorCount);
940         val->pImageInfo = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pImageInfo) * iter_count);
941         if (!val->pImageInfo) return;
942         for (uint32_t i = 0; i < iter_count; i++)
943             vn_decode_VkDescriptorImageInfo_temp(dec, &((VkDescriptorImageInfo *)val->pImageInfo)[i]);
944     } else {
945         vn_decode_array_size_unchecked(dec);
946         val->pImageInfo = NULL;
947     }
948     if (vn_peek_array_size(dec)) {
949         const uint32_t iter_count = vn_decode_array_size(dec, val->descriptorCount);
950         val->pBufferInfo = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pBufferInfo) * iter_count);
951         if (!val->pBufferInfo) return;
952         for (uint32_t i = 0; i < iter_count; i++)
953             vn_decode_VkDescriptorBufferInfo_temp(dec, &((VkDescriptorBufferInfo *)val->pBufferInfo)[i]);
954     } else {
955         vn_decode_array_size_unchecked(dec);
956         val->pBufferInfo = NULL;
957     }
958     if (vn_peek_array_size(dec)) {
959         const uint32_t iter_count = vn_decode_array_size(dec, val->descriptorCount);
960         val->pTexelBufferView = vn_cs_decoder_alloc_temp(dec, sizeof(*val->pTexelBufferView) * iter_count);
961         if (!val->pTexelBufferView) return;
962         for (uint32_t i = 0; i < iter_count; i++)
963             vn_decode_VkBufferView_lookup(dec, &((VkBufferView *)val->pTexelBufferView)[i]);
964     } else {
965         vn_decode_array_size_unchecked(dec);
966         val->pTexelBufferView = NULL;
967     }
968 }
969 
970 static inline void
vn_decode_VkWriteDescriptorSet_temp(struct vn_cs_decoder * dec,VkWriteDescriptorSet * val)971 vn_decode_VkWriteDescriptorSet_temp(struct vn_cs_decoder *dec, VkWriteDescriptorSet *val)
972 {
973     VkStructureType stype;
974     vn_decode_VkStructureType(dec, &stype);
975     if (stype != VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET)
976         vn_cs_decoder_set_fatal(dec);
977 
978     val->sType = stype;
979     val->pNext = vn_decode_VkWriteDescriptorSet_pnext_temp(dec);
980     vn_decode_VkWriteDescriptorSet_self_temp(dec, val);
981 }
982 
983 static inline void
vn_replace_VkWriteDescriptorSet_handle_self(VkWriteDescriptorSet * val)984 vn_replace_VkWriteDescriptorSet_handle_self(VkWriteDescriptorSet *val)
985 {
986     /* skip val->sType */
987     /* skip val->pNext */
988     vn_replace_VkDescriptorSet_handle(&val->dstSet);
989     /* skip val->dstBinding */
990     /* skip val->dstArrayElement */
991     /* skip val->descriptorCount */
992     /* skip val->descriptorType */
993     if (val->pImageInfo) {
994        for (uint32_t i = 0; i < val->descriptorCount; i++)
995             vn_replace_VkDescriptorImageInfo_handle(&((VkDescriptorImageInfo *)val->pImageInfo)[i]);
996     }
997     if (val->pBufferInfo) {
998        for (uint32_t i = 0; i < val->descriptorCount; i++)
999             vn_replace_VkDescriptorBufferInfo_handle(&((VkDescriptorBufferInfo *)val->pBufferInfo)[i]);
1000     }
1001     if (val->pTexelBufferView) {
1002        for (uint32_t i = 0; i < val->descriptorCount; i++)
1003             vn_replace_VkBufferView_handle(&((VkBufferView *)val->pTexelBufferView)[i]);
1004     }
1005 }
1006 
1007 static inline void
vn_replace_VkWriteDescriptorSet_handle(VkWriteDescriptorSet * val)1008 vn_replace_VkWriteDescriptorSet_handle(VkWriteDescriptorSet *val)
1009 {
1010     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
1011 
1012     do {
1013         switch ((int32_t)pnext->sType) {
1014         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET:
1015             vn_replace_VkWriteDescriptorSet_handle_self((VkWriteDescriptorSet *)pnext);
1016             break;
1017         case VK_STRUCTURE_TYPE_WRITE_DESCRIPTOR_SET_INLINE_UNIFORM_BLOCK:
1018             vn_replace_VkWriteDescriptorSetInlineUniformBlock_handle_self((VkWriteDescriptorSetInlineUniformBlock *)pnext);
1019             break;
1020         default:
1021             /* ignore unknown/unsupported struct */
1022             break;
1023         }
1024         pnext = pnext->pNext;
1025     } while (pnext);
1026 }
1027 
1028 /* struct VkMemoryDedicatedRequirements chain */
1029 
1030 static inline void
vn_encode_VkMemoryDedicatedRequirements_pnext(struct vn_cs_encoder * enc,const void * val)1031 vn_encode_VkMemoryDedicatedRequirements_pnext(struct vn_cs_encoder *enc, const void *val)
1032 {
1033     /* no known/supported struct */
1034     vn_encode_simple_pointer(enc, NULL);
1035 }
1036 
1037 static inline void
vn_encode_VkMemoryDedicatedRequirements_self(struct vn_cs_encoder * enc,const VkMemoryDedicatedRequirements * val)1038 vn_encode_VkMemoryDedicatedRequirements_self(struct vn_cs_encoder *enc, const VkMemoryDedicatedRequirements *val)
1039 {
1040     /* skip val->{sType,pNext} */
1041     vn_encode_VkBool32(enc, &val->prefersDedicatedAllocation);
1042     vn_encode_VkBool32(enc, &val->requiresDedicatedAllocation);
1043 }
1044 
1045 static inline void
vn_encode_VkMemoryDedicatedRequirements(struct vn_cs_encoder * enc,const VkMemoryDedicatedRequirements * val)1046 vn_encode_VkMemoryDedicatedRequirements(struct vn_cs_encoder *enc, const VkMemoryDedicatedRequirements *val)
1047 {
1048     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS);
1049     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS });
1050     vn_encode_VkMemoryDedicatedRequirements_pnext(enc, val->pNext);
1051     vn_encode_VkMemoryDedicatedRequirements_self(enc, val);
1052 }
1053 
1054 static inline void *
vn_decode_VkMemoryDedicatedRequirements_pnext_partial_temp(struct vn_cs_decoder * dec)1055 vn_decode_VkMemoryDedicatedRequirements_pnext_partial_temp(struct vn_cs_decoder *dec)
1056 {
1057     /* no known/supported struct */
1058     if (vn_decode_simple_pointer(dec))
1059         vn_cs_decoder_set_fatal(dec);
1060     return NULL;
1061 }
1062 
1063 static inline void
vn_decode_VkMemoryDedicatedRequirements_self_partial_temp(struct vn_cs_decoder * dec,VkMemoryDedicatedRequirements * val)1064 vn_decode_VkMemoryDedicatedRequirements_self_partial_temp(struct vn_cs_decoder *dec, VkMemoryDedicatedRequirements *val)
1065 {
1066     /* skip val->{sType,pNext} */
1067     /* skip val->prefersDedicatedAllocation */
1068     /* skip val->requiresDedicatedAllocation */
1069 }
1070 
1071 static inline void
vn_decode_VkMemoryDedicatedRequirements_partial_temp(struct vn_cs_decoder * dec,VkMemoryDedicatedRequirements * val)1072 vn_decode_VkMemoryDedicatedRequirements_partial_temp(struct vn_cs_decoder *dec, VkMemoryDedicatedRequirements *val)
1073 {
1074     VkStructureType stype;
1075     vn_decode_VkStructureType(dec, &stype);
1076     if (stype != VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS)
1077         vn_cs_decoder_set_fatal(dec);
1078 
1079     val->sType = stype;
1080     val->pNext = vn_decode_VkMemoryDedicatedRequirements_pnext_partial_temp(dec);
1081     vn_decode_VkMemoryDedicatedRequirements_self_partial_temp(dec, val);
1082 }
1083 
1084 /* struct VkMemoryRequirements2 chain */
1085 
1086 static inline void
vn_encode_VkMemoryRequirements2_pnext(struct vn_cs_encoder * enc,const void * val)1087 vn_encode_VkMemoryRequirements2_pnext(struct vn_cs_encoder *enc, const void *val)
1088 {
1089     const VkBaseInStructure *pnext = val;
1090 
1091     while (pnext) {
1092         switch ((int32_t)pnext->sType) {
1093         case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
1094             vn_encode_simple_pointer(enc, pnext);
1095             vn_encode_VkStructureType(enc, &pnext->sType);
1096             vn_encode_VkMemoryRequirements2_pnext(enc, pnext->pNext);
1097             vn_encode_VkMemoryDedicatedRequirements_self(enc, (const VkMemoryDedicatedRequirements *)pnext);
1098             return;
1099         default:
1100             /* ignore unknown/unsupported struct */
1101             break;
1102         }
1103         pnext = pnext->pNext;
1104     }
1105 
1106     vn_encode_simple_pointer(enc, NULL);
1107 }
1108 
1109 static inline void
vn_encode_VkMemoryRequirements2_self(struct vn_cs_encoder * enc,const VkMemoryRequirements2 * val)1110 vn_encode_VkMemoryRequirements2_self(struct vn_cs_encoder *enc, const VkMemoryRequirements2 *val)
1111 {
1112     /* skip val->{sType,pNext} */
1113     vn_encode_VkMemoryRequirements(enc, &val->memoryRequirements);
1114 }
1115 
1116 static inline void
vn_encode_VkMemoryRequirements2(struct vn_cs_encoder * enc,const VkMemoryRequirements2 * val)1117 vn_encode_VkMemoryRequirements2(struct vn_cs_encoder *enc, const VkMemoryRequirements2 *val)
1118 {
1119     assert(val->sType == VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2);
1120     vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2 });
1121     vn_encode_VkMemoryRequirements2_pnext(enc, val->pNext);
1122     vn_encode_VkMemoryRequirements2_self(enc, val);
1123 }
1124 
1125 static inline void *
vn_decode_VkMemoryRequirements2_pnext_partial_temp(struct vn_cs_decoder * dec)1126 vn_decode_VkMemoryRequirements2_pnext_partial_temp(struct vn_cs_decoder *dec)
1127 {
1128     VkBaseOutStructure *pnext;
1129     VkStructureType stype;
1130 
1131     if (!vn_decode_simple_pointer(dec))
1132         return NULL;
1133 
1134     vn_decode_VkStructureType(dec, &stype);
1135     switch ((int32_t)stype) {
1136     case VK_STRUCTURE_TYPE_MEMORY_DEDICATED_REQUIREMENTS:
1137         pnext = vn_cs_decoder_alloc_temp(dec, sizeof(VkMemoryDedicatedRequirements));
1138         if (pnext) {
1139             pnext->sType = stype;
1140             pnext->pNext = vn_decode_VkMemoryRequirements2_pnext_partial_temp(dec);
1141             vn_decode_VkMemoryDedicatedRequirements_self_partial_temp(dec, (VkMemoryDedicatedRequirements *)pnext);
1142         }
1143         break;
1144     default:
1145         /* unexpected struct */
1146         pnext = NULL;
1147         vn_cs_decoder_set_fatal(dec);
1148         break;
1149     }
1150 
1151     return pnext;
1152 }
1153 
1154 static inline void
vn_decode_VkMemoryRequirements2_self_partial_temp(struct vn_cs_decoder * dec,VkMemoryRequirements2 * val)1155 vn_decode_VkMemoryRequirements2_self_partial_temp(struct vn_cs_decoder *dec, VkMemoryRequirements2 *val)
1156 {
1157     /* skip val->{sType,pNext} */
1158     vn_decode_VkMemoryRequirements_partial_temp(dec, &val->memoryRequirements);
1159 }
1160 
1161 static inline void
vn_decode_VkMemoryRequirements2_partial_temp(struct vn_cs_decoder * dec,VkMemoryRequirements2 * val)1162 vn_decode_VkMemoryRequirements2_partial_temp(struct vn_cs_decoder *dec, VkMemoryRequirements2 *val)
1163 {
1164     VkStructureType stype;
1165     vn_decode_VkStructureType(dec, &stype);
1166     if (stype != VK_STRUCTURE_TYPE_MEMORY_REQUIREMENTS_2)
1167         vn_cs_decoder_set_fatal(dec);
1168 
1169     val->sType = stype;
1170     val->pNext = vn_decode_VkMemoryRequirements2_pnext_partial_temp(dec);
1171     vn_decode_VkMemoryRequirements2_self_partial_temp(dec, val);
1172 }
1173 
1174 /* struct VkMemoryBarrier2 chain */
1175 
1176 static inline void *
vn_decode_VkMemoryBarrier2_pnext_temp(struct vn_cs_decoder * dec)1177 vn_decode_VkMemoryBarrier2_pnext_temp(struct vn_cs_decoder *dec)
1178 {
1179     /* no known/supported struct */
1180     if (vn_decode_simple_pointer(dec))
1181         vn_cs_decoder_set_fatal(dec);
1182     return NULL;
1183 }
1184 
1185 static inline void
vn_decode_VkMemoryBarrier2_self_temp(struct vn_cs_decoder * dec,VkMemoryBarrier2 * val)1186 vn_decode_VkMemoryBarrier2_self_temp(struct vn_cs_decoder *dec, VkMemoryBarrier2 *val)
1187 {
1188     /* skip val->{sType,pNext} */
1189     vn_decode_VkFlags64(dec, &val->srcStageMask);
1190     vn_decode_VkFlags64(dec, &val->srcAccessMask);
1191     vn_decode_VkFlags64(dec, &val->dstStageMask);
1192     vn_decode_VkFlags64(dec, &val->dstAccessMask);
1193 }
1194 
1195 static inline void
vn_decode_VkMemoryBarrier2_temp(struct vn_cs_decoder * dec,VkMemoryBarrier2 * val)1196 vn_decode_VkMemoryBarrier2_temp(struct vn_cs_decoder *dec, VkMemoryBarrier2 *val)
1197 {
1198     VkStructureType stype;
1199     vn_decode_VkStructureType(dec, &stype);
1200     if (stype != VK_STRUCTURE_TYPE_MEMORY_BARRIER_2)
1201         vn_cs_decoder_set_fatal(dec);
1202 
1203     val->sType = stype;
1204     val->pNext = vn_decode_VkMemoryBarrier2_pnext_temp(dec);
1205     vn_decode_VkMemoryBarrier2_self_temp(dec, val);
1206 }
1207 
1208 static inline void
vn_replace_VkMemoryBarrier2_handle_self(VkMemoryBarrier2 * val)1209 vn_replace_VkMemoryBarrier2_handle_self(VkMemoryBarrier2 *val)
1210 {
1211     /* skip val->sType */
1212     /* skip val->pNext */
1213     /* skip val->srcStageMask */
1214     /* skip val->srcAccessMask */
1215     /* skip val->dstStageMask */
1216     /* skip val->dstAccessMask */
1217 }
1218 
1219 static inline void
vn_replace_VkMemoryBarrier2_handle(VkMemoryBarrier2 * val)1220 vn_replace_VkMemoryBarrier2_handle(VkMemoryBarrier2 *val)
1221 {
1222     struct VkBaseOutStructure *pnext = (struct VkBaseOutStructure *)val;
1223 
1224     do {
1225         switch ((int32_t)pnext->sType) {
1226         case VK_STRUCTURE_TYPE_MEMORY_BARRIER_2:
1227             vn_replace_VkMemoryBarrier2_handle_self((VkMemoryBarrier2 *)pnext);
1228             break;
1229         default:
1230             /* ignore unknown/unsupported struct */
1231             break;
1232         }
1233         pnext = pnext->pNext;
1234     } while (pnext);
1235 }
1236 
1237 #pragma GCC diagnostic pop
1238 
1239 #endif /* VN_PROTOCOL_RENDERER_STRUCTS_H */
1240