From: Qiang Yu Date: Sat, 18 Mar 2023 13:32:16 +0000 (+0800) Subject: ac/nir: add ac_nir_load_arg_at_offset X-Git-Tag: upstream/23.3.3~10607 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=003d84b660ca325b9670da0b3808462fcfaebfc2;p=platform%2Fupstream%2Fmesa.git ac/nir: add ac_nir_load_arg_at_offset Reviewed-by: Marek Olšák Signed-off-by: Qiang Yu Part-of: --- diff --git a/src/amd/common/ac_nir.c b/src/amd/common/ac_nir.c index a28193e..b4afb89 100644 --- a/src/amd/common/ac_nir.c +++ b/src/amd/common/ac_nir.c @@ -26,15 +26,18 @@ #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 * diff --git a/src/amd/common/ac_nir.h b/src/amd/common/ac_nir.h index 7b1c75b..b6c9d09 100644 --- a/src/amd/common/ac_nir.h +++ b/src/amd/common/ac_nir.h @@ -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,