|
|
|
@ -36,16 +36,22 @@ static void |
|
|
|
|
vkr_dispatch_vkResetCommandPool(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkResetCommandPool *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_device *dev = vkr_device_from_handle(args->device); |
|
|
|
|
struct vn_device_proc_table *vk = &dev->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkResetCommandPool_args_handle(args); |
|
|
|
|
args->ret = vkResetCommandPool(args->device, args->commandPool, args->flags); |
|
|
|
|
args->ret = vk->ResetCommandPool(args->device, args->commandPool, args->flags); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkTrimCommandPool(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkTrimCommandPool *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_device *dev = vkr_device_from_handle(args->device); |
|
|
|
|
struct vn_device_proc_table *vk = &dev->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkTrimCommandPool_args_handle(args); |
|
|
|
|
vkTrimCommandPool(args->device, args->commandPool, args->flags); |
|
|
|
|
vk->TrimCommandPool(args->device, args->commandPool, args->flags); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
@ -90,262 +96,353 @@ static void |
|
|
|
|
vkr_dispatch_vkResetCommandBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkResetCommandBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkResetCommandBuffer_args_handle(args); |
|
|
|
|
args->ret = vkResetCommandBuffer(args->commandBuffer, args->flags); |
|
|
|
|
args->ret = vk->ResetCommandBuffer(args->commandBuffer, args->flags); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkBeginCommandBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkBeginCommandBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkBeginCommandBuffer_args_handle(args); |
|
|
|
|
args->ret = vkBeginCommandBuffer(args->commandBuffer, args->pBeginInfo); |
|
|
|
|
args->ret = vk->BeginCommandBuffer(args->commandBuffer, args->pBeginInfo); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkEndCommandBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkEndCommandBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkEndCommandBuffer_args_handle(args); |
|
|
|
|
args->ret = vkEndCommandBuffer(args->commandBuffer); |
|
|
|
|
args->ret = vk->EndCommandBuffer(args->commandBuffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBindPipeline(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBindPipeline *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBindPipeline_args_handle(args); |
|
|
|
|
vkCmdBindPipeline(args->commandBuffer, args->pipelineBindPoint, args->pipeline); |
|
|
|
|
vk->CmdBindPipeline(args->commandBuffer, args->pipelineBindPoint, args->pipeline); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetViewport(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetViewport *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetViewport_args_handle(args); |
|
|
|
|
vkCmdSetViewport(args->commandBuffer, args->firstViewport, args->viewportCount, |
|
|
|
|
args->pViewports); |
|
|
|
|
vk->CmdSetViewport(args->commandBuffer, args->firstViewport, args->viewportCount, |
|
|
|
|
args->pViewports); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetScissor(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetScissor *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetScissor_args_handle(args); |
|
|
|
|
vkCmdSetScissor(args->commandBuffer, args->firstScissor, args->scissorCount, |
|
|
|
|
args->pScissors); |
|
|
|
|
vk->CmdSetScissor(args->commandBuffer, args->firstScissor, args->scissorCount, |
|
|
|
|
args->pScissors); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetLineWidth(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetLineWidth *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetLineWidth_args_handle(args); |
|
|
|
|
vkCmdSetLineWidth(args->commandBuffer, args->lineWidth); |
|
|
|
|
vk->CmdSetLineWidth(args->commandBuffer, args->lineWidth); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetDepthBias(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetDepthBias *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetDepthBias_args_handle(args); |
|
|
|
|
vkCmdSetDepthBias(args->commandBuffer, args->depthBiasConstantFactor, |
|
|
|
|
args->depthBiasClamp, args->depthBiasSlopeFactor); |
|
|
|
|
vk->CmdSetDepthBias(args->commandBuffer, args->depthBiasConstantFactor, |
|
|
|
|
args->depthBiasClamp, args->depthBiasSlopeFactor); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetBlendConstants(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetBlendConstants *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetBlendConstants_args_handle(args); |
|
|
|
|
vkCmdSetBlendConstants(args->commandBuffer, args->blendConstants); |
|
|
|
|
vk->CmdSetBlendConstants(args->commandBuffer, args->blendConstants); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetDepthBounds(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetDepthBounds *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetDepthBounds_args_handle(args); |
|
|
|
|
vkCmdSetDepthBounds(args->commandBuffer, args->minDepthBounds, args->maxDepthBounds); |
|
|
|
|
vk->CmdSetDepthBounds(args->commandBuffer, args->minDepthBounds, args->maxDepthBounds); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetStencilCompareMask(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetStencilCompareMask *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetStencilCompareMask_args_handle(args); |
|
|
|
|
vkCmdSetStencilCompareMask(args->commandBuffer, args->faceMask, args->compareMask); |
|
|
|
|
vk->CmdSetStencilCompareMask(args->commandBuffer, args->faceMask, args->compareMask); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetStencilWriteMask(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetStencilWriteMask *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetStencilWriteMask_args_handle(args); |
|
|
|
|
vkCmdSetStencilWriteMask(args->commandBuffer, args->faceMask, args->writeMask); |
|
|
|
|
vk->CmdSetStencilWriteMask(args->commandBuffer, args->faceMask, args->writeMask); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetStencilReference(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetStencilReference *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetStencilReference_args_handle(args); |
|
|
|
|
vkCmdSetStencilReference(args->commandBuffer, args->faceMask, args->reference); |
|
|
|
|
vk->CmdSetStencilReference(args->commandBuffer, args->faceMask, args->reference); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBindDescriptorSets(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBindDescriptorSets *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBindDescriptorSets_args_handle(args); |
|
|
|
|
vkCmdBindDescriptorSets(args->commandBuffer, args->pipelineBindPoint, args->layout, |
|
|
|
|
args->firstSet, args->descriptorSetCount, |
|
|
|
|
args->pDescriptorSets, args->dynamicOffsetCount, |
|
|
|
|
args->pDynamicOffsets); |
|
|
|
|
vk->CmdBindDescriptorSets(args->commandBuffer, args->pipelineBindPoint, args->layout, |
|
|
|
|
args->firstSet, args->descriptorSetCount, |
|
|
|
|
args->pDescriptorSets, args->dynamicOffsetCount, |
|
|
|
|
args->pDynamicOffsets); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBindIndexBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBindIndexBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBindIndexBuffer_args_handle(args); |
|
|
|
|
vkCmdBindIndexBuffer(args->commandBuffer, args->buffer, args->offset, args->indexType); |
|
|
|
|
vk->CmdBindIndexBuffer(args->commandBuffer, args->buffer, args->offset, |
|
|
|
|
args->indexType); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBindVertexBuffers(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBindVertexBuffers *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBindVertexBuffers_args_handle(args); |
|
|
|
|
vkCmdBindVertexBuffers(args->commandBuffer, args->firstBinding, args->bindingCount, |
|
|
|
|
args->pBuffers, args->pOffsets); |
|
|
|
|
vk->CmdBindVertexBuffers(args->commandBuffer, args->firstBinding, args->bindingCount, |
|
|
|
|
args->pBuffers, args->pOffsets); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDraw(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDraw *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDraw_args_handle(args); |
|
|
|
|
vkCmdDraw(args->commandBuffer, args->vertexCount, args->instanceCount, |
|
|
|
|
args->firstVertex, args->firstInstance); |
|
|
|
|
vk->CmdDraw(args->commandBuffer, args->vertexCount, args->instanceCount, |
|
|
|
|
args->firstVertex, args->firstInstance); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDrawIndexed(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDrawIndexed *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDrawIndexed_args_handle(args); |
|
|
|
|
vkCmdDrawIndexed(args->commandBuffer, args->indexCount, args->instanceCount, |
|
|
|
|
args->firstIndex, args->vertexOffset, args->firstInstance); |
|
|
|
|
vk->CmdDrawIndexed(args->commandBuffer, args->indexCount, args->instanceCount, |
|
|
|
|
args->firstIndex, args->vertexOffset, args->firstInstance); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDrawIndirect(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDrawIndirect *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDrawIndirect_args_handle(args); |
|
|
|
|
vkCmdDrawIndirect(args->commandBuffer, args->buffer, args->offset, args->drawCount, |
|
|
|
|
args->stride); |
|
|
|
|
vk->CmdDrawIndirect(args->commandBuffer, args->buffer, args->offset, args->drawCount, |
|
|
|
|
args->stride); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDrawIndexedIndirect(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDrawIndexedIndirect *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDrawIndexedIndirect_args_handle(args); |
|
|
|
|
vkCmdDrawIndexedIndirect(args->commandBuffer, args->buffer, args->offset, |
|
|
|
|
args->drawCount, args->stride); |
|
|
|
|
vk->CmdDrawIndexedIndirect(args->commandBuffer, args->buffer, args->offset, |
|
|
|
|
args->drawCount, args->stride); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDispatch(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDispatch *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDispatch_args_handle(args); |
|
|
|
|
vkCmdDispatch(args->commandBuffer, args->groupCountX, args->groupCountY, |
|
|
|
|
args->groupCountZ); |
|
|
|
|
vk->CmdDispatch(args->commandBuffer, args->groupCountX, args->groupCountY, |
|
|
|
|
args->groupCountZ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDispatchIndirect(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDispatchIndirect *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDispatchIndirect_args_handle(args); |
|
|
|
|
vkCmdDispatchIndirect(args->commandBuffer, args->buffer, args->offset); |
|
|
|
|
vk->CmdDispatchIndirect(args->commandBuffer, args->buffer, args->offset); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdCopyBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdCopyBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdCopyBuffer_args_handle(args); |
|
|
|
|
vkCmdCopyBuffer(args->commandBuffer, args->srcBuffer, args->dstBuffer, |
|
|
|
|
args->regionCount, args->pRegions); |
|
|
|
|
vk->CmdCopyBuffer(args->commandBuffer, args->srcBuffer, args->dstBuffer, |
|
|
|
|
args->regionCount, args->pRegions); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdCopyImage(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdCopyImage *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdCopyImage_args_handle(args); |
|
|
|
|
vkCmdCopyImage(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstImage, args->dstImageLayout, args->regionCount, |
|
|
|
|
args->pRegions); |
|
|
|
|
vk->CmdCopyImage(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstImage, args->dstImageLayout, args->regionCount, |
|
|
|
|
args->pRegions); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBlitImage(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBlitImage *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBlitImage_args_handle(args); |
|
|
|
|
vkCmdBlitImage(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstImage, args->dstImageLayout, args->regionCount, args->pRegions, |
|
|
|
|
args->filter); |
|
|
|
|
vk->CmdBlitImage(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstImage, args->dstImageLayout, args->regionCount, |
|
|
|
|
args->pRegions, args->filter); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdCopyBufferToImage(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdCopyBufferToImage *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdCopyBufferToImage_args_handle(args); |
|
|
|
|
vkCmdCopyBufferToImage(args->commandBuffer, args->srcBuffer, args->dstImage, |
|
|
|
|
args->dstImageLayout, args->regionCount, args->pRegions); |
|
|
|
|
vk->CmdCopyBufferToImage(args->commandBuffer, args->srcBuffer, args->dstImage, |
|
|
|
|
args->dstImageLayout, args->regionCount, args->pRegions); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdCopyImageToBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdCopyImageToBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdCopyImageToBuffer_args_handle(args); |
|
|
|
|
vkCmdCopyImageToBuffer(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstBuffer, args->regionCount, args->pRegions); |
|
|
|
|
vk->CmdCopyImageToBuffer(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstBuffer, args->regionCount, args->pRegions); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdUpdateBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdUpdateBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdUpdateBuffer_args_handle(args); |
|
|
|
|
vkCmdUpdateBuffer(args->commandBuffer, args->dstBuffer, args->dstOffset, |
|
|
|
|
args->dataSize, args->pData); |
|
|
|
|
vk->CmdUpdateBuffer(args->commandBuffer, args->dstBuffer, args->dstOffset, |
|
|
|
|
args->dataSize, args->pData); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdFillBuffer(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdFillBuffer *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdFillBuffer_args_handle(args); |
|
|
|
|
vkCmdFillBuffer(args->commandBuffer, args->dstBuffer, args->dstOffset, args->size, |
|
|
|
|
args->data); |
|
|
|
|
vk->CmdFillBuffer(args->commandBuffer, args->dstBuffer, args->dstOffset, args->size, |
|
|
|
|
args->data); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdClearColorImage(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdClearColorImage *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdClearColorImage_args_handle(args); |
|
|
|
|
vkCmdClearColorImage(args->commandBuffer, args->image, args->imageLayout, args->pColor, |
|
|
|
|
args->rangeCount, args->pRanges); |
|
|
|
|
vk->CmdClearColorImage(args->commandBuffer, args->image, args->imageLayout, |
|
|
|
|
args->pColor, args->rangeCount, args->pRanges); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
@ -353,172 +450,229 @@ vkr_dispatch_vkCmdClearDepthStencilImage( |
|
|
|
|
UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdClearDepthStencilImage *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdClearDepthStencilImage_args_handle(args); |
|
|
|
|
vkCmdClearDepthStencilImage(args->commandBuffer, args->image, args->imageLayout, |
|
|
|
|
args->pDepthStencil, args->rangeCount, args->pRanges); |
|
|
|
|
vk->CmdClearDepthStencilImage(args->commandBuffer, args->image, args->imageLayout, |
|
|
|
|
args->pDepthStencil, args->rangeCount, args->pRanges); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdClearAttachments(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdClearAttachments *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdClearAttachments_args_handle(args); |
|
|
|
|
vkCmdClearAttachments(args->commandBuffer, args->attachmentCount, args->pAttachments, |
|
|
|
|
args->rectCount, args->pRects); |
|
|
|
|
vk->CmdClearAttachments(args->commandBuffer, args->attachmentCount, args->pAttachments, |
|
|
|
|
args->rectCount, args->pRects); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdResolveImage(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdResolveImage *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdResolveImage_args_handle(args); |
|
|
|
|
vkCmdResolveImage(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstImage, args->dstImageLayout, args->regionCount, |
|
|
|
|
args->pRegions); |
|
|
|
|
vk->CmdResolveImage(args->commandBuffer, args->srcImage, args->srcImageLayout, |
|
|
|
|
args->dstImage, args->dstImageLayout, args->regionCount, |
|
|
|
|
args->pRegions); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetEvent(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetEvent *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetEvent_args_handle(args); |
|
|
|
|
vkCmdSetEvent(args->commandBuffer, args->event, args->stageMask); |
|
|
|
|
vk->CmdSetEvent(args->commandBuffer, args->event, args->stageMask); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdResetEvent(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdResetEvent *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdResetEvent_args_handle(args); |
|
|
|
|
vkCmdResetEvent(args->commandBuffer, args->event, args->stageMask); |
|
|
|
|
vk->CmdResetEvent(args->commandBuffer, args->event, args->stageMask); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdWaitEvents(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdWaitEvents *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdWaitEvents_args_handle(args); |
|
|
|
|
vkCmdWaitEvents(args->commandBuffer, args->eventCount, args->pEvents, |
|
|
|
|
args->srcStageMask, args->dstStageMask, args->memoryBarrierCount, |
|
|
|
|
args->pMemoryBarriers, args->bufferMemoryBarrierCount, |
|
|
|
|
args->pBufferMemoryBarriers, args->imageMemoryBarrierCount, |
|
|
|
|
args->pImageMemoryBarriers); |
|
|
|
|
vk->CmdWaitEvents(args->commandBuffer, args->eventCount, args->pEvents, |
|
|
|
|
args->srcStageMask, args->dstStageMask, args->memoryBarrierCount, |
|
|
|
|
args->pMemoryBarriers, args->bufferMemoryBarrierCount, |
|
|
|
|
args->pBufferMemoryBarriers, args->imageMemoryBarrierCount, |
|
|
|
|
args->pImageMemoryBarriers); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdPipelineBarrier(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdPipelineBarrier *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdPipelineBarrier_args_handle(args); |
|
|
|
|
vkCmdPipelineBarrier(args->commandBuffer, args->srcStageMask, args->dstStageMask, |
|
|
|
|
args->dependencyFlags, args->memoryBarrierCount, |
|
|
|
|
args->pMemoryBarriers, args->bufferMemoryBarrierCount, |
|
|
|
|
args->pBufferMemoryBarriers, args->imageMemoryBarrierCount, |
|
|
|
|
args->pImageMemoryBarriers); |
|
|
|
|
vk->CmdPipelineBarrier(args->commandBuffer, args->srcStageMask, args->dstStageMask, |
|
|
|
|
args->dependencyFlags, args->memoryBarrierCount, |
|
|
|
|
args->pMemoryBarriers, args->bufferMemoryBarrierCount, |
|
|
|
|
args->pBufferMemoryBarriers, args->imageMemoryBarrierCount, |
|
|
|
|
args->pImageMemoryBarriers); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBeginQuery(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBeginQuery *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBeginQuery_args_handle(args); |
|
|
|
|
vkCmdBeginQuery(args->commandBuffer, args->queryPool, args->query, args->flags); |
|
|
|
|
vk->CmdBeginQuery(args->commandBuffer, args->queryPool, args->query, args->flags); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdEndQuery(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdEndQuery *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdEndQuery_args_handle(args); |
|
|
|
|
vkCmdEndQuery(args->commandBuffer, args->queryPool, args->query); |
|
|
|
|
vk->CmdEndQuery(args->commandBuffer, args->queryPool, args->query); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdResetQueryPool(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdResetQueryPool *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdResetQueryPool_args_handle(args); |
|
|
|
|
vkCmdResetQueryPool(args->commandBuffer, args->queryPool, args->firstQuery, |
|
|
|
|
args->queryCount); |
|
|
|
|
vk->CmdResetQueryPool(args->commandBuffer, args->queryPool, args->firstQuery, |
|
|
|
|
args->queryCount); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdWriteTimestamp(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdWriteTimestamp *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdWriteTimestamp_args_handle(args); |
|
|
|
|
vkCmdWriteTimestamp(args->commandBuffer, args->pipelineStage, args->queryPool, |
|
|
|
|
args->query); |
|
|
|
|
vk->CmdWriteTimestamp(args->commandBuffer, args->pipelineStage, args->queryPool, |
|
|
|
|
args->query); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdCopyQueryPoolResults(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdCopyQueryPoolResults *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdCopyQueryPoolResults_args_handle(args); |
|
|
|
|
vkCmdCopyQueryPoolResults(args->commandBuffer, args->queryPool, args->firstQuery, |
|
|
|
|
args->queryCount, args->dstBuffer, args->dstOffset, |
|
|
|
|
args->stride, args->flags); |
|
|
|
|
vk->CmdCopyQueryPoolResults(args->commandBuffer, args->queryPool, args->firstQuery, |
|
|
|
|
args->queryCount, args->dstBuffer, args->dstOffset, |
|
|
|
|
args->stride, args->flags); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdPushConstants(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdPushConstants *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdPushConstants_args_handle(args); |
|
|
|
|
vkCmdPushConstants(args->commandBuffer, args->layout, args->stageFlags, args->offset, |
|
|
|
|
args->size, args->pValues); |
|
|
|
|
vk->CmdPushConstants(args->commandBuffer, args->layout, args->stageFlags, args->offset, |
|
|
|
|
args->size, args->pValues); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdBeginRenderPass(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdBeginRenderPass *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdBeginRenderPass_args_handle(args); |
|
|
|
|
vkCmdBeginRenderPass(args->commandBuffer, args->pRenderPassBegin, args->contents); |
|
|
|
|
vk->CmdBeginRenderPass(args->commandBuffer, args->pRenderPassBegin, args->contents); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdNextSubpass(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdNextSubpass *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdNextSubpass_args_handle(args); |
|
|
|
|
vkCmdNextSubpass(args->commandBuffer, args->contents); |
|
|
|
|
vk->CmdNextSubpass(args->commandBuffer, args->contents); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdEndRenderPass(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdEndRenderPass *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdEndRenderPass_args_handle(args); |
|
|
|
|
vkCmdEndRenderPass(args->commandBuffer); |
|
|
|
|
vk->CmdEndRenderPass(args->commandBuffer); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdExecuteCommands(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdExecuteCommands *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdExecuteCommands_args_handle(args); |
|
|
|
|
vkCmdExecuteCommands(args->commandBuffer, args->commandBufferCount, |
|
|
|
|
args->pCommandBuffers); |
|
|
|
|
vk->CmdExecuteCommands(args->commandBuffer, args->commandBufferCount, |
|
|
|
|
args->pCommandBuffers); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdSetDeviceMask(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdSetDeviceMask *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdSetDeviceMask_args_handle(args); |
|
|
|
|
vkCmdSetDeviceMask(args->commandBuffer, args->deviceMask); |
|
|
|
|
vk->CmdSetDeviceMask(args->commandBuffer, args->deviceMask); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|
vkr_dispatch_vkCmdDispatchBase(UNUSED struct vn_dispatch_context *dispatch, |
|
|
|
|
struct vn_command_vkCmdDispatchBase *args) |
|
|
|
|
{ |
|
|
|
|
struct vkr_command_buffer *cmd = vkr_command_buffer_from_handle(args->commandBuffer); |
|
|
|
|
struct vn_device_proc_table *vk = &cmd->device->proc_table; |
|
|
|
|
|
|
|
|
|
vn_replace_vkCmdDispatchBase_args_handle(args); |
|
|
|
|
vkCmdDispatchBase(args->commandBuffer, args->baseGroupX, args->baseGroupY, |
|
|
|
|
args->baseGroupZ, args->groupCountX, args->groupCountY, |
|
|
|
|
args->groupCountZ); |
|
|
|
|
vk->CmdDispatchBase(args->commandBuffer, args->baseGroupX, args->baseGroupY, |
|
|
|
|
args->baseGroupZ, args->groupCountX, args->groupCountY, |
|
|
|
|
args->groupCountZ); |
|
|
|
|
} |
|
|
|
|
|
|
|
|
|
static void |
|
|
|
|