From 717e8a8cafd5270089b4d3bfce02634eed7f0429 Mon Sep 17 00:00:00 2001 From: Jose Maria Casanova Crespo Date: Sun, 19 Oct 2025 23:04:17 +0200 Subject: [PATCH] v3d: mark FRAG_RESULT_COLOR as output_written on SAND blits FS With the introduction of "v3d: Add support for 16bit normalised formats" https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/35820 nir_lower_fragcolor is always called if shaders outputs_written shows that FRAG_RESULT_COLOR is used. But on SAND8/30 blit fragment shaders although the FRAG_RESULT_COLOR is used, it was not marked as output_written so the lowering was not applied. Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/14141 Fixes: ee48e81b26e ("v3d: Always lower frag color") Reviewed-by: Iago Toral Quiroga (cherry picked from commit a131530dd14b3def7c67496c2b62ccc04c70d49e) Part-of: --- .pick_status.json | 2 +- src/gallium/drivers/v3d/v3d_blit.c | 2 ++ 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index b4233f5cf1d..8490deda4c7 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1574,7 +1574,7 @@ "description": "v3d: mark FRAG_RESULT_COLOR as output_written on SAND blits FS", "nominated": true, "nomination_type": 2, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "ee48e81b26e4293e9dae9834b892839dd2f236fa", "notes": null diff --git a/src/gallium/drivers/v3d/v3d_blit.c b/src/gallium/drivers/v3d/v3d_blit.c index e3100b77cd8..7a054d71d9d 100644 --- a/src/gallium/drivers/v3d/v3d_blit.c +++ b/src/gallium/drivers/v3d/v3d_blit.c @@ -690,6 +690,7 @@ v3d_get_sand8_fs(struct pipe_context *pctx, int cpp) nir_variable_create(b.shader, nir_var_shader_out, vec4, "f_color"); color_out->data.location = FRAG_RESULT_COLOR; + b.shader->info.outputs_written |= BITFIELD_BIT(FRAG_RESULT_COLOR); nir_variable *pos_in = nir_variable_create(b.shader, nir_var_shader_in, vec4, "pos"); @@ -998,6 +999,7 @@ v3d_get_sand30_fs(struct pipe_context *pctx) nir_var_shader_out, glsl_uvec4, "f_color"); color_out->data.location = FRAG_RESULT_COLOR; + b.shader->info.outputs_written |= BITFIELD_BIT(FRAG_RESULT_COLOR); nir_variable *pos_in = nir_variable_create(b.shader, nir_var_shader_in, vec4, "pos");