aboutsummaryrefslogtreecommitdiff
path: root/layers/core_validation.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'layers/core_validation.cpp')
-rw-r--r--layers/core_validation.cpp21
1 files changed, 13 insertions, 8 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp
index 4b114711..bccca6d3 100644
--- a/layers/core_validation.cpp
+++ b/layers/core_validation.cpp
@@ -117,7 +117,7 @@ struct layer_data {
// MTMERGESOURCE - End of MT stuff
#endif
devExts device_extensions;
- vector<VkQueue> queues; // all queues under given device
+ unordered_set<VkQueue> queues; // all queues under given device
// Global set of all cmdBuffers that are inFlight on this device
unordered_set<VkCommandBuffer> globalInFlightCmdBuffers;
// Layer specific data
@@ -5613,18 +5613,23 @@ VK_LAYER_EXPORT VKAPI_ATTR VkResult VKAPI_CALL vkGetFenceStatus(VkDevice device,
return result;
}
-VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL
-vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex, VkQueue *pQueue) {
+VK_LAYER_EXPORT VKAPI_ATTR void VKAPI_CALL vkGetDeviceQueue(VkDevice device, uint32_t queueFamilyIndex, uint32_t queueIndex,
+ VkQueue *pQueue) {
layer_data *dev_data = get_my_data_ptr(get_dispatch_key(device), layer_data_map);
dev_data->device_dispatch_table->GetDeviceQueue(device, queueFamilyIndex, queueIndex, pQueue);
loader_platform_thread_lock_mutex(&globalLock);
- dev_data->queues.push_back(*pQueue);
- QUEUE_NODE *pQNode = &dev_data->queueMap[*pQueue];
- pQNode->device = device;
+
+ // Add queue to tracking set only if it is new
+ auto result = dev_data->queues.emplace(*pQueue);
+ if (result.second == true) {
+ QUEUE_NODE *pQNode = &dev_data->queueMap[*pQueue];
+ pQNode->device = device;
#if MTMERGESOURCE
- pQNode->lastRetiredId = 0;
- pQNode->lastSubmittedId = 0;
+ pQNode->lastRetiredId = 0;
+ pQNode->lastSubmittedId = 0;
#endif
+ }
+
loader_platform_thread_unlock_mutex(&globalLock);
}