diff options
Diffstat (limited to 'layers/core_validation.cpp')
| -rw-r--r-- | layers/core_validation.cpp | 18 |
1 files changed, 9 insertions, 9 deletions
diff --git a/layers/core_validation.cpp b/layers/core_validation.cpp index ab978360..f1f2f5fb 100644 --- a/layers/core_validation.cpp +++ b/layers/core_validation.cpp @@ -4244,14 +4244,14 @@ static void decrementResources(layer_data *my_data, VkCommandBuffer cmdBuffer) { // decrementResources for all priorFences and cmdBuffers associated with fence. static bool decrementResources(layer_data *my_data, uint32_t fenceCount, const VkFence *pFences) { bool skip_call = false; - std::vector<VkFence> fences; + std::vector<std::pair<VkFence, FENCE_NODE *>> fence_pairs; for (uint32_t i = 0; i < fenceCount; ++i) { auto fence_data = my_data->fenceMap.find(pFences[i]); if (fence_data == my_data->fenceMap.end() || !fence_data->second.needsSignaled) return skip_call; fence_data->second.needsSignaled = false; if (fence_data->second.in_use.load()) { - fences.push_back(pFences[i]); + fence_pairs.push_back(std::make_pair(fence_data->first, &fence_data->second)); fence_data->second.in_use.fetch_sub(1); } decrementResources(my_data, static_cast<uint32_t>(fence_data->second.priorFences.size()), @@ -4264,13 +4264,13 @@ static bool decrementResources(layer_data *my_data, uint32_t fenceCount, const V fence_data->second.cmdBuffers.clear(); fence_data->second.priorFences.clear(); } - for (auto fence : fences) { - for (auto queue_data : my_data->queueMap) { - auto last_fence_data = std::find(queue_data.second.lastFences.begin(), queue_data.second.lastFences.end(), fence); - if (last_fence_data != queue_data.second.lastFences.end()) { - queue_data.second.lastFences.erase(last_fence_data); - break; - } + for (auto fence_pair : fence_pairs) { + auto queue_pair = my_data->queueMap.find(fence_pair.second->queue); + if (queue_pair != my_data->queueMap.end()) { + auto last_fence_data = + std::find(queue_pair->second.lastFences.begin(), queue_pair->second.lastFences.end(), fence_pair.first); + if (last_fence_data != queue_pair->second.lastFences.end()) + queue_pair->second.lastFences.erase(last_fence_data); } } return skip_call; |
