From a15e733a8155d1f3218e0b5f1bf05b08f9d58754 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Wed, 25 Dec 2024 14:43:13 -0500 Subject: [PATCH] ac,radeonsi: move load_vector_arg flags to common code MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This will be needed by lowering of barycentrics. Reviewed-by: Timur Kristóf Part-of: --- src/amd/common/ac_nir.h | 8 ++++++++ src/gallium/drivers/radeonsi/si_nir_lower_abi.c | 3 +-- src/gallium/drivers/radeonsi/si_shader.h | 4 ---- src/gallium/drivers/radeonsi/si_shader_info.c | 5 +++-- 4 files changed, 12 insertions(+), 8 deletions(-) diff --git a/src/amd/common/ac_nir.h b/src/amd/common/ac_nir.h index 2ca3467cc07..6285045e9c5 100644 --- a/src/amd/common/ac_nir.h +++ b/src/amd/common/ac_nir.h @@ -39,6 +39,14 @@ enum { AC_EXP_FLAG_VALID_MASK = (1 << 2), }; +/* TODO: Remove these once radeonsi gathers shader_info before lowering. */ +#define AC_VECTOR_ARG_FLAG(name, value) (((name) & 0xf) | ((value) << 4)) +#define AC_VECTOR_ARG_UNSET 0 +#define AC_VECTOR_ARG_INTERP_MODE 1 +#define AC_VECTOR_ARG_IS_COLOR 2 +#define AC_VECTOR_ARG_FLAG_GET_NAME(intr) (nir_intrinsic_flags(intr) & 0xf) +#define AC_VECTOR_ARG_FLAG_GET_VALUE(intr) (nir_intrinsic_flags(intr) >> 4) + /* Maps I/O semantics to the actual location used by the lowering pass. */ typedef unsigned (*ac_nir_map_io_driver_location)(unsigned semantic); diff --git a/src/gallium/drivers/radeonsi/si_nir_lower_abi.c b/src/gallium/drivers/radeonsi/si_nir_lower_abi.c index 0a43cd223cc..3e6676ce5cf 100644 --- a/src/gallium/drivers/radeonsi/si_nir_lower_abi.c +++ b/src/gallium/drivers/radeonsi/si_nir_lower_abi.c @@ -637,8 +637,7 @@ static bool lower_intrinsic(nir_builder *b, nir_instr *instr, struct lower_abi_s color[i] = ac_nir_load_arg_at_offset(b, &args->ac, args->color_start, offset++); nir_intrinsic_set_flags(nir_instr_as_intrinsic(color[i]->parent_instr), - SI_VECTOR_ARG_IS_COLOR | - SI_VECTOR_ARG_COLOR_COMPONENT(start + i)); + AC_VECTOR_ARG_FLAG(AC_VECTOR_ARG_IS_COLOR, start + i)); } else { color[i] = nir_undef(b, 1, 32); } diff --git a/src/gallium/drivers/radeonsi/si_shader.h b/src/gallium/drivers/radeonsi/si_shader.h index a96cc3661f8..d7a9ed9129d 100644 --- a/src/gallium/drivers/radeonsi/si_shader.h +++ b/src/gallium/drivers/radeonsi/si_shader.h @@ -139,10 +139,6 @@ struct nir_instr; /* D3D9 behaviour for COLOR0 requires 0001. GL is undefined. */ #define SI_PS_INPUT_CNTL_UNUSED_COLOR0 SI_PS_INPUT_CNTL_0001 -#define SI_VECTOR_ARG_IS_COLOR BITFIELD_BIT(0) -#define SI_VECTOR_ARG_COLOR_COMPONENT(x) (((x) & 0x7) << 1) -#define SI_GET_VECTOR_ARG_COLOR_COMPONENT(x) (((x) >> 1) & 0x7) - /* SGPR user data indices */ enum { diff --git a/src/gallium/drivers/radeonsi/si_shader_info.c b/src/gallium/drivers/radeonsi/si_shader_info.c index 5f3161c5a79..3dea8c75c11 100644 --- a/src/gallium/drivers/radeonsi/si_shader_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_info.c @@ -10,6 +10,7 @@ #include "sid.h" #include "nir.h" #include "aco_interface.h" +#include "ac_nir.h" struct si_shader_profile si_shader_profiles[] = { @@ -468,9 +469,9 @@ static void scan_instruction(const struct nir_shader *nir, struct si_shader_info } case nir_intrinsic_load_vector_arg_amd: /* Non-monolithic lowered PS can have this. We need to record color usage. */ - if (nir_intrinsic_flags(intr) & SI_VECTOR_ARG_IS_COLOR) { + if (AC_VECTOR_ARG_FLAG_GET_NAME(intr) == AC_VECTOR_ARG_IS_COLOR) { /* The channel can be between 0 and 7. */ - unsigned chan = SI_GET_VECTOR_ARG_COLOR_COMPONENT(nir_intrinsic_flags(intr)); + unsigned chan = AC_VECTOR_ARG_FLAG_GET_VALUE(intr); info->colors_read |= BITFIELD_BIT(chan); } break;