From 8f0ff009c027d40882638da5dbde66357584f676 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Fri, 15 Aug 2025 13:26:20 +0200 Subject: [PATCH] radv: do not emit inlined SGPRs twice for merged shaders This is wasteful. Signed-off-by: Samuel Pitoiset Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index d55d7858763..8ad0d1efe46 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -5602,14 +5602,16 @@ radv_flush_constants(struct radv_cmd_buffer *cmd_buffer, VkShaderStageFlags stag radv_emit_all_inline_push_consts(device, cs, compute_shader, (uint32_t *)cmd_buffer->push_constants, &need_push_constants); } else { + prev_shader = NULL; radv_foreach_stage (stage, internal_stages & ~VK_SHADER_STAGE_TASK_BIT_EXT) { shader = radv_get_shader(cmd_buffer->state.shaders, stage); - if (!shader) - continue; - - radv_emit_all_inline_push_consts(device, cs, shader, (uint32_t *)cmd_buffer->push_constants, - &need_push_constants); + /* Avoid redundantly emitting SGPRs for merged stages. */ + if (shader && shader != prev_shader) { + radv_emit_all_inline_push_consts(device, cs, shader, (uint32_t *)cmd_buffer->push_constants, + &need_push_constants); + prev_shader = shader; + } } if (internal_stages & VK_SHADER_STAGE_TASK_BIT_EXT) {