kk: Support device without queue

Queue-less devices can be used for compiling pipelines.

Reviewed-by: Aitor Camacho <aitor@lunarg.com>
Part-of: <https://gitlab.freedesktop.org/mesa/mesa/-/merge_requests/41663>
This commit is contained in:
squidbus 2026-05-16 22:59:36 -07:00 committed by Marge Bot
parent e503f8399a
commit 7033dee54f
3 changed files with 20 additions and 6 deletions

View file

@ -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);

View file

@ -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;

View file

@ -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;
}