From 9d31e05b8a8981396a7b49be5355275d5417c3a7 Mon Sep 17 00:00:00 2001 From: Karmjit Mahil Date: Thu, 15 Jun 2023 15:47:38 +0100 Subject: [PATCH] pvr: Fix seg fault on empty descriptor set Vulkan allows empty descriptor sets to be created. When we setup the descriptor set addresses table we fill in the address of the `bo` for each valid/currently bound desc set. For empty desc sets there is no `bo` which was causing a seg fault. Now skip them, leaving their address set to `~0`. Reported-by: Simon Perretta Signed-off-by: Karmjit Mahil Reviewed-by: Frank Binns Fixes: ce67f5ac944 ("pvr: Write descriptor set addrs table dev addr into shareds") Part-of: (cherry picked from commit 822dc384b1364a4a2a67c68a20a00bf324e40380) --- .pick_status.json | 2 +- src/imagination/vulkan/pvr_cmd_buffer.c | 4 ++++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/.pick_status.json b/.pick_status.json index 816eb80c914..22c4cf03740 100644 --- a/.pick_status.json +++ b/.pick_status.json @@ -1939,7 +1939,7 @@ "description": "pvr: Fix seg fault on empty descriptor set", "nominated": true, "nomination_type": 1, - "resolution": 0, + "resolution": 1, "main_sha": null, "because_sha": "ce67f5ac944bdc6ebf27e3b115706bec5b63f002" }, diff --git a/src/imagination/vulkan/pvr_cmd_buffer.c b/src/imagination/vulkan/pvr_cmd_buffer.c index 7a01b544711..72c5da861ae 100644 --- a/src/imagination/vulkan/pvr_cmd_buffer.c +++ b/src/imagination/vulkan/pvr_cmd_buffer.c @@ -3571,6 +3571,10 @@ pvr_cmd_buffer_upload_desc_set_table(struct pvr_cmd_buffer *const cmd_buffer, desc_set = desc_state->descriptor_sets[set]; + /* TODO: Is it better if we don't set the valid_mask for empty sets? */ + if (desc_set->layout->descriptor_count == 0) + continue; + if (desc_set->layout->dynamic_buffer_count > 0) { struct pvr_bo *new_desc_set_bo;