From 88864b707a8ad3a894521f199973cf34216898ad Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 25 Jun 2024 10:44:10 +0200 Subject: [PATCH] radv: enable task shaders support with NV DGC No games are using task shaders with DGC at the moment but this is supposed to work. This fixes test_amplification_shader_execute_indirect from vkd3d. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 3 +-- src/amd/vulkan/radv_device_generated_commands.c | 2 +- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 8c204abf909..f3efd578513 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -11513,8 +11513,7 @@ radv_dgc_execute_ib(struct radv_cmd_buffer *cmd_buffer, const VkGeneratedCommand { VK_FROM_HANDLE(radv_buffer, prep_buffer, pGeneratedCommandsInfo->preprocessBuffer); struct radv_device *device = radv_cmd_buffer_device(cmd_buffer); - const bool has_task_shader = - radv_dgc_with_task_shader(pGeneratedCommandsInfo) && false /* TODO: Enable when fully implemented */; + const bool has_task_shader = radv_dgc_with_task_shader(pGeneratedCommandsInfo); const uint32_t cmdbuf_size = radv_get_indirect_cmdbuf_size(pGeneratedCommandsInfo); const uint64_t ib_va = diff --git a/src/amd/vulkan/radv_device_generated_commands.c b/src/amd/vulkan/radv_device_generated_commands.c index a6ad3a580f6..a3e78669e12 100644 --- a/src/amd/vulkan/radv_device_generated_commands.c +++ b/src/amd/vulkan/radv_device_generated_commands.c @@ -2413,7 +2413,7 @@ radv_prepare_dgc_graphics(struct radv_cmd_buffer *cmd_buffer, const VkGeneratedC const struct radv_userdata_info *xyz_loc = radv_get_user_sgpr(task_shader, AC_UD_CS_GRID_SIZE); const struct radv_userdata_info *draw_id_loc = radv_get_user_sgpr(task_shader, AC_UD_CS_TASK_DRAW_ID); - params->has_task_shader = 0; /* TODO: Enable when fully implemented */ + params->has_task_shader = 1; params->mesh_ring_entry_sgpr = ((mesh_shader->info.user_data_0 - SI_SH_REG_OFFSET) >> 2) + mesh_ring_entry_loc->sgpr_idx; params->linear_dispatch_en = task_shader->info.cs.linear_taskmesh_dispatch;