Module: Mesa Branch: main Commit: c4643477cda66f59780469385f50aabb303a3822 URL: http://cgit.freedesktop.org/mesa/mesa/commit/?id=c4643477cda66f59780469385f50aabb303a3822
Author: Qiang Yu <[email protected]> Date: Sun Aug 6 17:19:46 2023 +0800 radeonsi: init spi_ps_input_addr for part mode ps Reviewed-by: Marek Olšák <[email protected]> Signed-off-by: Qiang Yu <[email protected]> Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24989> --- src/gallium/drivers/radeonsi/si_shader.c | 17 +++++++++++++---- src/gallium/drivers/radeonsi/si_shader_internal.h | 12 ++++++++++++ src/gallium/drivers/radeonsi/si_shader_llvm.c | 7 +------ 3 files changed, 26 insertions(+), 10 deletions(-) diff --git a/src/gallium/drivers/radeonsi/si_shader.c b/src/gallium/drivers/radeonsi/si_shader.c index 71f101d5ecc..5d53a6b3cd3 100644 --- a/src/gallium/drivers/radeonsi/si_shader.c +++ b/src/gallium/drivers/radeonsi/si_shader.c @@ -2662,8 +2662,6 @@ static void si_fixup_spi_ps_input_config(struct si_shader *shader) static void si_set_spi_ps_input_config(struct si_shader *shader) { - assert(shader->is_monolithic); - const struct si_shader_selector *sel = shader->selector; const struct si_shader_info *info = &sel->info; const union si_shader_key *key = &shader->key; @@ -2705,8 +2703,19 @@ si_set_spi_ps_input_config(struct si_shader *shader) if (key->ps.mono.point_smoothing) shader->config.spi_ps_input_ena |= S_0286CC_PERSP_CENTER_ENA(1); - si_fixup_spi_ps_input_config(shader); - shader->config.spi_ps_input_addr = shader->config.spi_ps_input_ena; + if (shader->is_monolithic) { + si_fixup_spi_ps_input_config(shader); + shader->config.spi_ps_input_addr = shader->config.spi_ps_input_ena; + } else { + /* Part mode will call si_fixup_spi_ps_input_config() when combining multi + * shader part in si_shader_select_ps_parts(). + * + * 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; + } } static void diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index d4d201092c5..8f5a9422341 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -12,6 +12,18 @@ #include "ac_llvm_build.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_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 { diff --git a/src/gallium/drivers/radeonsi/si_shader_llvm.c b/src/gallium/drivers/radeonsi/si_shader_llvm.c index 83a106cfb9f..d6b72a066ce 100644 --- a/src/gallium/drivers/radeonsi/si_shader_llvm.c +++ b/src/gallium/drivers/radeonsi/si_shader_llvm.c @@ -197,12 +197,7 @@ 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", - 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_FRONT_FACE_ENA(1) | S_0286D0_ANCILLARY_ENA(1) | - S_0286D0_SAMPLE_COVERAGE_ENA(1) | S_0286D0_POS_FIXED_PT_ENA(1)); + ctx->main_fn.value, "InitialPSInputAddr", SI_SPI_PS_INPUT_ADDR_FOR_PROLOG); }
