radeonsi: fix incorrect PS shader key with sample shading

discovered when writing a sample shading test

Fixes: 65398d571b - radeonsi: ignore pipe_rasterizer_state::force_persample_interp

Reviewed-by: Qiang Yu <yuq825@gmail.com>
Acked-by: Pierre-Eric Pelloux-Prayer <pierre-eric.pelloux-prayer@amd.com>
(cherry picked from commit cf333ae9a2)

Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/39462>
This commit is contained in:
Marek Olšák 2025-12-28 19:41:51 -05:00 committed by Dylan Baker
parent c1b4d9740c
commit 31424748ed
2 changed files with 3 additions and 6 deletions

View file

@ -314,7 +314,7 @@
"description": "radeonsi: fix incorrect PS shader key with sample shading",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "65398d571be888bfb6dc1b1db674279e33b30c32",
"notes": null

View file

@ -2763,8 +2763,8 @@ void si_ps_key_update_framebuffer_rasterizer_sample_shading(struct si_context *s
bool uses_persp_sample = sel->info.uses_persp_sample ||
(!rs->flatshade && sel->info.uses_persp_sample_color);
if (!sel->info.base.fs.uses_sample_shading && rs->multisample_enable &&
sctx->framebuffer.nr_samples > 1 && sctx->ps_iter_samples > 1) {
if (rs->multisample_enable && sctx->framebuffer.nr_samples > 1 &&
(sel->info.base.fs.uses_sample_shading || sctx->ps_iter_samples > 1)) {
key->ps.part.prolog.force_persp_sample_interp =
uses_persp_center || uses_persp_centroid;
@ -2783,9 +2783,6 @@ void si_ps_key_update_framebuffer_rasterizer_sample_shading(struct si_context *s
key->ps.mono.force_mono = sel->info.uses_interp_at_offset || sel->info.uses_interp_at_sample;
key->ps.mono.interpolate_at_sample_force_center = 0;
} else if (rs->multisample_enable && sctx->framebuffer.nr_samples > 1) {
/* Note that sample shading is possible here. If it's enabled, all barycentrics are
* already set to "sample" except at_offset/at_sample.
*/
key->ps.part.prolog.force_persp_sample_interp = 0;
key->ps.part.prolog.force_linear_sample_interp = 0;
key->ps.part.prolog.force_persp_center_interp = 0;