From 5404ef44c80ee9804e5493f475794a34f5819ef7 Mon Sep 17 00:00:00 2001 From: Mark Lobodzinski Date: Tue, 29 Mar 2016 09:49:15 -0600 Subject: layers: LX446, Allow GetDeviceQueue to be called multiple times Calling this API more than once on the same queue hoses the fence validation. Also switched queues container from vector to unordered set. Change-Id: I524347fd11d3b30a66004cf62937d0446e70df22 --- layers/core_validation.cpp | 21 +++++++++++++-------- 1 file changed, 13 insertions(+), 8 deletions(-) (limited to 'layers/core_validation.cpp') 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 queues; // all queues under given device + unordered_set queues; // all queues under given device // Global set of all cmdBuffers that are inFlight on this device unordered_set 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); } -- cgit v1.2.3