ac/nir: add ac_nir_load_arg_at_offset
authorQiang Yu <yuq825@gmail.com>
Sat, 18 Mar 2023 13:32:16 +0000 (21:32 +0800)
committerMarge Bot <emma+marge@anholt.net>
Mon, 3 Apr 2023 01:35:06 +0000 (01:35 +0000)
Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/22045>

src/amd/common/ac_nir.c
src/amd/common/ac_nir.h

index a28193e..b4afb89 100644 (file)
 #include "nir_builder.h"
 #include "nir_xfb_info.h"
 
+/* Load argument with index start from arg plus relative_index. */
 nir_ssa_def *
-ac_nir_load_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct ac_arg arg)
+ac_nir_load_arg_at_offset(nir_builder *b, const struct ac_shader_args *ac_args,
+                          struct ac_arg arg, unsigned relative_index)
 {
-   unsigned num_components = ac_args->args[arg.arg_index].size;
+   unsigned arg_index = arg.arg_index + relative_index;
+   unsigned num_components = ac_args->args[arg_index].size;
 
-   if (ac_args->args[arg.arg_index].file == AC_ARG_SGPR)
-      return nir_load_scalar_arg_amd(b, num_components, .base = arg.arg_index);
+   if (ac_args->args[arg_index].file == AC_ARG_SGPR)
+      return nir_load_scalar_arg_amd(b, num_components, .base = arg_index);
    else
-      return nir_load_vector_arg_amd(b, num_components, .base = arg.arg_index);
+      return nir_load_vector_arg_amd(b, num_components, .base = arg_index);
 }
 
 nir_ssa_def *
index 7b1c75b..b6c9d09 100644 (file)
@@ -67,7 +67,14 @@ typedef struct nir_builder nir_builder;
 typedef void (*ac_nir_cull_accepted)(nir_builder *b, void *state);
 
 nir_ssa_def *
-ac_nir_load_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct ac_arg arg);
+ac_nir_load_arg_at_offset(nir_builder *b, const struct ac_shader_args *ac_args,
+                          struct ac_arg arg, unsigned relative_index);
+
+static inline nir_ssa_def *
+ac_nir_load_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct ac_arg arg)
+{
+   return ac_nir_load_arg_at_offset(b, ac_args, arg, 0);
+}
 
 nir_ssa_def *
 ac_nir_unpack_arg(nir_builder *b, const struct ac_shader_args *ac_args, struct ac_arg arg,