From 99cd8b6a546cf61a28e54397fa8954009853aa08 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Thu, 20 Jun 2024 16:27:39 +0200 Subject: [PATCH] radv: add a helper to execute a DGC IB It will be used to execute DGC IB for task shaders too. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 20 +++++++++++++++----- 1 file changed, 15 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index e7ee3b8a60c..13d5c30f73b 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -11507,6 +11507,19 @@ radv_CmdDrawMeshTasksIndirectCountEXT(VkCommandBuffer commandBuffer, VkBuffer _b static void radv_dgc_before_dispatch(struct radv_cmd_buffer *cmd_buffer); static void radv_dgc_after_dispatch(struct radv_cmd_buffer *cmd_buffer); +static void +radv_dgc_execute_ib(struct radv_cmd_buffer *cmd_buffer, const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo) +{ + VK_FROM_HANDLE(radv_buffer, prep_buffer, pGeneratedCommandsInfo->preprocessBuffer); + struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); + + const uint32_t cmdbuf_size = radv_get_indirect_cmdbuf_size(pGeneratedCommandsInfo); + const uint64_t ib_va = + radv_buffer_get_va(prep_buffer->bo) + prep_buffer->offset + pGeneratedCommandsInfo->preprocessOffset; + + device->ws->cs_execute_ib(cmd_buffer->cs, NULL, ib_va, cmdbuf_size >> 2, cmd_buffer->state.predicating); +} + VKAPI_ATTR void VKAPI_CALL radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPreprocessed, const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo) @@ -11581,9 +11594,6 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPre } } - uint32_t cmdbuf_size = radv_get_indirect_cmdbuf_size(pGeneratedCommandsInfo); - const uint64_t ib_va = - radv_buffer_get_va(prep_buffer->bo) + prep_buffer->offset + pGeneratedCommandsInfo->preprocessOffset; const uint32_t view_mask = cmd_buffer->state.render.view_mask; if (!radv_cmd_buffer_uses_mec(cmd_buffer)) { @@ -11594,12 +11604,12 @@ radv_CmdExecuteGeneratedCommandsNV(VkCommandBuffer commandBuffer, VkBool32 isPre radv_cs_add_buffer(device->ws, cmd_buffer->cs, prep_buffer->bo); if (compute || !view_mask) { - device->ws->cs_execute_ib(cmd_buffer->cs, NULL, ib_va, cmdbuf_size >> 2, cmd_buffer->state.predicating); + radv_dgc_execute_ib(cmd_buffer, pGeneratedCommandsInfo); } else { u_foreach_bit (view, view_mask) { radv_emit_view_index(&cmd_buffer->state, cmd_buffer->cs, view); - device->ws->cs_execute_ib(cmd_buffer->cs, NULL, ib_va, cmdbuf_size >> 2, cmd_buffer->state.predicating); + radv_dgc_execute_ib(cmd_buffer, pGeneratedCommandsInfo); } }