Quick adjustments on the tickframe buffer destruction

This commit is contained in:
CamilleLaVey
2026-09-06 17:56:46 -04:00
parent 76b1d2b517
commit 5f758e6d6d
2 changed files with 13 additions and 5 deletions
@@ -213,7 +213,8 @@ MultiRangeRef MultiRangeBufferCache::Get(const Device& device, Scheduler& schedu
const u64 geometry = HashSources(sources);
const u64 content = HashContent(sources);
const auto it = entries.find(key);
if (it != entries.end() && it->second.geometry == geometry && it->second.size == total) {
if (it != entries.end() && !it->second.dead && it->second.geometry == geometry &&
it->second.size == total) {
Entry& entry = it->second;
entry.frame = frame_tick;
entry.gpu_tick = scheduler.CurrentTick();
@@ -320,11 +321,17 @@ void MultiRangeBufferCache::DropOwner(Scheduler& scheduler, VkBuffer owner) {
break;
}
}
if (owned && RetireEntry(scheduler, entry)) {
it = entries.erase(it);
} else {
if (!owned) {
++it;
continue;
}
if (RetireEntry(scheduler, entry)) {
it = entries.erase(it);
continue;
}
entry.dead = true;
entry.owners.clear();
++it;
}
}
@@ -346,7 +353,7 @@ void MultiRangeBufferCache::TickFrame(Scheduler& scheduler) {
Entry& entry = it->second;
const bool expired =
frame_tick - entry.frame > FRAMES_TO_LIVE && scheduler.IsFree(entry.gpu_tick);
if (expired && RetireEntry(scheduler, entry)) {
if ((expired || entry.dead) && RetireEntry(scheduler, entry)) {
it = entries.erase(it);
} else {
++it;
@@ -83,6 +83,7 @@ private:
u64 frame{};
u64 gpu_tick{};
bool dirty{true};
bool dead{};
};
[[nodiscard]] u64 HashSources(std::span<const MultiRangeSource> sources) const;