From 7033dee54f949b551bd877311acb434593ad0354 Mon Sep 17 00:00:00 2001 From: squidbus <1249084-squidbus@users.noreply.gitlab.freedesktop.org> Date: Sat, 16 May 2026 22:59:36 -0700 Subject: [PATCH] kk: Support device without queue Queue-less devices can be used for compiling pipelines. Reviewed-by: Aitor Camacho Part-of: --- src/kosmickrisp/vulkan/kk_device.c | 22 ++++++++++++++++------ src/kosmickrisp/vulkan/kk_device.h | 1 + src/kosmickrisp/vulkan/kk_wsi.c | 3 +++ 3 files changed, 20 insertions(+), 6 deletions(-) diff --git a/src/kosmickrisp/vulkan/kk_device.c b/src/kosmickrisp/vulkan/kk_device.c index 9ebe8afb387..51ab8d2601e 100644 --- a/src/kosmickrisp/vulkan/kk_device.c +++ b/src/kosmickrisp/vulkan/kk_device.c @@ -221,10 +221,13 @@ kk_CreateDevice(VkPhysicalDevice physicalDevice, if (dev->residency_set.handle == NULL) goto fail_init; - result = - kk_queue_init(dev, &dev->queue, &pCreateInfo->pQueueCreateInfos[0], 0); - if (result != VK_SUCCESS) - goto fail_vab_memory; + if (pCreateInfo->queueCreateInfoCount > 0) { + result = + kk_queue_init(dev, &dev->queue, &pCreateInfo->pQueueCreateInfos[0], 0); + if (result != VK_SUCCESS) + goto fail_vab_memory; + dev->has_queue = true; + } result = kk_device_init_meta(dev); if (result != VK_SUCCESS) @@ -256,7 +259,10 @@ fail_query_table: fail_meta: kk_device_finish_meta(dev); fail_mem_cache: - kk_queue_finish(dev, &dev->queue); + if (dev->has_queue) { + kk_queue_finish(dev, &dev->queue); + dev->has_queue = false; + } fail_vab_memory: mtl_release(dev->residency_set.handle); simple_mtx_destroy(&dev->residency_set.mutex); @@ -295,7 +301,11 @@ kk_DestroyDevice(VkDevice _device, const VkAllocationCallbacks *pAllocator) mtl_release(dev->residency_set.handle); simple_mtx_destroy(&dev->residency_set.mutex); - kk_queue_finish(dev, &dev->queue); + if (dev->has_queue) { + kk_queue_finish(dev, &dev->queue); + dev->has_queue = false; + } + vk_device_finish(&dev->vk); vk_free(&dev->vk.alloc, dev); diff --git a/src/kosmickrisp/vulkan/kk_device.h b/src/kosmickrisp/vulkan/kk_device.h index cc15b049dd7..c84baf0a68c 100644 --- a/src/kosmickrisp/vulkan/kk_device.h +++ b/src/kosmickrisp/vulkan/kk_device.h @@ -93,6 +93,7 @@ struct kk_device { struct kk_precompiled_cache precompiled_cache; + bool has_queue; struct kk_queue queue; struct vk_meta_device meta; diff --git a/src/kosmickrisp/vulkan/kk_wsi.c b/src/kosmickrisp/vulkan/kk_wsi.c index 5912e151ef7..8114dfce547 100644 --- a/src/kosmickrisp/vulkan/kk_wsi.c +++ b/src/kosmickrisp/vulkan/kk_wsi.c @@ -80,6 +80,9 @@ kk_get_blit_queue(VkDevice device) { /* We only have one queue, so just return that one. */ VK_FROM_HANDLE(kk_device, dev, device); + if (!dev->has_queue) + return NULL; + return &dev->queue.vk; }