radv: add a helper that determines if DGC uses task shaders

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/29935>
This commit is contained in:
Samuel Pitoiset 2024-06-27 16:04:56 +02:00 committed by Marge Bot
parent 58327fd3bf
commit 1f7bdcfa8d
3 changed files with 23 additions and 4 deletions

View file

@ -11510,12 +11510,10 @@ 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_indirect_command_layout, layout, pGeneratedCommandsInfo->indirectCommandsLayout);
VK_FROM_HANDLE(radv_buffer, prep_buffer, pGeneratedCommandsInfo->preprocessBuffer);
VK_FROM_HANDLE(radv_pipeline, pipeline, pGeneratedCommandsInfo->pipeline);
struct radv_device *device = radv_cmd_buffer_device(cmd_buffer);
const bool has_task_shader = layout->pipeline_bind_point == VK_PIPELINE_BIND_POINT_GRAPHICS &&
pipeline->shaders[MESA_SHADER_TASK] && false /* TODO: Enable when fully implemented */;
const bool has_task_shader =
radv_dgc_with_task_shader(pGeneratedCommandsInfo) && false /* TODO: Enable when fully implemented */;
const uint32_t cmdbuf_size = radv_get_indirect_cmdbuf_size(pGeneratedCommandsInfo);
const uint64_t ib_va =

View file

@ -2198,6 +2198,25 @@ radv_GetGeneratedCommandsMemoryRequirementsNV(VkDevice _device,
align(cmd_buf_size + upload_buf_size, pMemoryRequirements->memoryRequirements.alignment);
}
bool
radv_dgc_with_task_shader(const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo)
{
VK_FROM_HANDLE(radv_indirect_command_layout, layout, pGeneratedCommandsInfo->indirectCommandsLayout);
if (layout->pipeline_bind_point != VK_PIPELINE_BIND_POINT_GRAPHICS)
return false;
if (!layout->draw_mesh_tasks)
return false;
VK_FROM_HANDLE(radv_pipeline, pipeline, pGeneratedCommandsInfo->pipeline);
const struct radv_shader *task_shader = radv_get_shader(pipeline->shaders, MESA_SHADER_TASK);
if (!task_shader)
return false;
return true;
}
bool
radv_use_dgc_predication(struct radv_cmd_buffer *cmd_buffer, const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo)
{

View file

@ -65,6 +65,8 @@ bool radv_use_dgc_predication(struct radv_cmd_buffer *cmd_buffer,
bool radv_dgc_can_preprocess(const struct radv_indirect_command_layout *layout, struct radv_pipeline *pipeline);
bool radv_dgc_with_task_shader(const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo);
void radv_prepare_dgc(struct radv_cmd_buffer *cmd_buffer, const VkGeneratedCommandsInfoNV *pGeneratedCommandsInfo,
bool cond_render_enabled);