radeonsi: init spi_ps_input_addr for part mode ps

Reviewed-by: Marek Olšák <marek.olsak@amd.com>
Signed-off-by: Qiang Yu <yuq825@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/24989>
This commit is contained in:
Qiang Yu 2023-08-06 17:19:46 +08:00
parent c77a57b981
commit c4643477cd
3 changed files with 26 additions and 10 deletions

View file

@ -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

View file

@ -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 {

View file

@ -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);
}