• Home
  • Line#
  • Scopes#
  • Navigate#
  • Raw
  • Download
1 /*
2  * Copyright 2020 Google LLC
3  * SPDX-License-Identifier: MIT
4  */
5 
6 #include "vkr_command_buffer.h"
7 
8 #include "vkr_command_buffer_gen.h"
9 
10 static void
vkr_dispatch_vkCreateCommandPool(struct vn_dispatch_context * dispatch,struct vn_command_vkCreateCommandPool * args)11 vkr_dispatch_vkCreateCommandPool(struct vn_dispatch_context *dispatch,
12                                  struct vn_command_vkCreateCommandPool *args)
13 {
14    struct vkr_command_pool *pool = vkr_command_pool_create_and_add(dispatch->data, args);
15    if (!pool)
16       return;
17 
18    list_inithead(&pool->command_buffers);
19 }
20 
21 static void
vkr_dispatch_vkDestroyCommandPool(struct vn_dispatch_context * dispatch,struct vn_command_vkDestroyCommandPool * args)22 vkr_dispatch_vkDestroyCommandPool(struct vn_dispatch_context *dispatch,
23                                   struct vn_command_vkDestroyCommandPool *args)
24 {
25    struct vkr_context *ctx = dispatch->data;
26    struct vkr_command_pool *pool = vkr_command_pool_from_handle(args->commandPool);
27 
28    if (!pool)
29       return;
30 
31    vkr_context_remove_objects(ctx, &pool->command_buffers);
32 
33    vkr_command_pool_destroy_and_remove(ctx, args);
34 }
35 
36 static void
vkr_dispatch_vkResetCommandPool(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkResetCommandPool * args)37 vkr_dispatch_vkResetCommandPool(UNUSED struct vn_dispatch_context *dispatch,
38                                 struct vn_command_vkResetCommandPool *args)
39 {
40    vn_replace_vkResetCommandPool_args_handle(args);
41    args->ret = vkResetCommandPool(args->device, args->commandPool, args->flags);
42 }
43 
44 static void
vkr_dispatch_vkTrimCommandPool(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkTrimCommandPool * args)45 vkr_dispatch_vkTrimCommandPool(UNUSED struct vn_dispatch_context *dispatch,
46                                struct vn_command_vkTrimCommandPool *args)
47 {
48    vn_replace_vkTrimCommandPool_args_handle(args);
49    vkTrimCommandPool(args->device, args->commandPool, args->flags);
50 }
51 
52 static void
vkr_dispatch_vkAllocateCommandBuffers(struct vn_dispatch_context * dispatch,struct vn_command_vkAllocateCommandBuffers * args)53 vkr_dispatch_vkAllocateCommandBuffers(struct vn_dispatch_context *dispatch,
54                                       struct vn_command_vkAllocateCommandBuffers *args)
55 {
56    struct vkr_context *ctx = dispatch->data;
57    struct vkr_device *dev = vkr_device_from_handle(args->device);
58    struct vkr_command_pool *pool =
59       vkr_command_pool_from_handle(args->pAllocateInfo->commandPool);
60    struct object_array arr;
61 
62    if (!pool) {
63       vkr_cs_decoder_set_fatal(&ctx->decoder);
64       return;
65    }
66 
67    if (vkr_command_buffer_create_array(ctx, args, &arr) != VK_SUCCESS)
68       return;
69 
70    vkr_command_buffer_add_array(ctx, dev, pool, &arr);
71 }
72 
73 static void
vkr_dispatch_vkFreeCommandBuffers(struct vn_dispatch_context * dispatch,struct vn_command_vkFreeCommandBuffers * args)74 vkr_dispatch_vkFreeCommandBuffers(struct vn_dispatch_context *dispatch,
75                                   struct vn_command_vkFreeCommandBuffers *args)
76 {
77    struct vkr_context *ctx = dispatch->data;
78    struct list_head free_list;
79 
80    /* args->pCommandBuffers is marked noautovalidity="true" */
81    if (args->commandBufferCount && !args->pCommandBuffers) {
82       vkr_cs_decoder_set_fatal(&ctx->decoder);
83       return;
84    }
85 
86    vkr_command_buffer_destroy_driver_handles(ctx, args, &free_list);
87    vkr_context_remove_objects(ctx, &free_list);
88 }
89 
90 static void
vkr_dispatch_vkResetCommandBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkResetCommandBuffer * args)91 vkr_dispatch_vkResetCommandBuffer(UNUSED struct vn_dispatch_context *dispatch,
92                                   struct vn_command_vkResetCommandBuffer *args)
93 {
94    vn_replace_vkResetCommandBuffer_args_handle(args);
95    args->ret = vkResetCommandBuffer(args->commandBuffer, args->flags);
96 }
97 
98 static void
vkr_dispatch_vkBeginCommandBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkBeginCommandBuffer * args)99 vkr_dispatch_vkBeginCommandBuffer(UNUSED struct vn_dispatch_context *dispatch,
100                                   struct vn_command_vkBeginCommandBuffer *args)
101 {
102    vn_replace_vkBeginCommandBuffer_args_handle(args);
103    args->ret = vkBeginCommandBuffer(args->commandBuffer, args->pBeginInfo);
104 }
105 
106 static void
vkr_dispatch_vkEndCommandBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkEndCommandBuffer * args)107 vkr_dispatch_vkEndCommandBuffer(UNUSED struct vn_dispatch_context *dispatch,
108                                 struct vn_command_vkEndCommandBuffer *args)
109 {
110    vn_replace_vkEndCommandBuffer_args_handle(args);
111    args->ret = vkEndCommandBuffer(args->commandBuffer);
112 }
113 
114 static void
vkr_dispatch_vkCmdBindPipeline(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBindPipeline * args)115 vkr_dispatch_vkCmdBindPipeline(UNUSED struct vn_dispatch_context *dispatch,
116                                struct vn_command_vkCmdBindPipeline *args)
117 {
118    vn_replace_vkCmdBindPipeline_args_handle(args);
119    vkCmdBindPipeline(args->commandBuffer, args->pipelineBindPoint, args->pipeline);
120 }
121 
122 static void
vkr_dispatch_vkCmdSetViewport(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetViewport * args)123 vkr_dispatch_vkCmdSetViewport(UNUSED struct vn_dispatch_context *dispatch,
124                               struct vn_command_vkCmdSetViewport *args)
125 {
126    vn_replace_vkCmdSetViewport_args_handle(args);
127    vkCmdSetViewport(args->commandBuffer, args->firstViewport, args->viewportCount,
128                     args->pViewports);
129 }
130 
131 static void
vkr_dispatch_vkCmdSetScissor(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetScissor * args)132 vkr_dispatch_vkCmdSetScissor(UNUSED struct vn_dispatch_context *dispatch,
133                              struct vn_command_vkCmdSetScissor *args)
134 {
135    vn_replace_vkCmdSetScissor_args_handle(args);
136    vkCmdSetScissor(args->commandBuffer, args->firstScissor, args->scissorCount,
137                    args->pScissors);
138 }
139 
140 static void
vkr_dispatch_vkCmdSetLineWidth(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetLineWidth * args)141 vkr_dispatch_vkCmdSetLineWidth(UNUSED struct vn_dispatch_context *dispatch,
142                                struct vn_command_vkCmdSetLineWidth *args)
143 {
144    vn_replace_vkCmdSetLineWidth_args_handle(args);
145    vkCmdSetLineWidth(args->commandBuffer, args->lineWidth);
146 }
147 
148 static void
vkr_dispatch_vkCmdSetDepthBias(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetDepthBias * args)149 vkr_dispatch_vkCmdSetDepthBias(UNUSED struct vn_dispatch_context *dispatch,
150                                struct vn_command_vkCmdSetDepthBias *args)
151 {
152    vn_replace_vkCmdSetDepthBias_args_handle(args);
153    vkCmdSetDepthBias(args->commandBuffer, args->depthBiasConstantFactor,
154                      args->depthBiasClamp, args->depthBiasSlopeFactor);
155 }
156 
157 static void
vkr_dispatch_vkCmdSetBlendConstants(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetBlendConstants * args)158 vkr_dispatch_vkCmdSetBlendConstants(UNUSED struct vn_dispatch_context *dispatch,
159                                     struct vn_command_vkCmdSetBlendConstants *args)
160 {
161    vn_replace_vkCmdSetBlendConstants_args_handle(args);
162    vkCmdSetBlendConstants(args->commandBuffer, args->blendConstants);
163 }
164 
165 static void
vkr_dispatch_vkCmdSetDepthBounds(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetDepthBounds * args)166 vkr_dispatch_vkCmdSetDepthBounds(UNUSED struct vn_dispatch_context *dispatch,
167                                  struct vn_command_vkCmdSetDepthBounds *args)
168 {
169    vn_replace_vkCmdSetDepthBounds_args_handle(args);
170    vkCmdSetDepthBounds(args->commandBuffer, args->minDepthBounds, args->maxDepthBounds);
171 }
172 
173 static void
vkr_dispatch_vkCmdSetStencilCompareMask(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetStencilCompareMask * args)174 vkr_dispatch_vkCmdSetStencilCompareMask(UNUSED struct vn_dispatch_context *dispatch,
175                                         struct vn_command_vkCmdSetStencilCompareMask *args)
176 {
177    vn_replace_vkCmdSetStencilCompareMask_args_handle(args);
178    vkCmdSetStencilCompareMask(args->commandBuffer, args->faceMask, args->compareMask);
179 }
180 
181 static void
vkr_dispatch_vkCmdSetStencilWriteMask(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetStencilWriteMask * args)182 vkr_dispatch_vkCmdSetStencilWriteMask(UNUSED struct vn_dispatch_context *dispatch,
183                                       struct vn_command_vkCmdSetStencilWriteMask *args)
184 {
185    vn_replace_vkCmdSetStencilWriteMask_args_handle(args);
186    vkCmdSetStencilWriteMask(args->commandBuffer, args->faceMask, args->writeMask);
187 }
188 
189 static void
vkr_dispatch_vkCmdSetStencilReference(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetStencilReference * args)190 vkr_dispatch_vkCmdSetStencilReference(UNUSED struct vn_dispatch_context *dispatch,
191                                       struct vn_command_vkCmdSetStencilReference *args)
192 {
193    vn_replace_vkCmdSetStencilReference_args_handle(args);
194    vkCmdSetStencilReference(args->commandBuffer, args->faceMask, args->reference);
195 }
196 
197 static void
vkr_dispatch_vkCmdBindDescriptorSets(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBindDescriptorSets * args)198 vkr_dispatch_vkCmdBindDescriptorSets(UNUSED struct vn_dispatch_context *dispatch,
199                                      struct vn_command_vkCmdBindDescriptorSets *args)
200 {
201    vn_replace_vkCmdBindDescriptorSets_args_handle(args);
202    vkCmdBindDescriptorSets(args->commandBuffer, args->pipelineBindPoint, args->layout,
203                            args->firstSet, args->descriptorSetCount,
204                            args->pDescriptorSets, args->dynamicOffsetCount,
205                            args->pDynamicOffsets);
206 }
207 
208 static void
vkr_dispatch_vkCmdBindIndexBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBindIndexBuffer * args)209 vkr_dispatch_vkCmdBindIndexBuffer(UNUSED struct vn_dispatch_context *dispatch,
210                                   struct vn_command_vkCmdBindIndexBuffer *args)
211 {
212    vn_replace_vkCmdBindIndexBuffer_args_handle(args);
213    vkCmdBindIndexBuffer(args->commandBuffer, args->buffer, args->offset, args->indexType);
214 }
215 
216 static void
vkr_dispatch_vkCmdBindVertexBuffers(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBindVertexBuffers * args)217 vkr_dispatch_vkCmdBindVertexBuffers(UNUSED struct vn_dispatch_context *dispatch,
218                                     struct vn_command_vkCmdBindVertexBuffers *args)
219 {
220    vn_replace_vkCmdBindVertexBuffers_args_handle(args);
221    vkCmdBindVertexBuffers(args->commandBuffer, args->firstBinding, args->bindingCount,
222                           args->pBuffers, args->pOffsets);
223 }
224 
225 static void
vkr_dispatch_vkCmdDraw(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDraw * args)226 vkr_dispatch_vkCmdDraw(UNUSED struct vn_dispatch_context *dispatch,
227                        struct vn_command_vkCmdDraw *args)
228 {
229    vn_replace_vkCmdDraw_args_handle(args);
230    vkCmdDraw(args->commandBuffer, args->vertexCount, args->instanceCount,
231              args->firstVertex, args->firstInstance);
232 }
233 
234 static void
vkr_dispatch_vkCmdDrawIndexed(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDrawIndexed * args)235 vkr_dispatch_vkCmdDrawIndexed(UNUSED struct vn_dispatch_context *dispatch,
236                               struct vn_command_vkCmdDrawIndexed *args)
237 {
238    vn_replace_vkCmdDrawIndexed_args_handle(args);
239    vkCmdDrawIndexed(args->commandBuffer, args->indexCount, args->instanceCount,
240                     args->firstIndex, args->vertexOffset, args->firstInstance);
241 }
242 
243 static void
vkr_dispatch_vkCmdDrawIndirect(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDrawIndirect * args)244 vkr_dispatch_vkCmdDrawIndirect(UNUSED struct vn_dispatch_context *dispatch,
245                                struct vn_command_vkCmdDrawIndirect *args)
246 {
247    vn_replace_vkCmdDrawIndirect_args_handle(args);
248    vkCmdDrawIndirect(args->commandBuffer, args->buffer, args->offset, args->drawCount,
249                      args->stride);
250 }
251 
252 static void
vkr_dispatch_vkCmdDrawIndexedIndirect(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDrawIndexedIndirect * args)253 vkr_dispatch_vkCmdDrawIndexedIndirect(UNUSED struct vn_dispatch_context *dispatch,
254                                       struct vn_command_vkCmdDrawIndexedIndirect *args)
255 {
256    vn_replace_vkCmdDrawIndexedIndirect_args_handle(args);
257    vkCmdDrawIndexedIndirect(args->commandBuffer, args->buffer, args->offset,
258                             args->drawCount, args->stride);
259 }
260 
261 static void
vkr_dispatch_vkCmdDispatch(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDispatch * args)262 vkr_dispatch_vkCmdDispatch(UNUSED struct vn_dispatch_context *dispatch,
263                            struct vn_command_vkCmdDispatch *args)
264 {
265    vn_replace_vkCmdDispatch_args_handle(args);
266    vkCmdDispatch(args->commandBuffer, args->groupCountX, args->groupCountY,
267                  args->groupCountZ);
268 }
269 
270 static void
vkr_dispatch_vkCmdDispatchIndirect(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDispatchIndirect * args)271 vkr_dispatch_vkCmdDispatchIndirect(UNUSED struct vn_dispatch_context *dispatch,
272                                    struct vn_command_vkCmdDispatchIndirect *args)
273 {
274    vn_replace_vkCmdDispatchIndirect_args_handle(args);
275    vkCmdDispatchIndirect(args->commandBuffer, args->buffer, args->offset);
276 }
277 
278 static void
vkr_dispatch_vkCmdCopyBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdCopyBuffer * args)279 vkr_dispatch_vkCmdCopyBuffer(UNUSED struct vn_dispatch_context *dispatch,
280                              struct vn_command_vkCmdCopyBuffer *args)
281 {
282    vn_replace_vkCmdCopyBuffer_args_handle(args);
283    vkCmdCopyBuffer(args->commandBuffer, args->srcBuffer, args->dstBuffer,
284                    args->regionCount, args->pRegions);
285 }
286 
287 static void
vkr_dispatch_vkCmdCopyImage(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdCopyImage * args)288 vkr_dispatch_vkCmdCopyImage(UNUSED struct vn_dispatch_context *dispatch,
289                             struct vn_command_vkCmdCopyImage *args)
290 {
291    vn_replace_vkCmdCopyImage_args_handle(args);
292    vkCmdCopyImage(args->commandBuffer, args->srcImage, args->srcImageLayout,
293                   args->dstImage, args->dstImageLayout, args->regionCount,
294                   args->pRegions);
295 }
296 
297 static void
vkr_dispatch_vkCmdBlitImage(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBlitImage * args)298 vkr_dispatch_vkCmdBlitImage(UNUSED struct vn_dispatch_context *dispatch,
299                             struct vn_command_vkCmdBlitImage *args)
300 {
301    vn_replace_vkCmdBlitImage_args_handle(args);
302    vkCmdBlitImage(args->commandBuffer, args->srcImage, args->srcImageLayout,
303                   args->dstImage, args->dstImageLayout, args->regionCount, args->pRegions,
304                   args->filter);
305 }
306 
307 static void
vkr_dispatch_vkCmdCopyBufferToImage(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdCopyBufferToImage * args)308 vkr_dispatch_vkCmdCopyBufferToImage(UNUSED struct vn_dispatch_context *dispatch,
309                                     struct vn_command_vkCmdCopyBufferToImage *args)
310 {
311    vn_replace_vkCmdCopyBufferToImage_args_handle(args);
312    vkCmdCopyBufferToImage(args->commandBuffer, args->srcBuffer, args->dstImage,
313                           args->dstImageLayout, args->regionCount, args->pRegions);
314 }
315 
316 static void
vkr_dispatch_vkCmdCopyImageToBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdCopyImageToBuffer * args)317 vkr_dispatch_vkCmdCopyImageToBuffer(UNUSED struct vn_dispatch_context *dispatch,
318                                     struct vn_command_vkCmdCopyImageToBuffer *args)
319 {
320    vn_replace_vkCmdCopyImageToBuffer_args_handle(args);
321    vkCmdCopyImageToBuffer(args->commandBuffer, args->srcImage, args->srcImageLayout,
322                           args->dstBuffer, args->regionCount, args->pRegions);
323 }
324 
325 static void
vkr_dispatch_vkCmdUpdateBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdUpdateBuffer * args)326 vkr_dispatch_vkCmdUpdateBuffer(UNUSED struct vn_dispatch_context *dispatch,
327                                struct vn_command_vkCmdUpdateBuffer *args)
328 {
329    vn_replace_vkCmdUpdateBuffer_args_handle(args);
330    vkCmdUpdateBuffer(args->commandBuffer, args->dstBuffer, args->dstOffset,
331                      args->dataSize, args->pData);
332 }
333 
334 static void
vkr_dispatch_vkCmdFillBuffer(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdFillBuffer * args)335 vkr_dispatch_vkCmdFillBuffer(UNUSED struct vn_dispatch_context *dispatch,
336                              struct vn_command_vkCmdFillBuffer *args)
337 {
338    vn_replace_vkCmdFillBuffer_args_handle(args);
339    vkCmdFillBuffer(args->commandBuffer, args->dstBuffer, args->dstOffset, args->size,
340                    args->data);
341 }
342 
343 static void
vkr_dispatch_vkCmdClearColorImage(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdClearColorImage * args)344 vkr_dispatch_vkCmdClearColorImage(UNUSED struct vn_dispatch_context *dispatch,
345                                   struct vn_command_vkCmdClearColorImage *args)
346 {
347    vn_replace_vkCmdClearColorImage_args_handle(args);
348    vkCmdClearColorImage(args->commandBuffer, args->image, args->imageLayout, args->pColor,
349                         args->rangeCount, args->pRanges);
350 }
351 
352 static void
vkr_dispatch_vkCmdClearDepthStencilImage(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdClearDepthStencilImage * args)353 vkr_dispatch_vkCmdClearDepthStencilImage(
354    UNUSED struct vn_dispatch_context *dispatch,
355    struct vn_command_vkCmdClearDepthStencilImage *args)
356 {
357    vn_replace_vkCmdClearDepthStencilImage_args_handle(args);
358    vkCmdClearDepthStencilImage(args->commandBuffer, args->image, args->imageLayout,
359                                args->pDepthStencil, args->rangeCount, args->pRanges);
360 }
361 
362 static void
vkr_dispatch_vkCmdClearAttachments(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdClearAttachments * args)363 vkr_dispatch_vkCmdClearAttachments(UNUSED struct vn_dispatch_context *dispatch,
364                                    struct vn_command_vkCmdClearAttachments *args)
365 {
366    vn_replace_vkCmdClearAttachments_args_handle(args);
367    vkCmdClearAttachments(args->commandBuffer, args->attachmentCount, args->pAttachments,
368                          args->rectCount, args->pRects);
369 }
370 
371 static void
vkr_dispatch_vkCmdResolveImage(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdResolveImage * args)372 vkr_dispatch_vkCmdResolveImage(UNUSED struct vn_dispatch_context *dispatch,
373                                struct vn_command_vkCmdResolveImage *args)
374 {
375    vn_replace_vkCmdResolveImage_args_handle(args);
376    vkCmdResolveImage(args->commandBuffer, args->srcImage, args->srcImageLayout,
377                      args->dstImage, args->dstImageLayout, args->regionCount,
378                      args->pRegions);
379 }
380 
381 static void
vkr_dispatch_vkCmdSetEvent(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetEvent * args)382 vkr_dispatch_vkCmdSetEvent(UNUSED struct vn_dispatch_context *dispatch,
383                            struct vn_command_vkCmdSetEvent *args)
384 {
385    vn_replace_vkCmdSetEvent_args_handle(args);
386    vkCmdSetEvent(args->commandBuffer, args->event, args->stageMask);
387 }
388 
389 static void
vkr_dispatch_vkCmdResetEvent(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdResetEvent * args)390 vkr_dispatch_vkCmdResetEvent(UNUSED struct vn_dispatch_context *dispatch,
391                              struct vn_command_vkCmdResetEvent *args)
392 {
393    vn_replace_vkCmdResetEvent_args_handle(args);
394    vkCmdResetEvent(args->commandBuffer, args->event, args->stageMask);
395 }
396 
397 static void
vkr_dispatch_vkCmdWaitEvents(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdWaitEvents * args)398 vkr_dispatch_vkCmdWaitEvents(UNUSED struct vn_dispatch_context *dispatch,
399                              struct vn_command_vkCmdWaitEvents *args)
400 {
401    vn_replace_vkCmdWaitEvents_args_handle(args);
402    vkCmdWaitEvents(args->commandBuffer, args->eventCount, args->pEvents,
403                    args->srcStageMask, args->dstStageMask, args->memoryBarrierCount,
404                    args->pMemoryBarriers, args->bufferMemoryBarrierCount,
405                    args->pBufferMemoryBarriers, args->imageMemoryBarrierCount,
406                    args->pImageMemoryBarriers);
407 }
408 
409 static void
vkr_dispatch_vkCmdPipelineBarrier(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdPipelineBarrier * args)410 vkr_dispatch_vkCmdPipelineBarrier(UNUSED struct vn_dispatch_context *dispatch,
411                                   struct vn_command_vkCmdPipelineBarrier *args)
412 {
413    vn_replace_vkCmdPipelineBarrier_args_handle(args);
414    vkCmdPipelineBarrier(args->commandBuffer, args->srcStageMask, args->dstStageMask,
415                         args->dependencyFlags, args->memoryBarrierCount,
416                         args->pMemoryBarriers, args->bufferMemoryBarrierCount,
417                         args->pBufferMemoryBarriers, args->imageMemoryBarrierCount,
418                         args->pImageMemoryBarriers);
419 }
420 
421 static void
vkr_dispatch_vkCmdBeginQuery(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBeginQuery * args)422 vkr_dispatch_vkCmdBeginQuery(UNUSED struct vn_dispatch_context *dispatch,
423                              struct vn_command_vkCmdBeginQuery *args)
424 {
425    vn_replace_vkCmdBeginQuery_args_handle(args);
426    vkCmdBeginQuery(args->commandBuffer, args->queryPool, args->query, args->flags);
427 }
428 
429 static void
vkr_dispatch_vkCmdEndQuery(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdEndQuery * args)430 vkr_dispatch_vkCmdEndQuery(UNUSED struct vn_dispatch_context *dispatch,
431                            struct vn_command_vkCmdEndQuery *args)
432 {
433    vn_replace_vkCmdEndQuery_args_handle(args);
434    vkCmdEndQuery(args->commandBuffer, args->queryPool, args->query);
435 }
436 
437 static void
vkr_dispatch_vkCmdResetQueryPool(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdResetQueryPool * args)438 vkr_dispatch_vkCmdResetQueryPool(UNUSED struct vn_dispatch_context *dispatch,
439                                  struct vn_command_vkCmdResetQueryPool *args)
440 {
441    vn_replace_vkCmdResetQueryPool_args_handle(args);
442    vkCmdResetQueryPool(args->commandBuffer, args->queryPool, args->firstQuery,
443                        args->queryCount);
444 }
445 
446 static void
vkr_dispatch_vkCmdWriteTimestamp(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdWriteTimestamp * args)447 vkr_dispatch_vkCmdWriteTimestamp(UNUSED struct vn_dispatch_context *dispatch,
448                                  struct vn_command_vkCmdWriteTimestamp *args)
449 {
450    vn_replace_vkCmdWriteTimestamp_args_handle(args);
451    vkCmdWriteTimestamp(args->commandBuffer, args->pipelineStage, args->queryPool,
452                        args->query);
453 }
454 
455 static void
vkr_dispatch_vkCmdCopyQueryPoolResults(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdCopyQueryPoolResults * args)456 vkr_dispatch_vkCmdCopyQueryPoolResults(UNUSED struct vn_dispatch_context *dispatch,
457                                        struct vn_command_vkCmdCopyQueryPoolResults *args)
458 {
459    vn_replace_vkCmdCopyQueryPoolResults_args_handle(args);
460    vkCmdCopyQueryPoolResults(args->commandBuffer, args->queryPool, args->firstQuery,
461                              args->queryCount, args->dstBuffer, args->dstOffset,
462                              args->stride, args->flags);
463 }
464 
465 static void
vkr_dispatch_vkCmdPushConstants(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdPushConstants * args)466 vkr_dispatch_vkCmdPushConstants(UNUSED struct vn_dispatch_context *dispatch,
467                                 struct vn_command_vkCmdPushConstants *args)
468 {
469    vn_replace_vkCmdPushConstants_args_handle(args);
470    vkCmdPushConstants(args->commandBuffer, args->layout, args->stageFlags, args->offset,
471                       args->size, args->pValues);
472 }
473 
474 static void
vkr_dispatch_vkCmdBeginRenderPass(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBeginRenderPass * args)475 vkr_dispatch_vkCmdBeginRenderPass(UNUSED struct vn_dispatch_context *dispatch,
476                                   struct vn_command_vkCmdBeginRenderPass *args)
477 {
478    vn_replace_vkCmdBeginRenderPass_args_handle(args);
479    vkCmdBeginRenderPass(args->commandBuffer, args->pRenderPassBegin, args->contents);
480 }
481 
482 static void
vkr_dispatch_vkCmdNextSubpass(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdNextSubpass * args)483 vkr_dispatch_vkCmdNextSubpass(UNUSED struct vn_dispatch_context *dispatch,
484                               struct vn_command_vkCmdNextSubpass *args)
485 {
486    vn_replace_vkCmdNextSubpass_args_handle(args);
487    vkCmdNextSubpass(args->commandBuffer, args->contents);
488 }
489 
490 static void
vkr_dispatch_vkCmdEndRenderPass(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdEndRenderPass * args)491 vkr_dispatch_vkCmdEndRenderPass(UNUSED struct vn_dispatch_context *dispatch,
492                                 struct vn_command_vkCmdEndRenderPass *args)
493 {
494    vn_replace_vkCmdEndRenderPass_args_handle(args);
495    vkCmdEndRenderPass(args->commandBuffer);
496 }
497 
498 static void
vkr_dispatch_vkCmdExecuteCommands(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdExecuteCommands * args)499 vkr_dispatch_vkCmdExecuteCommands(UNUSED struct vn_dispatch_context *dispatch,
500                                   struct vn_command_vkCmdExecuteCommands *args)
501 {
502    vn_replace_vkCmdExecuteCommands_args_handle(args);
503    vkCmdExecuteCommands(args->commandBuffer, args->commandBufferCount,
504                         args->pCommandBuffers);
505 }
506 
507 static void
vkr_dispatch_vkCmdSetDeviceMask(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdSetDeviceMask * args)508 vkr_dispatch_vkCmdSetDeviceMask(UNUSED struct vn_dispatch_context *dispatch,
509                                 struct vn_command_vkCmdSetDeviceMask *args)
510 {
511    vn_replace_vkCmdSetDeviceMask_args_handle(args);
512    vkCmdSetDeviceMask(args->commandBuffer, args->deviceMask);
513 }
514 
515 static void
vkr_dispatch_vkCmdDispatchBase(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDispatchBase * args)516 vkr_dispatch_vkCmdDispatchBase(UNUSED struct vn_dispatch_context *dispatch,
517                                struct vn_command_vkCmdDispatchBase *args)
518 {
519    vn_replace_vkCmdDispatchBase_args_handle(args);
520    vkCmdDispatchBase(args->commandBuffer, args->baseGroupX, args->baseGroupY,
521                      args->baseGroupZ, args->groupCountX, args->groupCountY,
522                      args->groupCountZ);
523 }
524 
525 static void
vkr_dispatch_vkCmdBeginRenderPass2(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBeginRenderPass2 * args)526 vkr_dispatch_vkCmdBeginRenderPass2(UNUSED struct vn_dispatch_context *dispatch,
527                                    struct vn_command_vkCmdBeginRenderPass2 *args)
528 {
529    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
530 
531    vn_replace_vkCmdBeginRenderPass2_args_handle(args);
532    cmd->device->CmdBeginRenderPass2(args->commandBuffer, args->pRenderPassBegin,
533                                     args->pSubpassBeginInfo);
534 }
535 
536 static void
vkr_dispatch_vkCmdNextSubpass2(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdNextSubpass2 * args)537 vkr_dispatch_vkCmdNextSubpass2(UNUSED struct vn_dispatch_context *dispatch,
538                                struct vn_command_vkCmdNextSubpass2 *args)
539 {
540    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
541 
542    vn_replace_vkCmdNextSubpass2_args_handle(args);
543    cmd->device->CmdNextSubpass2(args->commandBuffer, args->pSubpassBeginInfo,
544                                 args->pSubpassEndInfo);
545 }
546 
547 static void
vkr_dispatch_vkCmdEndRenderPass2(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdEndRenderPass2 * args)548 vkr_dispatch_vkCmdEndRenderPass2(UNUSED struct vn_dispatch_context *dispatch,
549                                  struct vn_command_vkCmdEndRenderPass2 *args)
550 {
551    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
552 
553    vn_replace_vkCmdEndRenderPass2_args_handle(args);
554    cmd->device->CmdEndRenderPass2(args->commandBuffer, args->pSubpassEndInfo);
555 }
556 
557 static void
vkr_dispatch_vkCmdDrawIndirectCount(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDrawIndirectCount * args)558 vkr_dispatch_vkCmdDrawIndirectCount(UNUSED struct vn_dispatch_context *dispatch,
559                                     struct vn_command_vkCmdDrawIndirectCount *args)
560 {
561    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
562 
563    vn_replace_vkCmdDrawIndirectCount_args_handle(args);
564    cmd->device->CmdDrawIndirectCount(args->commandBuffer, args->buffer, args->offset,
565                                      args->countBuffer, args->countBufferOffset,
566                                      args->maxDrawCount, args->stride);
567 }
568 
569 static void
vkr_dispatch_vkCmdDrawIndexedIndirectCount(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDrawIndexedIndirectCount * args)570 vkr_dispatch_vkCmdDrawIndexedIndirectCount(
571    UNUSED struct vn_dispatch_context *dispatch,
572    struct vn_command_vkCmdDrawIndexedIndirectCount *args)
573 {
574    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
575 
576    vn_replace_vkCmdDrawIndexedIndirectCount_args_handle(args);
577    cmd->device->CmdDrawIndexedIndirectCount(
578       args->commandBuffer, args->buffer, args->offset, args->countBuffer,
579       args->countBufferOffset, args->maxDrawCount, args->stride);
580 }
581 
582 static void
vkr_dispatch_vkCmdBindTransformFeedbackBuffersEXT(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBindTransformFeedbackBuffersEXT * args)583 vkr_dispatch_vkCmdBindTransformFeedbackBuffersEXT(
584    UNUSED struct vn_dispatch_context *dispatch,
585    struct vn_command_vkCmdBindTransformFeedbackBuffersEXT *args)
586 {
587    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
588 
589    vn_replace_vkCmdBindTransformFeedbackBuffersEXT_args_handle(args);
590    cmd->device->cmd_bind_transform_feedback_buffers(
591       args->commandBuffer, args->firstBinding, args->bindingCount, args->pBuffers,
592       args->pOffsets, args->pSizes);
593 }
594 
595 static void
vkr_dispatch_vkCmdBeginTransformFeedbackEXT(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBeginTransformFeedbackEXT * args)596 vkr_dispatch_vkCmdBeginTransformFeedbackEXT(
597    UNUSED struct vn_dispatch_context *dispatch,
598    struct vn_command_vkCmdBeginTransformFeedbackEXT *args)
599 {
600    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
601 
602    vn_replace_vkCmdBeginTransformFeedbackEXT_args_handle(args);
603    cmd->device->cmd_begin_transform_feedback(
604       args->commandBuffer, args->firstCounterBuffer, args->counterBufferCount,
605       args->pCounterBuffers, args->pCounterBufferOffsets);
606 }
607 
608 static void
vkr_dispatch_vkCmdEndTransformFeedbackEXT(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdEndTransformFeedbackEXT * args)609 vkr_dispatch_vkCmdEndTransformFeedbackEXT(
610    UNUSED struct vn_dispatch_context *dispatch,
611    struct vn_command_vkCmdEndTransformFeedbackEXT *args)
612 {
613    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
614 
615    vn_replace_vkCmdEndTransformFeedbackEXT_args_handle(args);
616    cmd->device->cmd_end_transform_feedback(
617       args->commandBuffer, args->firstCounterBuffer, args->counterBufferCount,
618       args->pCounterBuffers, args->pCounterBufferOffsets);
619 }
620 
621 static void
vkr_dispatch_vkCmdBeginQueryIndexedEXT(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdBeginQueryIndexedEXT * args)622 vkr_dispatch_vkCmdBeginQueryIndexedEXT(UNUSED struct vn_dispatch_context *dispatch,
623                                        struct vn_command_vkCmdBeginQueryIndexedEXT *args)
624 {
625    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
626 
627    vn_replace_vkCmdBeginQueryIndexedEXT_args_handle(args);
628    cmd->device->cmd_begin_query_indexed(args->commandBuffer, args->queryPool, args->query,
629                                         args->flags, args->index);
630 }
631 
632 static void
vkr_dispatch_vkCmdEndQueryIndexedEXT(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdEndQueryIndexedEXT * args)633 vkr_dispatch_vkCmdEndQueryIndexedEXT(UNUSED struct vn_dispatch_context *dispatch,
634                                      struct vn_command_vkCmdEndQueryIndexedEXT *args)
635 {
636    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
637 
638    vn_replace_vkCmdEndQueryIndexedEXT_args_handle(args);
639    cmd->device->cmd_end_query_indexed(args->commandBuffer, args->queryPool, args->query,
640                                       args->index);
641 }
642 
643 static void
vkr_dispatch_vkCmdDrawIndirectByteCountEXT(UNUSED struct vn_dispatch_context * dispatch,struct vn_command_vkCmdDrawIndirectByteCountEXT * args)644 vkr_dispatch_vkCmdDrawIndirectByteCountEXT(
645    UNUSED struct vn_dispatch_context *dispatch,
646    struct vn_command_vkCmdDrawIndirectByteCountEXT *args)
647 {
648    struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer);
649 
650    vn_replace_vkCmdDrawIndirectByteCountEXT_args_handle(args);
651    cmd->device->cmd_draw_indirect_byte_count(
652       args->commandBuffer, args->instanceCount, args->firstInstance, args->counterBuffer,
653       args->counterBufferOffset, args->counterOffset, args->vertexStride);
654 }
655 
656 void
vkr_context_init_command_pool_dispatch(struct vkr_context * ctx)657 vkr_context_init_command_pool_dispatch(struct vkr_context *ctx)
658 {
659    struct vn_dispatch_context *dispatch = &ctx->dispatch;
660 
661    dispatch->dispatch_vkCreateCommandPool = vkr_dispatch_vkCreateCommandPool;
662    dispatch->dispatch_vkDestroyCommandPool = vkr_dispatch_vkDestroyCommandPool;
663    dispatch->dispatch_vkResetCommandPool = vkr_dispatch_vkResetCommandPool;
664    dispatch->dispatch_vkTrimCommandPool = vkr_dispatch_vkTrimCommandPool;
665 }
666 
667 void
vkr_context_init_command_buffer_dispatch(struct vkr_context * ctx)668 vkr_context_init_command_buffer_dispatch(struct vkr_context *ctx)
669 {
670    struct vn_dispatch_context *dispatch = &ctx->dispatch;
671 
672    dispatch->dispatch_vkAllocateCommandBuffers = vkr_dispatch_vkAllocateCommandBuffers;
673    dispatch->dispatch_vkFreeCommandBuffers = vkr_dispatch_vkFreeCommandBuffers;
674    dispatch->dispatch_vkResetCommandBuffer = vkr_dispatch_vkResetCommandBuffer;
675    dispatch->dispatch_vkBeginCommandBuffer = vkr_dispatch_vkBeginCommandBuffer;
676    dispatch->dispatch_vkEndCommandBuffer = vkr_dispatch_vkEndCommandBuffer;
677 
678    dispatch->dispatch_vkCmdBindPipeline = vkr_dispatch_vkCmdBindPipeline;
679    dispatch->dispatch_vkCmdSetViewport = vkr_dispatch_vkCmdSetViewport;
680    dispatch->dispatch_vkCmdSetScissor = vkr_dispatch_vkCmdSetScissor;
681    dispatch->dispatch_vkCmdSetLineWidth = vkr_dispatch_vkCmdSetLineWidth;
682    dispatch->dispatch_vkCmdSetDepthBias = vkr_dispatch_vkCmdSetDepthBias;
683    dispatch->dispatch_vkCmdSetBlendConstants = vkr_dispatch_vkCmdSetBlendConstants;
684    dispatch->dispatch_vkCmdSetDepthBounds = vkr_dispatch_vkCmdSetDepthBounds;
685    dispatch->dispatch_vkCmdSetStencilCompareMask =
686       vkr_dispatch_vkCmdSetStencilCompareMask;
687    dispatch->dispatch_vkCmdSetStencilWriteMask = vkr_dispatch_vkCmdSetStencilWriteMask;
688    dispatch->dispatch_vkCmdSetStencilReference = vkr_dispatch_vkCmdSetStencilReference;
689    dispatch->dispatch_vkCmdBindDescriptorSets = vkr_dispatch_vkCmdBindDescriptorSets;
690    dispatch->dispatch_vkCmdBindIndexBuffer = vkr_dispatch_vkCmdBindIndexBuffer;
691    dispatch->dispatch_vkCmdBindVertexBuffers = vkr_dispatch_vkCmdBindVertexBuffers;
692    dispatch->dispatch_vkCmdDraw = vkr_dispatch_vkCmdDraw;
693    dispatch->dispatch_vkCmdDrawIndexed = vkr_dispatch_vkCmdDrawIndexed;
694    dispatch->dispatch_vkCmdDrawIndirect = vkr_dispatch_vkCmdDrawIndirect;
695    dispatch->dispatch_vkCmdDrawIndexedIndirect = vkr_dispatch_vkCmdDrawIndexedIndirect;
696    dispatch->dispatch_vkCmdDispatch = vkr_dispatch_vkCmdDispatch;
697    dispatch->dispatch_vkCmdDispatchIndirect = vkr_dispatch_vkCmdDispatchIndirect;
698    dispatch->dispatch_vkCmdCopyBuffer = vkr_dispatch_vkCmdCopyBuffer;
699    dispatch->dispatch_vkCmdCopyImage = vkr_dispatch_vkCmdCopyImage;
700    dispatch->dispatch_vkCmdBlitImage = vkr_dispatch_vkCmdBlitImage;
701    dispatch->dispatch_vkCmdCopyBufferToImage = vkr_dispatch_vkCmdCopyBufferToImage;
702    dispatch->dispatch_vkCmdCopyImageToBuffer = vkr_dispatch_vkCmdCopyImageToBuffer;
703    dispatch->dispatch_vkCmdUpdateBuffer = vkr_dispatch_vkCmdUpdateBuffer;
704    dispatch->dispatch_vkCmdFillBuffer = vkr_dispatch_vkCmdFillBuffer;
705    dispatch->dispatch_vkCmdClearColorImage = vkr_dispatch_vkCmdClearColorImage;
706    dispatch->dispatch_vkCmdClearDepthStencilImage =
707       vkr_dispatch_vkCmdClearDepthStencilImage;
708    dispatch->dispatch_vkCmdClearAttachments = vkr_dispatch_vkCmdClearAttachments;
709    dispatch->dispatch_vkCmdResolveImage = vkr_dispatch_vkCmdResolveImage;
710    dispatch->dispatch_vkCmdSetEvent = vkr_dispatch_vkCmdSetEvent;
711    dispatch->dispatch_vkCmdResetEvent = vkr_dispatch_vkCmdResetEvent;
712    dispatch->dispatch_vkCmdWaitEvents = vkr_dispatch_vkCmdWaitEvents;
713    dispatch->dispatch_vkCmdPipelineBarrier = vkr_dispatch_vkCmdPipelineBarrier;
714    dispatch->dispatch_vkCmdBeginQuery = vkr_dispatch_vkCmdBeginQuery;
715    dispatch->dispatch_vkCmdEndQuery = vkr_dispatch_vkCmdEndQuery;
716    dispatch->dispatch_vkCmdResetQueryPool = vkr_dispatch_vkCmdResetQueryPool;
717    dispatch->dispatch_vkCmdWriteTimestamp = vkr_dispatch_vkCmdWriteTimestamp;
718    dispatch->dispatch_vkCmdCopyQueryPoolResults = vkr_dispatch_vkCmdCopyQueryPoolResults;
719    dispatch->dispatch_vkCmdPushConstants = vkr_dispatch_vkCmdPushConstants;
720    dispatch->dispatch_vkCmdBeginRenderPass = vkr_dispatch_vkCmdBeginRenderPass;
721    dispatch->dispatch_vkCmdNextSubpass = vkr_dispatch_vkCmdNextSubpass;
722    dispatch->dispatch_vkCmdEndRenderPass = vkr_dispatch_vkCmdEndRenderPass;
723    dispatch->dispatch_vkCmdExecuteCommands = vkr_dispatch_vkCmdExecuteCommands;
724    dispatch->dispatch_vkCmdSetDeviceMask = vkr_dispatch_vkCmdSetDeviceMask;
725    dispatch->dispatch_vkCmdDispatchBase = vkr_dispatch_vkCmdDispatchBase;
726    dispatch->dispatch_vkCmdBeginRenderPass2 = vkr_dispatch_vkCmdBeginRenderPass2;
727    dispatch->dispatch_vkCmdNextSubpass2 = vkr_dispatch_vkCmdNextSubpass2;
728    dispatch->dispatch_vkCmdEndRenderPass2 = vkr_dispatch_vkCmdEndRenderPass2;
729    dispatch->dispatch_vkCmdDrawIndirectCount = vkr_dispatch_vkCmdDrawIndirectCount;
730    dispatch->dispatch_vkCmdDrawIndexedIndirectCount =
731       vkr_dispatch_vkCmdDrawIndexedIndirectCount;
732 
733    dispatch->dispatch_vkCmdBindTransformFeedbackBuffersEXT =
734       vkr_dispatch_vkCmdBindTransformFeedbackBuffersEXT;
735    dispatch->dispatch_vkCmdBeginTransformFeedbackEXT =
736       vkr_dispatch_vkCmdBeginTransformFeedbackEXT;
737    dispatch->dispatch_vkCmdEndTransformFeedbackEXT =
738       vkr_dispatch_vkCmdEndTransformFeedbackEXT;
739    dispatch->dispatch_vkCmdBeginQueryIndexedEXT = vkr_dispatch_vkCmdBeginQueryIndexedEXT;
740    dispatch->dispatch_vkCmdEndQueryIndexedEXT = vkr_dispatch_vkCmdEndQueryIndexedEXT;
741    dispatch->dispatch_vkCmdDrawIndirectByteCountEXT =
742       vkr_dispatch_vkCmdDrawIndirectByteCountEXT;
743 }
744