diff --git a/src/gallium/drivers/radeonsi/si_shader_args.c b/src/gallium/drivers/radeonsi/si_shader_args.c index eb102699495..b5754cb48da 100644 --- a/src/gallium/drivers/radeonsi/si_shader_args.c +++ b/src/gallium/drivers/radeonsi/si_shader_args.c @@ -671,7 +671,7 @@ void si_get_ps_prolog_args(struct si_shader_args *args, ac_add_arg(&args->ac, AC_ARG_VGPR, 2, AC_ARG_VALUE, &args->ac.linear_sample); ac_add_arg(&args->ac, AC_ARG_VGPR, 2, AC_ARG_VALUE, &args->ac.linear_center); ac_add_arg(&args->ac, AC_ARG_VGPR, 2, AC_ARG_VALUE, &args->ac.linear_centroid); - /* skip LINE_STIPPLE_TEX */ + ac_add_arg(&args->ac, AC_ARG_VGPR, 1, AC_ARG_VALUE, NULL); /* LINE_STIPPLE_TEX */ /* POS_X|Y|Z|W_FLOAT */ u_foreach_bit(i, key->ps_prolog.fragcoord_usage_mask) diff --git a/src/gallium/drivers/radeonsi/si_shader_internal.h b/src/gallium/drivers/radeonsi/si_shader_internal.h index c09b0ec884e..410ac243ac3 100644 --- a/src/gallium/drivers/radeonsi/si_shader_internal.h +++ b/src/gallium/drivers/radeonsi/si_shader_internal.h @@ -16,6 +16,7 @@ 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) | \ diff --git a/src/gallium/drivers/radeonsi/si_shader_variant_info.c b/src/gallium/drivers/radeonsi/si_shader_variant_info.c index f848814e5e3..9dcc05a62b6 100644 --- a/src/gallium/drivers/radeonsi/si_shader_variant_info.c +++ b/src/gallium/drivers/radeonsi/si_shader_variant_info.c @@ -423,7 +423,15 @@ void si_fixup_spi_ps_input_config(struct si_shader *shader) shader->config.spi_ps_input_ena |= S_0286CC_PERSP_SAMPLE_ENA(1); } - /* At least one pair of interpolation weights must be enabled. */ - if (!(shader->config.spi_ps_input_ena & 0x7f)) - shader->config.spi_ps_input_ena |= S_0286CC_PERSP_SAMPLE_ENA(1); + /* At least one pair of barycentric coordinates or LINE_STIPPLE_TEX_ENA must be enabled. + * Since LINE_STIPPLE_TEX_ENA is the only one that loads only 1 VGPR, use it. + */ + if (!(shader->config.spi_ps_input_ena & 0x7f) && + !G_0286CC_LINE_STIPPLE_TEX_ENA(shader->config.spi_ps_input_ena)) { + /* LLVM sets PERSP_SAMPLE_ENA in this case, so we have to do the same. */ + if (shader->selector->info.base.use_aco_amd) + shader->config.spi_ps_input_ena |= S_0286CC_LINE_STIPPLE_TEX_ENA(1); + else + shader->config.spi_ps_input_ena |= S_0286CC_PERSP_SAMPLE_ENA(1); + } }