From 31424748ed3e7cdecb1c05658b34c29a6d5eceaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Marek=20Ol=C5=A1=C3=A1k?= Date: Sun, 28 Dec 2025 19:41:51 -0500 Subject: [PATCH] radeonsi: fix incorrect PS shader key with sample shading discovered when writing a sample shading test Fixes: 65398d571be888bfb6 - radeonsi: ignore pipe_rasterizer_state::force_persample_interp Reviewed-by: Qiang Yu Acked-by: Pierre-Eric Pelloux-Prayer (cherry picked from commit cf333ae9a2be4d6368dc9b7b85b1ee50f71f6850) Part-of: --- .pick_status.json | 2 +- src/gallium/drivers/radeonsi/si_state_shaders.cpp | 7 ++----- 2 files changed, 3 insertions(+), 6 deletions(-) diff --git a/.pick_status.json b/.pick_status.json index 822f448f95f..5f4e8fd50b0 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -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 diff --git a/src/gallium/drivers/radeonsi/si_state_shaders.cpp b/src/gallium/drivers/radeonsi/si_state_shaders.cpp index ca00f4ce2e8..d92f7277cd4 100644 --- a/src/gallium/drivers/radeonsi/si_state_shaders.cpp +++ b/src/gallium/drivers/radeonsi/si_state_shaders.cpp @@ -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;