anv/device: GetDeviceQueue2 should only return queues with matching flags
authorIago Toral Quiroga <itoral@igalia.com>
Tue, 6 Feb 2018 09:06:30 +0000 (10:06 +0100)
committerJason Ekstrand <jason.ekstrand@intel.com>
Wed, 7 Mar 2018 20:13:47 +0000 (12:13 -0800)
From the Vulkan 1.1 spec, VkDeviceQueueInfo2 structure:

   "The queue returned by vkGetDeviceQueue2 must have the same flags value
    from this structure as that used at device creation time in a
    VkDeviceQueueCreateInfo instance. If no matching flags were specified
    at device creation time then pQueue will return VK_NULL_HANDLE."

For us this means no flags at all since we don't support any.

Reviewed-by: Jason Ekstrand <jason@jlekstrand.net>
src/intel/vulkan/anv_device.c
src/intel/vulkan/anv_private.h

index 7d63168b12d270a13ea2025bcca6c2c74341a5e0..bccb669e4f2f05a570616375842a09dfd7e98eb0 100644 (file)
@@ -1273,6 +1273,7 @@ anv_queue_init(struct anv_device *device, struct anv_queue *queue)
    queue->_loader_data.loaderMagic = ICD_LOADER_MAGIC;
    queue->device = device;
    queue->pool = &device->surface_state_pool;
+   queue->flags = 0;
 }
 
 static void
@@ -1755,7 +1756,10 @@ void anv_GetDeviceQueue2(
 
    assert(pQueueInfo->queueIndex == 0);
 
-   *pQueue = anv_queue_to_handle(&device->queue);
+   if (pQueueInfo->flags == device->queue.flags)
+      *pQueue = anv_queue_to_handle(&device->queue);
+   else
+      *pQueue = NULL;
 }
 
 VkResult
index 34e6159101e921e4c745e97b2053033400bc4791..ee533581ab42550d2804f80d5ddfe2d1fab4ea57 100644 (file)
@@ -839,6 +839,8 @@ struct anv_queue {
     struct anv_device *                         device;
 
     struct anv_state_pool *                     pool;
+
+    VkDeviceQueueCreateFlags                    flags;
 };
 
 struct anv_pipeline_cache {