radeonsi: move SI_SPI_PS_INPUT_ADDR_FOR_PROLOG into a helper function

it will be dynamic
This commit is contained in:
Marek Olšák 2026-04-25 17:26:03 -04:00
parent 6fdfb15456
commit c1dbfc20fc
3 changed files with 21 additions and 15 deletions

View file

@ -9,19 +9,6 @@
#include "si_shader.h" #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 util_debug_callback;
struct si_shader_args { 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); nir_shader *nir);
void si_set_spi_ps_input_config_for_separate_prolog(struct si_shader *shader); 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); 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); void si_shader_update_spi_shader_formats(struct si_shader *shader, nir_shader *nir);
#endif #endif

View file

@ -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. */ /* Reserve register locations for VGPR inputs the PS prolog may need. */
if (ctx->stage == MESA_SHADER_FRAGMENT && !ctx->shader->is_monolithic) { if (ctx->stage == MESA_SHADER_FRAGMENT && !ctx->shader->is_monolithic) {
ac_llvm_add_target_dep_function_attr( 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));
} }
} }

View file

@ -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. * Reserve register locations for VGPR inputs the PS prolog may need.
*/ */
shader->config.spi_ps_input_addr = shader->config.spi_ps_input_ena | 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); 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;
}