radv: determine if a shader loads push constants from the SGPR loc
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 28 Sep 2021 12:34:22 +0000 (14:34 +0200)
committerMarge Bot <eric+marge@anholt.net>
Fri, 8 Oct 2021 11:37:19 +0000 (11:37 +0000)
If the SGPR loc is declared, the shader loads push constants.

Signed-off-by: Samuel Pitoiset <samuel.pitoiset@gmail.com>
Reviewed-by: Bas Nieuwenhuizen <bas@basnieuwenhuizen.nl>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/13149>

src/amd/vulkan/radv_cmd_buffer.c

index 9e76af1..b864d08 100644 (file)
@@ -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;