Module: Mesa
Branch: staging/23.3
Commit: 0960a0c5dd4d4520369a8ea26b56b7ce717ab745
URL:    
http://cgit.freedesktop.org/mesa/mesa/commit/?id=0960a0c5dd4d4520369a8ea26b56b7ce717ab745

Author: Samuel Pitoiset <[email protected]>
Date:   Tue Nov 14 08:35:58 2023 +0100

radv: fix registering queues for RGP with compute only

This crashes if the graphics queue isn't created.

Fixes: 930e77e9036 ("radv/sqtt: add support for queue info")
Closes: https://gitlab.freedesktop.org/mesa/mesa/-/issues/10136
Signed-off-by: Samuel Pitoiset <[email protected]>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26183>
(cherry picked from commit 627d59344381907bd13eeb48a6737bd2561e64d8)

---

 .pick_status.json          | 2 +-
 src/amd/vulkan/radv_sqtt.c | 8 ++++++--
 2 files changed, 7 insertions(+), 3 deletions(-)

diff --git a/.pick_status.json b/.pick_status.json
index fde4e9acd3d..33f11b60df2 100644
--- a/.pick_status.json
+++ b/.pick_status.json
@@ -174,7 +174,7 @@
         "description": "radv: fix registering queues for RGP with compute 
only",
         "nominated": true,
         "nomination_type": 1,
-        "resolution": 0,
+        "resolution": 1,
         "main_sha": null,
         "because_sha": "930e77e9036a75196e080cb4b780c47104bf0ef2",
         "notes": null
diff --git a/src/amd/vulkan/radv_sqtt.c b/src/amd/vulkan/radv_sqtt.c
index 6c3fa93861a..979b9f9d845 100644
--- a/src/amd/vulkan/radv_sqtt.c
+++ b/src/amd/vulkan/radv_sqtt.c
@@ -579,7 +579,9 @@ radv_unregister_queue(struct radv_device *device, struct 
radv_queue *queue)
 static void
 radv_register_queues(struct radv_device *device, struct ac_sqtt *sqtt)
 {
-   radv_register_queue(device, &device->queues[RADV_QUEUE_GENERAL][0]);
+   if (device->queue_count[RADV_QUEUE_GENERAL] == 1)
+      radv_register_queue(device, &device->queues[RADV_QUEUE_GENERAL][0]);
+
    for (uint32_t i = 0; i < device->queue_count[RADV_QUEUE_COMPUTE]; i++)
       radv_register_queue(device, &device->queues[RADV_QUEUE_COMPUTE][i]);
 }
@@ -587,7 +589,9 @@ radv_register_queues(struct radv_device *device, struct 
ac_sqtt *sqtt)
 static void
 radv_unregister_queues(struct radv_device *device, struct ac_sqtt *sqtt)
 {
-   radv_unregister_queue(device, &device->queues[RADV_QUEUE_GENERAL][0]);
+   if (device->queue_count[RADV_QUEUE_GENERAL] == 1)
+      radv_unregister_queue(device, &device->queues[RADV_QUEUE_GENERAL][0]);
+
    for (uint32_t i = 0; i < device->queue_count[RADV_QUEUE_COMPUTE]; i++)
       radv_unregister_queue(device, &device->queues[RADV_QUEUE_COMPUTE][i]);
 }

Reply via email to