From bcfba1891aa2a07d7322e0ecaa4b9fa350c4e764 Mon Sep 17 00:00:00 2001 From: Samuel Pitoiset Date: Tue, 28 Sep 2021 14:34:22 +0200 Subject: [PATCH] radv: determine if a shader loads push constants from the SGPR loc If the SGPR loc is declared, the shader loads push constants. Signed-off-by: Samuel Pitoiset Reviewed-by: Bas Nieuwenhuizen Part-of: --- src/amd/vulkan/radv_cmd_buffer.c | 10 +++++++++- 1 file changed, 9 insertions(+), 1 deletion(-) diff --git a/src/amd/vulkan/radv_cmd_buffer.c b/src/amd/vulkan/radv_cmd_buffer.c index 9e76af12365..b864d08a32d 100644 --- a/src/amd/vulkan/radv_cmd_buffer.c +++ b/src/amd/vulkan/radv_cmd_buffer.c @@ -2835,6 +2835,14 @@ radv_flush_descriptors(struct radv_cmd_buffer *cmd_buffer, VkShaderStageFlags st radv_save_descriptors(cmd_buffer, bind_point); } +static bool +radv_shader_loads_push_constants(struct radv_pipeline *pipeline, gl_shader_stage stage) +{ + struct radv_userdata_info *loc = + radv_lookup_user_sgpr(pipeline, stage, AC_UD_PUSH_CONSTANTS); + return loc->sgpr_idx != -1; +} + static void radv_flush_constants(struct radv_cmd_buffer *cmd_buffer, VkShaderStageFlags stages, struct radv_pipeline *pipeline, VkPipelineBindPoint bind_point) @@ -2875,7 +2883,7 @@ radv_flush_constants(struct radv_cmd_buffer *cmd_buffer, VkShaderStageFlags stag if (!shader) continue; - need_push_constants |= shader->info.loads_push_constants; + need_push_constants |= radv_shader_loads_push_constants(pipeline, stage); uint8_t base = shader->info.base_inline_push_consts; uint8_t count = shader->info.num_inline_push_consts;