summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorIago Toral Quiroga <[email protected]>2018-02-06 10:06:30 +0100
committerJason Ekstrand <[email protected]>2018-03-07 12:13:47 -0800
commitb262f17b159141fb21c60971d21b884dcd226152 (patch)
tree92d18b3acaf3a6750b8ab4d02322f61eba575d04
parent9c8b40001dde93afe613777ab3d141b965fd47f9 (diff)
anv/device: GetDeviceQueue2 should only return queues with matching flags
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 <[email protected]>
-rw-r--r--src/intel/vulkan/anv_device.c6
-rw-r--r--src/intel/vulkan/anv_private.h2
2 files changed, 7 insertions, 1 deletions
diff --git a/src/intel/vulkan/anv_device.c b/src/intel/vulkan/anv_device.c
index 7d63168b12d..bccb669e4f2 100644
--- a/src/intel/vulkan/anv_device.c
+++ b/src/intel/vulkan/anv_device.c
@@ -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
diff --git a/src/intel/vulkan/anv_private.h b/src/intel/vulkan/anv_private.h
index 34e6159101e..ee533581ab4 100644
--- a/src/intel/vulkan/anv_private.h
+++ b/src/intel/vulkan/anv_private.h
@@ -839,6 +839,8 @@ struct anv_queue {
struct anv_device * device;
struct anv_state_pool * pool;
+
+ VkDeviceQueueCreateFlags flags;
};
struct anv_pipeline_cache {