mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-09-07 04:33:24 +00:00
Tests some last minute changes
This commit is contained in:
@@ -1014,7 +1014,7 @@ void BufferCache<P>::ResolveMultiRangeStorage(Binding& binding, bool is_written,
|
||||
if (binding.gpu_addr == 0 || binding.size == 0) {
|
||||
return;
|
||||
}
|
||||
if (is_written && !runtime.PrefersSparseSources()) {
|
||||
if (is_written) {
|
||||
return;
|
||||
}
|
||||
const VirtualSegments* found =
|
||||
|
||||
@@ -168,8 +168,8 @@ SparseBuffer MultiRangeBufferCache::CreateSparse(const Device& device, Scheduler
|
||||
return handle;
|
||||
}
|
||||
|
||||
bool MultiRangeBufferCache::DestroySparse(Scheduler& scheduler, SparseBuffer&& handle) {
|
||||
if (!handle) {
|
||||
bool MultiRangeBufferCache::RetireEntry(Scheduler& scheduler, Entry& entry) {
|
||||
if (!entry.sparse_handle && !entry.gathered) {
|
||||
return true;
|
||||
}
|
||||
if (retired.size() == retired.capacity()) {
|
||||
@@ -179,7 +179,8 @@ bool MultiRangeBufferCache::DestroySparse(Scheduler& scheduler, SparseBuffer&& h
|
||||
return false;
|
||||
}
|
||||
retired.push_back(Retired{
|
||||
.handle = std::move(handle),
|
||||
.handle = std::move(entry.sparse_handle),
|
||||
.gathered = std::move(entry.gathered),
|
||||
.tick = scheduler.CurrentTick(),
|
||||
});
|
||||
return true;
|
||||
@@ -189,7 +190,9 @@ void MultiRangeBufferCache::DrainRetired(Scheduler& scheduler) {
|
||||
size_t index = 0;
|
||||
while (index < retired.size()) {
|
||||
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();
|
||||
} else {
|
||||
++index;
|
||||
@@ -233,7 +236,7 @@ MultiRangeRef MultiRangeBufferCache::Get(const Device& device, Scheduler& schedu
|
||||
return ref;
|
||||
}
|
||||
if (it != entries.end()) {
|
||||
if (!DestroySparse(scheduler, std::move(it->second.sparse_handle))) {
|
||||
if (!RetireEntry(scheduler, it->second)) {
|
||||
return MultiRangeRef{};
|
||||
}
|
||||
entries.erase(it);
|
||||
@@ -317,7 +320,7 @@ void MultiRangeBufferCache::DropOwner(Scheduler& scheduler, VkBuffer owner) {
|
||||
break;
|
||||
}
|
||||
}
|
||||
if (owned && DestroySparse(scheduler, std::move(entry.sparse_handle))) {
|
||||
if (owned && RetireEntry(scheduler, entry)) {
|
||||
it = entries.erase(it);
|
||||
} else {
|
||||
++it;
|
||||
@@ -343,7 +346,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 && DestroySparse(scheduler, std::move(entry.sparse_handle))) {
|
||||
if (expired && RetireEntry(scheduler, entry)) {
|
||||
it = entries.erase(it);
|
||||
} else {
|
||||
++it;
|
||||
|
||||
@@ -68,6 +68,7 @@ public:
|
||||
private:
|
||||
struct Retired {
|
||||
SparseBuffer handle;
|
||||
vk::Buffer gathered;
|
||||
u64 tick{};
|
||||
};
|
||||
|
||||
@@ -96,7 +97,7 @@ private:
|
||||
|
||||
[[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);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user