mirror of
https://git.eden-emu.dev/eden-emu/eden.git
synced 2026-10-06 14:09:58 +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) {
|
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);
|
||||||
|
|
||||||
|
|||||||
Reference in New Issue
Block a user