Book a Demo!
CoCalc Logo Icon
StoreFeaturesDocsShareSupportNewsAboutPoliciesSign UpSign In
PojavLauncherTeam
GitHub Repository: PojavLauncherTeam/mesa
Path: blob/21.2-virgl/src/virtio/venus-protocol/vn_protocol_driver_queue.h
4560 views
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_QUEUE_H
9
#define VN_PROTOCOL_DRIVER_QUEUE_H
10
11
#include "vn_device.h"
12
#include "vn_protocol_driver_structs.h"
13
14
/* struct VkDeviceGroupSubmitInfo chain */
15
16
static inline size_t
17
vn_sizeof_VkDeviceGroupSubmitInfo_pnext(const void *val)
18
{
19
/* no known/supported struct */
20
return vn_sizeof_simple_pointer(NULL);
21
}
22
23
static inline size_t
24
vn_sizeof_VkDeviceGroupSubmitInfo_self(const VkDeviceGroupSubmitInfo *val)
25
{
26
size_t size = 0;
27
/* skip val->{sType,pNext} */
28
size += vn_sizeof_uint32_t(&val->waitSemaphoreCount);
29
if (val->pWaitSemaphoreDeviceIndices) {
30
size += vn_sizeof_array_size(val->waitSemaphoreCount);
31
size += vn_sizeof_uint32_t_array(val->pWaitSemaphoreDeviceIndices, val->waitSemaphoreCount);
32
} else {
33
size += vn_sizeof_array_size(0);
34
}
35
size += vn_sizeof_uint32_t(&val->commandBufferCount);
36
if (val->pCommandBufferDeviceMasks) {
37
size += vn_sizeof_array_size(val->commandBufferCount);
38
size += vn_sizeof_uint32_t_array(val->pCommandBufferDeviceMasks, val->commandBufferCount);
39
} else {
40
size += vn_sizeof_array_size(0);
41
}
42
size += vn_sizeof_uint32_t(&val->signalSemaphoreCount);
43
if (val->pSignalSemaphoreDeviceIndices) {
44
size += vn_sizeof_array_size(val->signalSemaphoreCount);
45
size += vn_sizeof_uint32_t_array(val->pSignalSemaphoreDeviceIndices, val->signalSemaphoreCount);
46
} else {
47
size += vn_sizeof_array_size(0);
48
}
49
return size;
50
}
51
52
static inline size_t
53
vn_sizeof_VkDeviceGroupSubmitInfo(const VkDeviceGroupSubmitInfo *val)
54
{
55
size_t size = 0;
56
57
size += vn_sizeof_VkStructureType(&val->sType);
58
size += vn_sizeof_VkDeviceGroupSubmitInfo_pnext(val->pNext);
59
size += vn_sizeof_VkDeviceGroupSubmitInfo_self(val);
60
61
return size;
62
}
63
64
static inline void
65
vn_encode_VkDeviceGroupSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)
66
{
67
/* no known/supported struct */
68
vn_encode_simple_pointer(enc, NULL);
69
}
70
71
static inline void
72
vn_encode_VkDeviceGroupSubmitInfo_self(struct vn_cs_encoder *enc, const VkDeviceGroupSubmitInfo *val)
73
{
74
/* skip val->{sType,pNext} */
75
vn_encode_uint32_t(enc, &val->waitSemaphoreCount);
76
if (val->pWaitSemaphoreDeviceIndices) {
77
vn_encode_array_size(enc, val->waitSemaphoreCount);
78
vn_encode_uint32_t_array(enc, val->pWaitSemaphoreDeviceIndices, val->waitSemaphoreCount);
79
} else {
80
vn_encode_array_size(enc, 0);
81
}
82
vn_encode_uint32_t(enc, &val->commandBufferCount);
83
if (val->pCommandBufferDeviceMasks) {
84
vn_encode_array_size(enc, val->commandBufferCount);
85
vn_encode_uint32_t_array(enc, val->pCommandBufferDeviceMasks, val->commandBufferCount);
86
} else {
87
vn_encode_array_size(enc, 0);
88
}
89
vn_encode_uint32_t(enc, &val->signalSemaphoreCount);
90
if (val->pSignalSemaphoreDeviceIndices) {
91
vn_encode_array_size(enc, val->signalSemaphoreCount);
92
vn_encode_uint32_t_array(enc, val->pSignalSemaphoreDeviceIndices, val->signalSemaphoreCount);
93
} else {
94
vn_encode_array_size(enc, 0);
95
}
96
}
97
98
static inline void
99
vn_encode_VkDeviceGroupSubmitInfo(struct vn_cs_encoder *enc, const VkDeviceGroupSubmitInfo *val)
100
{
101
assert(val->sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO);
102
vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO });
103
vn_encode_VkDeviceGroupSubmitInfo_pnext(enc, val->pNext);
104
vn_encode_VkDeviceGroupSubmitInfo_self(enc, val);
105
}
106
107
/* struct VkProtectedSubmitInfo chain */
108
109
static inline size_t
110
vn_sizeof_VkProtectedSubmitInfo_pnext(const void *val)
111
{
112
/* no known/supported struct */
113
return vn_sizeof_simple_pointer(NULL);
114
}
115
116
static inline size_t
117
vn_sizeof_VkProtectedSubmitInfo_self(const VkProtectedSubmitInfo *val)
118
{
119
size_t size = 0;
120
/* skip val->{sType,pNext} */
121
size += vn_sizeof_VkBool32(&val->protectedSubmit);
122
return size;
123
}
124
125
static inline size_t
126
vn_sizeof_VkProtectedSubmitInfo(const VkProtectedSubmitInfo *val)
127
{
128
size_t size = 0;
129
130
size += vn_sizeof_VkStructureType(&val->sType);
131
size += vn_sizeof_VkProtectedSubmitInfo_pnext(val->pNext);
132
size += vn_sizeof_VkProtectedSubmitInfo_self(val);
133
134
return size;
135
}
136
137
static inline void
138
vn_encode_VkProtectedSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)
139
{
140
/* no known/supported struct */
141
vn_encode_simple_pointer(enc, NULL);
142
}
143
144
static inline void
145
vn_encode_VkProtectedSubmitInfo_self(struct vn_cs_encoder *enc, const VkProtectedSubmitInfo *val)
146
{
147
/* skip val->{sType,pNext} */
148
vn_encode_VkBool32(enc, &val->protectedSubmit);
149
}
150
151
static inline void
152
vn_encode_VkProtectedSubmitInfo(struct vn_cs_encoder *enc, const VkProtectedSubmitInfo *val)
153
{
154
assert(val->sType == VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO);
155
vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO });
156
vn_encode_VkProtectedSubmitInfo_pnext(enc, val->pNext);
157
vn_encode_VkProtectedSubmitInfo_self(enc, val);
158
}
159
160
/* struct VkTimelineSemaphoreSubmitInfo chain */
161
162
static inline size_t
163
vn_sizeof_VkTimelineSemaphoreSubmitInfo_pnext(const void *val)
164
{
165
/* no known/supported struct */
166
return vn_sizeof_simple_pointer(NULL);
167
}
168
169
static inline size_t
170
vn_sizeof_VkTimelineSemaphoreSubmitInfo_self(const VkTimelineSemaphoreSubmitInfo *val)
171
{
172
size_t size = 0;
173
/* skip val->{sType,pNext} */
174
size += vn_sizeof_uint32_t(&val->waitSemaphoreValueCount);
175
if (val->pWaitSemaphoreValues) {
176
size += vn_sizeof_array_size(val->waitSemaphoreValueCount);
177
size += vn_sizeof_uint64_t_array(val->pWaitSemaphoreValues, val->waitSemaphoreValueCount);
178
} else {
179
size += vn_sizeof_array_size(0);
180
}
181
size += vn_sizeof_uint32_t(&val->signalSemaphoreValueCount);
182
if (val->pSignalSemaphoreValues) {
183
size += vn_sizeof_array_size(val->signalSemaphoreValueCount);
184
size += vn_sizeof_uint64_t_array(val->pSignalSemaphoreValues, val->signalSemaphoreValueCount);
185
} else {
186
size += vn_sizeof_array_size(0);
187
}
188
return size;
189
}
190
191
static inline size_t
192
vn_sizeof_VkTimelineSemaphoreSubmitInfo(const VkTimelineSemaphoreSubmitInfo *val)
193
{
194
size_t size = 0;
195
196
size += vn_sizeof_VkStructureType(&val->sType);
197
size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_pnext(val->pNext);
198
size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_self(val);
199
200
return size;
201
}
202
203
static inline void
204
vn_encode_VkTimelineSemaphoreSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)
205
{
206
/* no known/supported struct */
207
vn_encode_simple_pointer(enc, NULL);
208
}
209
210
static inline void
211
vn_encode_VkTimelineSemaphoreSubmitInfo_self(struct vn_cs_encoder *enc, const VkTimelineSemaphoreSubmitInfo *val)
212
{
213
/* skip val->{sType,pNext} */
214
vn_encode_uint32_t(enc, &val->waitSemaphoreValueCount);
215
if (val->pWaitSemaphoreValues) {
216
vn_encode_array_size(enc, val->waitSemaphoreValueCount);
217
vn_encode_uint64_t_array(enc, val->pWaitSemaphoreValues, val->waitSemaphoreValueCount);
218
} else {
219
vn_encode_array_size(enc, 0);
220
}
221
vn_encode_uint32_t(enc, &val->signalSemaphoreValueCount);
222
if (val->pSignalSemaphoreValues) {
223
vn_encode_array_size(enc, val->signalSemaphoreValueCount);
224
vn_encode_uint64_t_array(enc, val->pSignalSemaphoreValues, val->signalSemaphoreValueCount);
225
} else {
226
vn_encode_array_size(enc, 0);
227
}
228
}
229
230
static inline void
231
vn_encode_VkTimelineSemaphoreSubmitInfo(struct vn_cs_encoder *enc, const VkTimelineSemaphoreSubmitInfo *val)
232
{
233
assert(val->sType == VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO);
234
vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO });
235
vn_encode_VkTimelineSemaphoreSubmitInfo_pnext(enc, val->pNext);
236
vn_encode_VkTimelineSemaphoreSubmitInfo_self(enc, val);
237
}
238
239
/* struct VkSubmitInfo chain */
240
241
static inline size_t
242
vn_sizeof_VkSubmitInfo_pnext(const void *val)
243
{
244
const VkBaseInStructure *pnext = val;
245
size_t size = 0;
246
247
while (pnext) {
248
switch ((int32_t)pnext->sType) {
249
case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
250
size += vn_sizeof_simple_pointer(pnext);
251
size += vn_sizeof_VkStructureType(&pnext->sType);
252
size += vn_sizeof_VkSubmitInfo_pnext(pnext->pNext);
253
size += vn_sizeof_VkDeviceGroupSubmitInfo_self((const VkDeviceGroupSubmitInfo *)pnext);
254
return size;
255
case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
256
size += vn_sizeof_simple_pointer(pnext);
257
size += vn_sizeof_VkStructureType(&pnext->sType);
258
size += vn_sizeof_VkSubmitInfo_pnext(pnext->pNext);
259
size += vn_sizeof_VkProtectedSubmitInfo_self((const VkProtectedSubmitInfo *)pnext);
260
return size;
261
case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
262
size += vn_sizeof_simple_pointer(pnext);
263
size += vn_sizeof_VkStructureType(&pnext->sType);
264
size += vn_sizeof_VkSubmitInfo_pnext(pnext->pNext);
265
size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_self((const VkTimelineSemaphoreSubmitInfo *)pnext);
266
return size;
267
default:
268
/* ignore unknown/unsupported struct */
269
break;
270
}
271
pnext = pnext->pNext;
272
}
273
274
return vn_sizeof_simple_pointer(NULL);
275
}
276
277
static inline size_t
278
vn_sizeof_VkSubmitInfo_self(const VkSubmitInfo *val)
279
{
280
size_t size = 0;
281
/* skip val->{sType,pNext} */
282
size += vn_sizeof_uint32_t(&val->waitSemaphoreCount);
283
if (val->pWaitSemaphores) {
284
size += vn_sizeof_array_size(val->waitSemaphoreCount);
285
for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)
286
size += vn_sizeof_VkSemaphore(&val->pWaitSemaphores[i]);
287
} else {
288
size += vn_sizeof_array_size(0);
289
}
290
if (val->pWaitDstStageMask) {
291
size += vn_sizeof_array_size(val->waitSemaphoreCount);
292
for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)
293
size += vn_sizeof_VkFlags(&val->pWaitDstStageMask[i]);
294
} else {
295
size += vn_sizeof_array_size(0);
296
}
297
size += vn_sizeof_uint32_t(&val->commandBufferCount);
298
if (val->pCommandBuffers) {
299
size += vn_sizeof_array_size(val->commandBufferCount);
300
for (uint32_t i = 0; i < val->commandBufferCount; i++)
301
size += vn_sizeof_VkCommandBuffer(&val->pCommandBuffers[i]);
302
} else {
303
size += vn_sizeof_array_size(0);
304
}
305
size += vn_sizeof_uint32_t(&val->signalSemaphoreCount);
306
if (val->pSignalSemaphores) {
307
size += vn_sizeof_array_size(val->signalSemaphoreCount);
308
for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)
309
size += vn_sizeof_VkSemaphore(&val->pSignalSemaphores[i]);
310
} else {
311
size += vn_sizeof_array_size(0);
312
}
313
return size;
314
}
315
316
static inline size_t
317
vn_sizeof_VkSubmitInfo(const VkSubmitInfo *val)
318
{
319
size_t size = 0;
320
321
size += vn_sizeof_VkStructureType(&val->sType);
322
size += vn_sizeof_VkSubmitInfo_pnext(val->pNext);
323
size += vn_sizeof_VkSubmitInfo_self(val);
324
325
return size;
326
}
327
328
static inline void
329
vn_encode_VkSubmitInfo_pnext(struct vn_cs_encoder *enc, const void *val)
330
{
331
const VkBaseInStructure *pnext = val;
332
333
while (pnext) {
334
switch ((int32_t)pnext->sType) {
335
case VK_STRUCTURE_TYPE_DEVICE_GROUP_SUBMIT_INFO:
336
vn_encode_simple_pointer(enc, pnext);
337
vn_encode_VkStructureType(enc, &pnext->sType);
338
vn_encode_VkSubmitInfo_pnext(enc, pnext->pNext);
339
vn_encode_VkDeviceGroupSubmitInfo_self(enc, (const VkDeviceGroupSubmitInfo *)pnext);
340
return;
341
case VK_STRUCTURE_TYPE_PROTECTED_SUBMIT_INFO:
342
vn_encode_simple_pointer(enc, pnext);
343
vn_encode_VkStructureType(enc, &pnext->sType);
344
vn_encode_VkSubmitInfo_pnext(enc, pnext->pNext);
345
vn_encode_VkProtectedSubmitInfo_self(enc, (const VkProtectedSubmitInfo *)pnext);
346
return;
347
case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
348
vn_encode_simple_pointer(enc, pnext);
349
vn_encode_VkStructureType(enc, &pnext->sType);
350
vn_encode_VkSubmitInfo_pnext(enc, pnext->pNext);
351
vn_encode_VkTimelineSemaphoreSubmitInfo_self(enc, (const VkTimelineSemaphoreSubmitInfo *)pnext);
352
return;
353
default:
354
/* ignore unknown/unsupported struct */
355
break;
356
}
357
pnext = pnext->pNext;
358
}
359
360
vn_encode_simple_pointer(enc, NULL);
361
}
362
363
static inline void
364
vn_encode_VkSubmitInfo_self(struct vn_cs_encoder *enc, const VkSubmitInfo *val)
365
{
366
/* skip val->{sType,pNext} */
367
vn_encode_uint32_t(enc, &val->waitSemaphoreCount);
368
if (val->pWaitSemaphores) {
369
vn_encode_array_size(enc, val->waitSemaphoreCount);
370
for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)
371
vn_encode_VkSemaphore(enc, &val->pWaitSemaphores[i]);
372
} else {
373
vn_encode_array_size(enc, 0);
374
}
375
if (val->pWaitDstStageMask) {
376
vn_encode_array_size(enc, val->waitSemaphoreCount);
377
for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)
378
vn_encode_VkFlags(enc, &val->pWaitDstStageMask[i]);
379
} else {
380
vn_encode_array_size(enc, 0);
381
}
382
vn_encode_uint32_t(enc, &val->commandBufferCount);
383
if (val->pCommandBuffers) {
384
vn_encode_array_size(enc, val->commandBufferCount);
385
for (uint32_t i = 0; i < val->commandBufferCount; i++)
386
vn_encode_VkCommandBuffer(enc, &val->pCommandBuffers[i]);
387
} else {
388
vn_encode_array_size(enc, 0);
389
}
390
vn_encode_uint32_t(enc, &val->signalSemaphoreCount);
391
if (val->pSignalSemaphores) {
392
vn_encode_array_size(enc, val->signalSemaphoreCount);
393
for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)
394
vn_encode_VkSemaphore(enc, &val->pSignalSemaphores[i]);
395
} else {
396
vn_encode_array_size(enc, 0);
397
}
398
}
399
400
static inline void
401
vn_encode_VkSubmitInfo(struct vn_cs_encoder *enc, const VkSubmitInfo *val)
402
{
403
assert(val->sType == VK_STRUCTURE_TYPE_SUBMIT_INFO);
404
vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_SUBMIT_INFO });
405
vn_encode_VkSubmitInfo_pnext(enc, val->pNext);
406
vn_encode_VkSubmitInfo_self(enc, val);
407
}
408
409
/* struct VkSparseMemoryBind */
410
411
static inline size_t
412
vn_sizeof_VkSparseMemoryBind(const VkSparseMemoryBind *val)
413
{
414
size_t size = 0;
415
size += vn_sizeof_VkDeviceSize(&val->resourceOffset);
416
size += vn_sizeof_VkDeviceSize(&val->size);
417
size += vn_sizeof_VkDeviceMemory(&val->memory);
418
size += vn_sizeof_VkDeviceSize(&val->memoryOffset);
419
size += vn_sizeof_VkFlags(&val->flags);
420
return size;
421
}
422
423
static inline void
424
vn_encode_VkSparseMemoryBind(struct vn_cs_encoder *enc, const VkSparseMemoryBind *val)
425
{
426
vn_encode_VkDeviceSize(enc, &val->resourceOffset);
427
vn_encode_VkDeviceSize(enc, &val->size);
428
vn_encode_VkDeviceMemory(enc, &val->memory);
429
vn_encode_VkDeviceSize(enc, &val->memoryOffset);
430
vn_encode_VkFlags(enc, &val->flags);
431
}
432
433
/* struct VkSparseBufferMemoryBindInfo */
434
435
static inline size_t
436
vn_sizeof_VkSparseBufferMemoryBindInfo(const VkSparseBufferMemoryBindInfo *val)
437
{
438
size_t size = 0;
439
size += vn_sizeof_VkBuffer(&val->buffer);
440
size += vn_sizeof_uint32_t(&val->bindCount);
441
if (val->pBinds) {
442
size += vn_sizeof_array_size(val->bindCount);
443
for (uint32_t i = 0; i < val->bindCount; i++)
444
size += vn_sizeof_VkSparseMemoryBind(&val->pBinds[i]);
445
} else {
446
size += vn_sizeof_array_size(0);
447
}
448
return size;
449
}
450
451
static inline void
452
vn_encode_VkSparseBufferMemoryBindInfo(struct vn_cs_encoder *enc, const VkSparseBufferMemoryBindInfo *val)
453
{
454
vn_encode_VkBuffer(enc, &val->buffer);
455
vn_encode_uint32_t(enc, &val->bindCount);
456
if (val->pBinds) {
457
vn_encode_array_size(enc, val->bindCount);
458
for (uint32_t i = 0; i < val->bindCount; i++)
459
vn_encode_VkSparseMemoryBind(enc, &val->pBinds[i]);
460
} else {
461
vn_encode_array_size(enc, 0);
462
}
463
}
464
465
/* struct VkSparseImageOpaqueMemoryBindInfo */
466
467
static inline size_t
468
vn_sizeof_VkSparseImageOpaqueMemoryBindInfo(const VkSparseImageOpaqueMemoryBindInfo *val)
469
{
470
size_t size = 0;
471
size += vn_sizeof_VkImage(&val->image);
472
size += vn_sizeof_uint32_t(&val->bindCount);
473
if (val->pBinds) {
474
size += vn_sizeof_array_size(val->bindCount);
475
for (uint32_t i = 0; i < val->bindCount; i++)
476
size += vn_sizeof_VkSparseMemoryBind(&val->pBinds[i]);
477
} else {
478
size += vn_sizeof_array_size(0);
479
}
480
return size;
481
}
482
483
static inline void
484
vn_encode_VkSparseImageOpaqueMemoryBindInfo(struct vn_cs_encoder *enc, const VkSparseImageOpaqueMemoryBindInfo *val)
485
{
486
vn_encode_VkImage(enc, &val->image);
487
vn_encode_uint32_t(enc, &val->bindCount);
488
if (val->pBinds) {
489
vn_encode_array_size(enc, val->bindCount);
490
for (uint32_t i = 0; i < val->bindCount; i++)
491
vn_encode_VkSparseMemoryBind(enc, &val->pBinds[i]);
492
} else {
493
vn_encode_array_size(enc, 0);
494
}
495
}
496
497
/* struct VkSparseImageMemoryBind */
498
499
static inline size_t
500
vn_sizeof_VkSparseImageMemoryBind(const VkSparseImageMemoryBind *val)
501
{
502
size_t size = 0;
503
size += vn_sizeof_VkImageSubresource(&val->subresource);
504
size += vn_sizeof_VkOffset3D(&val->offset);
505
size += vn_sizeof_VkExtent3D(&val->extent);
506
size += vn_sizeof_VkDeviceMemory(&val->memory);
507
size += vn_sizeof_VkDeviceSize(&val->memoryOffset);
508
size += vn_sizeof_VkFlags(&val->flags);
509
return size;
510
}
511
512
static inline void
513
vn_encode_VkSparseImageMemoryBind(struct vn_cs_encoder *enc, const VkSparseImageMemoryBind *val)
514
{
515
vn_encode_VkImageSubresource(enc, &val->subresource);
516
vn_encode_VkOffset3D(enc, &val->offset);
517
vn_encode_VkExtent3D(enc, &val->extent);
518
vn_encode_VkDeviceMemory(enc, &val->memory);
519
vn_encode_VkDeviceSize(enc, &val->memoryOffset);
520
vn_encode_VkFlags(enc, &val->flags);
521
}
522
523
/* struct VkSparseImageMemoryBindInfo */
524
525
static inline size_t
526
vn_sizeof_VkSparseImageMemoryBindInfo(const VkSparseImageMemoryBindInfo *val)
527
{
528
size_t size = 0;
529
size += vn_sizeof_VkImage(&val->image);
530
size += vn_sizeof_uint32_t(&val->bindCount);
531
if (val->pBinds) {
532
size += vn_sizeof_array_size(val->bindCount);
533
for (uint32_t i = 0; i < val->bindCount; i++)
534
size += vn_sizeof_VkSparseImageMemoryBind(&val->pBinds[i]);
535
} else {
536
size += vn_sizeof_array_size(0);
537
}
538
return size;
539
}
540
541
static inline void
542
vn_encode_VkSparseImageMemoryBindInfo(struct vn_cs_encoder *enc, const VkSparseImageMemoryBindInfo *val)
543
{
544
vn_encode_VkImage(enc, &val->image);
545
vn_encode_uint32_t(enc, &val->bindCount);
546
if (val->pBinds) {
547
vn_encode_array_size(enc, val->bindCount);
548
for (uint32_t i = 0; i < val->bindCount; i++)
549
vn_encode_VkSparseImageMemoryBind(enc, &val->pBinds[i]);
550
} else {
551
vn_encode_array_size(enc, 0);
552
}
553
}
554
555
/* struct VkDeviceGroupBindSparseInfo chain */
556
557
static inline size_t
558
vn_sizeof_VkDeviceGroupBindSparseInfo_pnext(const void *val)
559
{
560
/* no known/supported struct */
561
return vn_sizeof_simple_pointer(NULL);
562
}
563
564
static inline size_t
565
vn_sizeof_VkDeviceGroupBindSparseInfo_self(const VkDeviceGroupBindSparseInfo *val)
566
{
567
size_t size = 0;
568
/* skip val->{sType,pNext} */
569
size += vn_sizeof_uint32_t(&val->resourceDeviceIndex);
570
size += vn_sizeof_uint32_t(&val->memoryDeviceIndex);
571
return size;
572
}
573
574
static inline size_t
575
vn_sizeof_VkDeviceGroupBindSparseInfo(const VkDeviceGroupBindSparseInfo *val)
576
{
577
size_t size = 0;
578
579
size += vn_sizeof_VkStructureType(&val->sType);
580
size += vn_sizeof_VkDeviceGroupBindSparseInfo_pnext(val->pNext);
581
size += vn_sizeof_VkDeviceGroupBindSparseInfo_self(val);
582
583
return size;
584
}
585
586
static inline void
587
vn_encode_VkDeviceGroupBindSparseInfo_pnext(struct vn_cs_encoder *enc, const void *val)
588
{
589
/* no known/supported struct */
590
vn_encode_simple_pointer(enc, NULL);
591
}
592
593
static inline void
594
vn_encode_VkDeviceGroupBindSparseInfo_self(struct vn_cs_encoder *enc, const VkDeviceGroupBindSparseInfo *val)
595
{
596
/* skip val->{sType,pNext} */
597
vn_encode_uint32_t(enc, &val->resourceDeviceIndex);
598
vn_encode_uint32_t(enc, &val->memoryDeviceIndex);
599
}
600
601
static inline void
602
vn_encode_VkDeviceGroupBindSparseInfo(struct vn_cs_encoder *enc, const VkDeviceGroupBindSparseInfo *val)
603
{
604
assert(val->sType == VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO);
605
vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO });
606
vn_encode_VkDeviceGroupBindSparseInfo_pnext(enc, val->pNext);
607
vn_encode_VkDeviceGroupBindSparseInfo_self(enc, val);
608
}
609
610
/* struct VkBindSparseInfo chain */
611
612
static inline size_t
613
vn_sizeof_VkBindSparseInfo_pnext(const void *val)
614
{
615
const VkBaseInStructure *pnext = val;
616
size_t size = 0;
617
618
while (pnext) {
619
switch ((int32_t)pnext->sType) {
620
case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
621
size += vn_sizeof_simple_pointer(pnext);
622
size += vn_sizeof_VkStructureType(&pnext->sType);
623
size += vn_sizeof_VkBindSparseInfo_pnext(pnext->pNext);
624
size += vn_sizeof_VkDeviceGroupBindSparseInfo_self((const VkDeviceGroupBindSparseInfo *)pnext);
625
return size;
626
case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
627
size += vn_sizeof_simple_pointer(pnext);
628
size += vn_sizeof_VkStructureType(&pnext->sType);
629
size += vn_sizeof_VkBindSparseInfo_pnext(pnext->pNext);
630
size += vn_sizeof_VkTimelineSemaphoreSubmitInfo_self((const VkTimelineSemaphoreSubmitInfo *)pnext);
631
return size;
632
default:
633
/* ignore unknown/unsupported struct */
634
break;
635
}
636
pnext = pnext->pNext;
637
}
638
639
return vn_sizeof_simple_pointer(NULL);
640
}
641
642
static inline size_t
643
vn_sizeof_VkBindSparseInfo_self(const VkBindSparseInfo *val)
644
{
645
size_t size = 0;
646
/* skip val->{sType,pNext} */
647
size += vn_sizeof_uint32_t(&val->waitSemaphoreCount);
648
if (val->pWaitSemaphores) {
649
size += vn_sizeof_array_size(val->waitSemaphoreCount);
650
for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)
651
size += vn_sizeof_VkSemaphore(&val->pWaitSemaphores[i]);
652
} else {
653
size += vn_sizeof_array_size(0);
654
}
655
size += vn_sizeof_uint32_t(&val->bufferBindCount);
656
if (val->pBufferBinds) {
657
size += vn_sizeof_array_size(val->bufferBindCount);
658
for (uint32_t i = 0; i < val->bufferBindCount; i++)
659
size += vn_sizeof_VkSparseBufferMemoryBindInfo(&val->pBufferBinds[i]);
660
} else {
661
size += vn_sizeof_array_size(0);
662
}
663
size += vn_sizeof_uint32_t(&val->imageOpaqueBindCount);
664
if (val->pImageOpaqueBinds) {
665
size += vn_sizeof_array_size(val->imageOpaqueBindCount);
666
for (uint32_t i = 0; i < val->imageOpaqueBindCount; i++)
667
size += vn_sizeof_VkSparseImageOpaqueMemoryBindInfo(&val->pImageOpaqueBinds[i]);
668
} else {
669
size += vn_sizeof_array_size(0);
670
}
671
size += vn_sizeof_uint32_t(&val->imageBindCount);
672
if (val->pImageBinds) {
673
size += vn_sizeof_array_size(val->imageBindCount);
674
for (uint32_t i = 0; i < val->imageBindCount; i++)
675
size += vn_sizeof_VkSparseImageMemoryBindInfo(&val->pImageBinds[i]);
676
} else {
677
size += vn_sizeof_array_size(0);
678
}
679
size += vn_sizeof_uint32_t(&val->signalSemaphoreCount);
680
if (val->pSignalSemaphores) {
681
size += vn_sizeof_array_size(val->signalSemaphoreCount);
682
for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)
683
size += vn_sizeof_VkSemaphore(&val->pSignalSemaphores[i]);
684
} else {
685
size += vn_sizeof_array_size(0);
686
}
687
return size;
688
}
689
690
static inline size_t
691
vn_sizeof_VkBindSparseInfo(const VkBindSparseInfo *val)
692
{
693
size_t size = 0;
694
695
size += vn_sizeof_VkStructureType(&val->sType);
696
size += vn_sizeof_VkBindSparseInfo_pnext(val->pNext);
697
size += vn_sizeof_VkBindSparseInfo_self(val);
698
699
return size;
700
}
701
702
static inline void
703
vn_encode_VkBindSparseInfo_pnext(struct vn_cs_encoder *enc, const void *val)
704
{
705
const VkBaseInStructure *pnext = val;
706
707
while (pnext) {
708
switch ((int32_t)pnext->sType) {
709
case VK_STRUCTURE_TYPE_DEVICE_GROUP_BIND_SPARSE_INFO:
710
vn_encode_simple_pointer(enc, pnext);
711
vn_encode_VkStructureType(enc, &pnext->sType);
712
vn_encode_VkBindSparseInfo_pnext(enc, pnext->pNext);
713
vn_encode_VkDeviceGroupBindSparseInfo_self(enc, (const VkDeviceGroupBindSparseInfo *)pnext);
714
return;
715
case VK_STRUCTURE_TYPE_TIMELINE_SEMAPHORE_SUBMIT_INFO:
716
vn_encode_simple_pointer(enc, pnext);
717
vn_encode_VkStructureType(enc, &pnext->sType);
718
vn_encode_VkBindSparseInfo_pnext(enc, pnext->pNext);
719
vn_encode_VkTimelineSemaphoreSubmitInfo_self(enc, (const VkTimelineSemaphoreSubmitInfo *)pnext);
720
return;
721
default:
722
/* ignore unknown/unsupported struct */
723
break;
724
}
725
pnext = pnext->pNext;
726
}
727
728
vn_encode_simple_pointer(enc, NULL);
729
}
730
731
static inline void
732
vn_encode_VkBindSparseInfo_self(struct vn_cs_encoder *enc, const VkBindSparseInfo *val)
733
{
734
/* skip val->{sType,pNext} */
735
vn_encode_uint32_t(enc, &val->waitSemaphoreCount);
736
if (val->pWaitSemaphores) {
737
vn_encode_array_size(enc, val->waitSemaphoreCount);
738
for (uint32_t i = 0; i < val->waitSemaphoreCount; i++)
739
vn_encode_VkSemaphore(enc, &val->pWaitSemaphores[i]);
740
} else {
741
vn_encode_array_size(enc, 0);
742
}
743
vn_encode_uint32_t(enc, &val->bufferBindCount);
744
if (val->pBufferBinds) {
745
vn_encode_array_size(enc, val->bufferBindCount);
746
for (uint32_t i = 0; i < val->bufferBindCount; i++)
747
vn_encode_VkSparseBufferMemoryBindInfo(enc, &val->pBufferBinds[i]);
748
} else {
749
vn_encode_array_size(enc, 0);
750
}
751
vn_encode_uint32_t(enc, &val->imageOpaqueBindCount);
752
if (val->pImageOpaqueBinds) {
753
vn_encode_array_size(enc, val->imageOpaqueBindCount);
754
for (uint32_t i = 0; i < val->imageOpaqueBindCount; i++)
755
vn_encode_VkSparseImageOpaqueMemoryBindInfo(enc, &val->pImageOpaqueBinds[i]);
756
} else {
757
vn_encode_array_size(enc, 0);
758
}
759
vn_encode_uint32_t(enc, &val->imageBindCount);
760
if (val->pImageBinds) {
761
vn_encode_array_size(enc, val->imageBindCount);
762
for (uint32_t i = 0; i < val->imageBindCount; i++)
763
vn_encode_VkSparseImageMemoryBindInfo(enc, &val->pImageBinds[i]);
764
} else {
765
vn_encode_array_size(enc, 0);
766
}
767
vn_encode_uint32_t(enc, &val->signalSemaphoreCount);
768
if (val->pSignalSemaphores) {
769
vn_encode_array_size(enc, val->signalSemaphoreCount);
770
for (uint32_t i = 0; i < val->signalSemaphoreCount; i++)
771
vn_encode_VkSemaphore(enc, &val->pSignalSemaphores[i]);
772
} else {
773
vn_encode_array_size(enc, 0);
774
}
775
}
776
777
static inline void
778
vn_encode_VkBindSparseInfo(struct vn_cs_encoder *enc, const VkBindSparseInfo *val)
779
{
780
assert(val->sType == VK_STRUCTURE_TYPE_BIND_SPARSE_INFO);
781
vn_encode_VkStructureType(enc, &(VkStructureType){ VK_STRUCTURE_TYPE_BIND_SPARSE_INFO });
782
vn_encode_VkBindSparseInfo_pnext(enc, val->pNext);
783
vn_encode_VkBindSparseInfo_self(enc, val);
784
}
785
786
static inline size_t vn_sizeof_vkQueueSubmit(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
787
{
788
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueSubmit_EXT;
789
const VkFlags cmd_flags = 0;
790
size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
791
792
cmd_size += vn_sizeof_VkQueue(&queue);
793
cmd_size += vn_sizeof_uint32_t(&submitCount);
794
if (pSubmits) {
795
cmd_size += vn_sizeof_array_size(submitCount);
796
for (uint32_t i = 0; i < submitCount; i++)
797
cmd_size += vn_sizeof_VkSubmitInfo(&pSubmits[i]);
798
} else {
799
cmd_size += vn_sizeof_array_size(0);
800
}
801
cmd_size += vn_sizeof_VkFence(&fence);
802
803
return cmd_size;
804
}
805
806
static inline void vn_encode_vkQueueSubmit(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
807
{
808
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueSubmit_EXT;
809
810
vn_encode_VkCommandTypeEXT(enc, &cmd_type);
811
vn_encode_VkFlags(enc, &cmd_flags);
812
813
vn_encode_VkQueue(enc, &queue);
814
vn_encode_uint32_t(enc, &submitCount);
815
if (pSubmits) {
816
vn_encode_array_size(enc, submitCount);
817
for (uint32_t i = 0; i < submitCount; i++)
818
vn_encode_VkSubmitInfo(enc, &pSubmits[i]);
819
} else {
820
vn_encode_array_size(enc, 0);
821
}
822
vn_encode_VkFence(enc, &fence);
823
}
824
825
static inline size_t vn_sizeof_vkQueueSubmit_reply(VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
826
{
827
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueSubmit_EXT;
828
size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
829
830
VkResult ret;
831
cmd_size += vn_sizeof_VkResult(&ret);
832
/* skip queue */
833
/* skip submitCount */
834
/* skip pSubmits */
835
/* skip fence */
836
837
return cmd_size;
838
}
839
840
static inline VkResult vn_decode_vkQueueSubmit_reply(struct vn_cs_decoder *dec, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
841
{
842
VkCommandTypeEXT command_type;
843
vn_decode_VkCommandTypeEXT(dec, &command_type);
844
assert(command_type == VK_COMMAND_TYPE_vkQueueSubmit_EXT);
845
846
VkResult ret;
847
vn_decode_VkResult(dec, &ret);
848
/* skip queue */
849
/* skip submitCount */
850
/* skip pSubmits */
851
/* skip fence */
852
853
return ret;
854
}
855
856
static inline size_t vn_sizeof_vkQueueWaitIdle(VkQueue queue)
857
{
858
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueWaitIdle_EXT;
859
const VkFlags cmd_flags = 0;
860
size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
861
862
cmd_size += vn_sizeof_VkQueue(&queue);
863
864
return cmd_size;
865
}
866
867
static inline void vn_encode_vkQueueWaitIdle(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkQueue queue)
868
{
869
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueWaitIdle_EXT;
870
871
vn_encode_VkCommandTypeEXT(enc, &cmd_type);
872
vn_encode_VkFlags(enc, &cmd_flags);
873
874
vn_encode_VkQueue(enc, &queue);
875
}
876
877
static inline size_t vn_sizeof_vkQueueWaitIdle_reply(VkQueue queue)
878
{
879
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueWaitIdle_EXT;
880
size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
881
882
VkResult ret;
883
cmd_size += vn_sizeof_VkResult(&ret);
884
/* skip queue */
885
886
return cmd_size;
887
}
888
889
static inline VkResult vn_decode_vkQueueWaitIdle_reply(struct vn_cs_decoder *dec, VkQueue queue)
890
{
891
VkCommandTypeEXT command_type;
892
vn_decode_VkCommandTypeEXT(dec, &command_type);
893
assert(command_type == VK_COMMAND_TYPE_vkQueueWaitIdle_EXT);
894
895
VkResult ret;
896
vn_decode_VkResult(dec, &ret);
897
/* skip queue */
898
899
return ret;
900
}
901
902
static inline size_t vn_sizeof_vkQueueBindSparse(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
903
{
904
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueBindSparse_EXT;
905
const VkFlags cmd_flags = 0;
906
size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type) + vn_sizeof_VkFlags(&cmd_flags);
907
908
cmd_size += vn_sizeof_VkQueue(&queue);
909
cmd_size += vn_sizeof_uint32_t(&bindInfoCount);
910
if (pBindInfo) {
911
cmd_size += vn_sizeof_array_size(bindInfoCount);
912
for (uint32_t i = 0; i < bindInfoCount; i++)
913
cmd_size += vn_sizeof_VkBindSparseInfo(&pBindInfo[i]);
914
} else {
915
cmd_size += vn_sizeof_array_size(0);
916
}
917
cmd_size += vn_sizeof_VkFence(&fence);
918
919
return cmd_size;
920
}
921
922
static inline void vn_encode_vkQueueBindSparse(struct vn_cs_encoder *enc, VkCommandFlagsEXT cmd_flags, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
923
{
924
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueBindSparse_EXT;
925
926
vn_encode_VkCommandTypeEXT(enc, &cmd_type);
927
vn_encode_VkFlags(enc, &cmd_flags);
928
929
vn_encode_VkQueue(enc, &queue);
930
vn_encode_uint32_t(enc, &bindInfoCount);
931
if (pBindInfo) {
932
vn_encode_array_size(enc, bindInfoCount);
933
for (uint32_t i = 0; i < bindInfoCount; i++)
934
vn_encode_VkBindSparseInfo(enc, &pBindInfo[i]);
935
} else {
936
vn_encode_array_size(enc, 0);
937
}
938
vn_encode_VkFence(enc, &fence);
939
}
940
941
static inline size_t vn_sizeof_vkQueueBindSparse_reply(VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
942
{
943
const VkCommandTypeEXT cmd_type = VK_COMMAND_TYPE_vkQueueBindSparse_EXT;
944
size_t cmd_size = vn_sizeof_VkCommandTypeEXT(&cmd_type);
945
946
VkResult ret;
947
cmd_size += vn_sizeof_VkResult(&ret);
948
/* skip queue */
949
/* skip bindInfoCount */
950
/* skip pBindInfo */
951
/* skip fence */
952
953
return cmd_size;
954
}
955
956
static inline VkResult vn_decode_vkQueueBindSparse_reply(struct vn_cs_decoder *dec, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
957
{
958
VkCommandTypeEXT command_type;
959
vn_decode_VkCommandTypeEXT(dec, &command_type);
960
assert(command_type == VK_COMMAND_TYPE_vkQueueBindSparse_EXT);
961
962
VkResult ret;
963
vn_decode_VkResult(dec, &ret);
964
/* skip queue */
965
/* skip bindInfoCount */
966
/* skip pBindInfo */
967
/* skip fence */
968
969
return ret;
970
}
971
972
static 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)
973
{
974
uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
975
void *cmd_data = local_cmd_data;
976
size_t cmd_size = vn_sizeof_vkQueueSubmit(queue, submitCount, pSubmits, fence);
977
if (cmd_size > sizeof(local_cmd_data)) {
978
cmd_data = malloc(cmd_size);
979
if (!cmd_data)
980
cmd_size = 0;
981
}
982
const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkQueueSubmit_reply(queue, submitCount, pSubmits, fence) : 0;
983
984
struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
985
if (cmd_size) {
986
vn_encode_vkQueueSubmit(enc, cmd_flags, queue, submitCount, pSubmits, fence);
987
vn_instance_submit_command(vn_instance, submit);
988
if (cmd_data != local_cmd_data)
989
free(cmd_data);
990
}
991
}
992
993
static inline void vn_submit_vkQueueWaitIdle(struct vn_instance *vn_instance, VkCommandFlagsEXT cmd_flags, VkQueue queue, struct vn_instance_submit_command *submit)
994
{
995
uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
996
void *cmd_data = local_cmd_data;
997
size_t cmd_size = vn_sizeof_vkQueueWaitIdle(queue);
998
if (cmd_size > sizeof(local_cmd_data)) {
999
cmd_data = malloc(cmd_size);
1000
if (!cmd_data)
1001
cmd_size = 0;
1002
}
1003
const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkQueueWaitIdle_reply(queue) : 0;
1004
1005
struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
1006
if (cmd_size) {
1007
vn_encode_vkQueueWaitIdle(enc, cmd_flags, queue);
1008
vn_instance_submit_command(vn_instance, submit);
1009
if (cmd_data != local_cmd_data)
1010
free(cmd_data);
1011
}
1012
}
1013
1014
static 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)
1015
{
1016
uint8_t local_cmd_data[VN_SUBMIT_LOCAL_CMD_SIZE];
1017
void *cmd_data = local_cmd_data;
1018
size_t cmd_size = vn_sizeof_vkQueueBindSparse(queue, bindInfoCount, pBindInfo, fence);
1019
if (cmd_size > sizeof(local_cmd_data)) {
1020
cmd_data = malloc(cmd_size);
1021
if (!cmd_data)
1022
cmd_size = 0;
1023
}
1024
const size_t reply_size = cmd_flags & VK_COMMAND_GENERATE_REPLY_BIT_EXT ? vn_sizeof_vkQueueBindSparse_reply(queue, bindInfoCount, pBindInfo, fence) : 0;
1025
1026
struct vn_cs_encoder *enc = vn_instance_submit_command_init(vn_instance, submit, cmd_data, cmd_size, reply_size);
1027
if (cmd_size) {
1028
vn_encode_vkQueueBindSparse(enc, cmd_flags, queue, bindInfoCount, pBindInfo, fence);
1029
vn_instance_submit_command(vn_instance, submit);
1030
if (cmd_data != local_cmd_data)
1031
free(cmd_data);
1032
}
1033
}
1034
1035
static inline VkResult vn_call_vkQueueSubmit(struct vn_instance *vn_instance, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
1036
{
1037
struct vn_instance_submit_command submit;
1038
vn_submit_vkQueueSubmit(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, queue, submitCount, pSubmits, fence, &submit);
1039
struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
1040
if (dec) {
1041
const VkResult ret = vn_decode_vkQueueSubmit_reply(dec, queue, submitCount, pSubmits, fence);
1042
vn_instance_free_command_reply(vn_instance, &submit);
1043
return ret;
1044
} else {
1045
return VK_ERROR_OUT_OF_HOST_MEMORY;
1046
}
1047
}
1048
1049
static inline void vn_async_vkQueueSubmit(struct vn_instance *vn_instance, VkQueue queue, uint32_t submitCount, const VkSubmitInfo* pSubmits, VkFence fence)
1050
{
1051
struct vn_instance_submit_command submit;
1052
vn_submit_vkQueueSubmit(vn_instance, 0, queue, submitCount, pSubmits, fence, &submit);
1053
}
1054
1055
static inline VkResult vn_call_vkQueueWaitIdle(struct vn_instance *vn_instance, VkQueue queue)
1056
{
1057
struct vn_instance_submit_command submit;
1058
vn_submit_vkQueueWaitIdle(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, queue, &submit);
1059
struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
1060
if (dec) {
1061
const VkResult ret = vn_decode_vkQueueWaitIdle_reply(dec, queue);
1062
vn_instance_free_command_reply(vn_instance, &submit);
1063
return ret;
1064
} else {
1065
return VK_ERROR_OUT_OF_HOST_MEMORY;
1066
}
1067
}
1068
1069
static inline void vn_async_vkQueueWaitIdle(struct vn_instance *vn_instance, VkQueue queue)
1070
{
1071
struct vn_instance_submit_command submit;
1072
vn_submit_vkQueueWaitIdle(vn_instance, 0, queue, &submit);
1073
}
1074
1075
static inline VkResult vn_call_vkQueueBindSparse(struct vn_instance *vn_instance, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
1076
{
1077
struct vn_instance_submit_command submit;
1078
vn_submit_vkQueueBindSparse(vn_instance, VK_COMMAND_GENERATE_REPLY_BIT_EXT, queue, bindInfoCount, pBindInfo, fence, &submit);
1079
struct vn_cs_decoder *dec = vn_instance_get_command_reply(vn_instance, &submit);
1080
if (dec) {
1081
const VkResult ret = vn_decode_vkQueueBindSparse_reply(dec, queue, bindInfoCount, pBindInfo, fence);
1082
vn_instance_free_command_reply(vn_instance, &submit);
1083
return ret;
1084
} else {
1085
return VK_ERROR_OUT_OF_HOST_MEMORY;
1086
}
1087
}
1088
1089
static inline void vn_async_vkQueueBindSparse(struct vn_instance *vn_instance, VkQueue queue, uint32_t bindInfoCount, const VkBindSparseInfo* pBindInfo, VkFence fence)
1090
{
1091
struct vn_instance_submit_command submit;
1092
vn_submit_vkQueueBindSparse(vn_instance, 0, queue, bindInfoCount, pBindInfo, fence, &submit);
1093
}
1094
1095
#endif /* VN_PROTOCOL_DRIVER_QUEUE_H */
1096
1097