From c1dbfc20fcfd18ea4b82d56d054cc2fb640bfe21 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sat, 25 Apr 2026 17:26:03 -0400 Subject: [PATCH] radeonsi: move SI_SPI_PS_INPUT_ADDR_FOR_PROLOG into a helper function it will be dynamic --- .../drivers/radeonsi/si_shader_internal.h | 14 +------------- src/gallium/drivers/radeonsi/si_shader_llvm.c | 3 ++- .../drivers/radeonsi/si_shader_variant_info.c | 19 ++++++++++++++++++- 3 files changed, 21 insertions(+), 15 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index 7b777b29019..6aff758f497 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -9,19 +9,6 @@ #include "si_shader.h" -#define SI_SPI_PS_INPUT_ADDR_FOR_PROLOG ( \ - S_0286D0_PERSP_SAMPLE_ENA(1) | \ - S_0286D0_PERSP_CENTER_ENA(1) | \ - S_0286D0_PERSP_CENTROID_ENA(1) | \ - S_0286D0_LINEAR_SAMPLE_ENA(1) | \ - S_0286D0_LINEAR_CENTER_ENA(1) | \ - S_0286D0_LINEAR_CENTROID_ENA(1) | \ - S_0286D0_LINE_STIPPLE_TEX_ENA(1) | \ - S_0286D0_FRONT_FACE_ENA(1) | \ - S_0286D0_ANCILLARY_ENA(1) | \ - S_0286D0_SAMPLE_COVERAGE_ENA(1) | \ - S_0286D0_POS_FIXED_PT_ENA(1)) - struct util_debug_callback; struct si_shader_args { @@ -159,6 +146,7 @@ void si_get_late_shader_variant_info(struct si_shader *shader, struct si_shader_ nir_shader *nir); void si_set_spi_ps_input_config_for_separate_prolog(struct si_shader *shader); void si_fixup_spi_ps_input_config(struct si_shader *shader); +unsigned si_get_spi_ps_input_addr_for_prolog(struct si_shader_selector *sel); void si_shader_update_spi_shader_formats(struct si_shader *shader, nir_shader *nir); #endif diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index 230f704cb1c..08c5c0e2c16 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -191,7 +191,8 @@ static void si_llvm_create_main_func(struct si_shader_context *ctx) /* Reserve register locations for VGPR inputs the PS prolog may need. */ if (ctx->stage == MESA_SHADER_FRAGMENT && !ctx->shader->is_monolithic) { ac_llvm_add_target_dep_function_attr( - ctx->main_fn.value, "InitialPSInputAddr", SI_SPI_PS_INPUT_ADDR_FOR_PROLOG); + ctx->main_fn.value, "InitialPSInputAddr", + si_get_spi_ps_input_addr_for_prolog(shader->selector)); } } diff --git a/src/gallium/drivers/radeonsi/si_shader_variant_info.c b/src/gallium/drivers/radeonsi/si_shader_variant_info.c index 6ad94fcf1ba..cf0bc4ef10d 100644 --- a/src/gallium/drivers/radeonsi/si_shader_variant_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_variant_info.c @@ -390,7 +390,7 @@ void si_get_shader_variant_info(struct si_shader *shader, * Reserve register locations for VGPR inputs the PS prolog may need. */ shader->config.spi_ps_input_addr = shader->config.spi_ps_input_ena | - SI_SPI_PS_INPUT_ADDR_FOR_PROLOG; + si_get_spi_ps_input_addr_for_prolog(shader->selector); } } @@ -607,3 +607,20 @@ void si_fixup_spi_ps_input_config(struct si_shader *shader) shader->config.spi_ps_input_ena |= S_0286CC_PERSP_SAMPLE_ENA(1); } } + +unsigned si_get_spi_ps_input_addr_for_prolog(struct si_shader_selector *sel) +{ + unsigned spi_ps_input_addr = S_0286D0_PERSP_SAMPLE_ENA(1) | + S_0286D0_PERSP_CENTER_ENA(1) | + S_0286D0_PERSP_CENTROID_ENA(1) | + S_0286D0_LINEAR_SAMPLE_ENA(1) | + S_0286D0_LINEAR_CENTER_ENA(1) | + S_0286D0_LINEAR_CENTROID_ENA(1) | + S_0286D0_LINE_STIPPLE_TEX_ENA(1) | + S_0286D0_FRONT_FACE_ENA(1) | + S_0286D0_ANCILLARY_ENA(1) | + S_0286D0_SAMPLE_COVERAGE_ENA(1) | + S_0286D0_POS_FIXED_PT_ENA(1); + + return spi_ps_input_addr; +}