diff options
| author | Mark Lobodzinski <mark@lunarg.com> | 2016-03-29 09:49:15 -0600 |
|---|---|---|
| committer | Tobin Ehlis <tobine@google.com> | 2016-03-30 06:49:03 -0600 |
| commit | 5404ef44c80ee9804e5493f475794a34f5819ef7 (patch) | |
| tree | 9903fd788227120c911d3e6c641a6b11f01d21e9 /layers/core_validation.cpp | |
| parent | 0bbed4a16c5b764409cd22dc2e7f70cfe510ee78 (diff) | |
| download | usermoji-5404ef44c80ee9804e5493f475794a34f5819ef7.tar.xz | |
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
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 21 |
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); } |
