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.cpp18
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;