Tests some last minute changes

This commit is contained in:
CamilleLaVey
2026-09-06 17:08:14 -04:00
parent a609d9d1c5
commit 76b1d2b517
3 changed files with 13 additions and 9 deletions
+1 -1
View File
@@ -1014,7 +1014,7 @@ void BufferCache<P>::ResolveMultiRangeStorage(Binding& binding, bool is_written,
if (binding.gpu_addr == 0 || binding.size == 0) { if (binding.gpu_addr == 0 || binding.size == 0) {
return; return;
} }
if (is_written && !runtime.PrefersSparseSources()) { if (is_written) {
return; return;
} }
const VirtualSegments* found = const VirtualSegments* found =
@@ -168,8 +168,8 @@ SparseBuffer MultiRangeBufferCache::CreateSparse(const Device& device, Scheduler
return handle; return handle;
} }
bool MultiRangeBufferCache::DestroySparse(Scheduler& scheduler, SparseBuffer&& handle) { bool MultiRangeBufferCache::RetireEntry(Scheduler& scheduler, Entry& entry) {
if (!handle) { if (!entry.sparse_handle && !entry.gathered) {
return true; return true;
} }
if (retired.size() == retired.capacity()) { if (retired.size() == retired.capacity()) {
@@ -179,7 +179,8 @@ bool MultiRangeBufferCache::DestroySparse(Scheduler& scheduler, SparseBuffer&& h
return false; return false;
} }
retired.push_back(Retired{ retired.push_back(Retired{
.handle = std::move(handle), .handle = std::move(entry.sparse_handle),
.gathered = std::move(entry.gathered),
.tick = scheduler.CurrentTick(), .tick = scheduler.CurrentTick(),
}); });
return true; return true;
@@ -189,7 +190,9 @@ void MultiRangeBufferCache::DrainRetired(Scheduler& scheduler) {
size_t index = 0; size_t index = 0;
while (index < retired.size()) { while (index < retired.size()) {
if (scheduler.IsFree(retired[index].tick)) { if (scheduler.IsFree(retired[index].tick)) {
retired[index] = std::move(retired.back()); if (index + 1 != retired.size()) {
retired[index] = std::move(retired.back());
}
retired.pop_back(); retired.pop_back();
} else { } else {
++index; ++index;
@@ -233,7 +236,7 @@ MultiRangeRef MultiRangeBufferCache::Get(const Device& device, Scheduler& schedu
return ref; return ref;
} }
if (it != entries.end()) { if (it != entries.end()) {
if (!DestroySparse(scheduler, std::move(it->second.sparse_handle))) { if (!RetireEntry(scheduler, it->second)) {
return MultiRangeRef{}; return MultiRangeRef{};
} }
entries.erase(it); entries.erase(it);
@@ -317,7 +320,7 @@ void MultiRangeBufferCache::DropOwner(Scheduler& scheduler, VkBuffer owner) {
break; break;
} }
} }
if (owned && DestroySparse(scheduler, std::move(entry.sparse_handle))) { if (owned && RetireEntry(scheduler, entry)) {
it = entries.erase(it); it = entries.erase(it);
} else { } else {
++it; ++it;
@@ -343,7 +346,7 @@ void MultiRangeBufferCache::TickFrame(Scheduler& scheduler) {
Entry& entry = it->second; Entry& entry = it->second;
const bool expired = const bool expired =
frame_tick - entry.frame > FRAMES_TO_LIVE && scheduler.IsFree(entry.gpu_tick); frame_tick - entry.frame > FRAMES_TO_LIVE && scheduler.IsFree(entry.gpu_tick);
if (expired && DestroySparse(scheduler, std::move(entry.sparse_handle))) { if (expired && RetireEntry(scheduler, entry)) {
it = entries.erase(it); it = entries.erase(it);
} else { } else {
++it; ++it;
@@ -68,6 +68,7 @@ public:
private: private:
struct Retired { struct Retired {
SparseBuffer handle; SparseBuffer handle;
vk::Buffer gathered;
u64 tick{}; u64 tick{};
}; };
@@ -96,7 +97,7 @@ private:
[[nodiscard]] VkDeviceSize QueryBlockSize(const Device& device, u32& memory_type_bits) const; [[nodiscard]] VkDeviceSize QueryBlockSize(const Device& device, u32& memory_type_bits) const;
bool DestroySparse(Scheduler& scheduler, SparseBuffer&& handle); bool RetireEntry(Scheduler& scheduler, Entry& entry);
void DrainRetired(Scheduler& scheduler); void DrainRetired(Scheduler& scheduler);