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