panvk/csf: Fix register overlap in issue_fragment_jobs()

add_val is a 64-bit register, meaning release_sz points to the high word
of add_val, which leads to corruptions of the value added to the sync
object when simul_use=true.

Fixes: 5544d39f44 ("panvk: Add a CSF backend for panvk_queue/cmd_buffer")
Signed-off-by: Boris Brezillon <boris.brezillon@collabora.com>
Reviewed-by: Lars-Ivar Hesselberg Simonsen <lars-ivar.simonsen@arm.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/32350>
(cherry picked from commit 00e232d5f0)

Conflicts:
	src/panfrost/vulkan/csf/panvk_vX_cmd_draw.c
This commit is contained in:
Boris Brezillon 2024-11-26 12:00:02 +01:00 committed by Dylan Baker
parent 26429556c5
commit f20caba05f
2 changed files with 3 additions and 2 deletions

View file

@ -84,7 +84,7 @@
"description": "panvk/csf: Fix register overlap in issue_fragment_jobs()",
"nominated": true,
"nomination_type": 2,
"resolution": 0,
"resolution": 1,
"main_sha": null,
"because_sha": "5544d39f4420da88c53aaf8dd48d86ac92bd0eaa",
"notes": null

View file

@ -2480,8 +2480,9 @@ issue_fragment_jobs(struct panvk_cmd_buffer *cmdbuf)
struct cs_index iter_sb = cs_scratch_reg32(b, 2);
struct cs_index cmp_scratch = cs_scratch_reg32(b, 3);
struct cs_index add_val = cs_scratch_reg64(b, 4);
struct cs_index release_sz = cs_scratch_reg32(b, 5);
struct cs_index ringbuf_sync_addr = cs_scratch_reg64(b, 6);
struct cs_index release_sz = cs_scratch_reg32(b, 8);
struct cs_index completed = cs_scratch_reg_tuple(b, 10, 4);
struct cs_index completed_top = cs_scratch_reg64(b, 10);
struct cs_index completed_bottom = cs_scratch_reg64(b, 12);