radv: fix registering queues for RGP with compute only
authorSamuel Pitoiset <samuel.pitoiset@gmail.com>
Tue, 14 Nov 2023 07:35:58 +0000 (08:35 +0100)
committerEric Engestrom <eric@engestrom.ch>
Wed, 15 Nov 2023 21:21:24 +0000 (21:21 +0000)
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 <samuel.pitoiset@gmail.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/26183>
(cherry picked from commit 627d59344381907bd13eeb48a6737bd2561e64d8)

.pick_status.json
src/amd/vulkan/radv_sqtt.c

index fde4e9a..33f11b6 100644 (file)
         "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
index 6c3fa93..979b9f9 100644 (file)
@@ -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]);
 }