mirror of
https://git.eden-emu.dev/eden-emu/eden
synced 2026-11-13 16:30:48 +01:00
[vulkan] Added tracker for reused uploads
This commit is contained in:
parent
307a32f9a0
commit
f5560deab7
2 changed files with 12 additions and 2 deletions
|
|
@ -84,7 +84,7 @@ vk::Buffer CreateBuffer(const Device& device, const MemoryAllocator& memory_allo
|
||||||
} // Anonymous namespace
|
} // Anonymous namespace
|
||||||
|
|
||||||
Buffer::Buffer(BufferCacheRuntime& runtime, VideoCommon::NullBufferParams null_params)
|
Buffer::Buffer(BufferCacheRuntime& runtime, VideoCommon::NullBufferParams null_params)
|
||||||
: VideoCommon::BufferBase(null_params), tracker{4096} {
|
: VideoCommon::BufferBase(null_params), scheduler{&runtime.scheduler}, tracker{4096} {
|
||||||
if (runtime.device.HasNullDescriptor()) {
|
if (runtime.device.HasNullDescriptor()) {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
@ -95,6 +95,7 @@ Buffer::Buffer(BufferCacheRuntime& runtime, VideoCommon::NullBufferParams null_p
|
||||||
|
|
||||||
Buffer::Buffer(BufferCacheRuntime& runtime, DAddr cpu_addr_, u64 size_bytes_)
|
Buffer::Buffer(BufferCacheRuntime& runtime, DAddr cpu_addr_, u64 size_bytes_)
|
||||||
: VideoCommon::BufferBase(cpu_addr_, size_bytes_), device{&runtime.device},
|
: VideoCommon::BufferBase(cpu_addr_, size_bytes_), device{&runtime.device},
|
||||||
|
scheduler{&runtime.scheduler},
|
||||||
buffer{CreateBuffer(*device, runtime.memory_allocator, SizeBytes())}, tracker{SizeBytes()} {
|
buffer{CreateBuffer(*device, runtime.memory_allocator, SizeBytes())}, tracker{SizeBytes()} {
|
||||||
if (runtime.device.HasDebuggingToolAttached()) {
|
if (runtime.device.HasDebuggingToolAttached()) {
|
||||||
buffer.SetObjectNameEXT(fmt::format("Buffer 0x{:x}", CpuAddr()).c_str());
|
buffer.SetObjectNameEXT(fmt::format("Buffer 0x{:x}", CpuAddr()).c_str());
|
||||||
|
|
@ -384,7 +385,9 @@ u32 BufferCacheRuntime::GetStorageBufferAlignment() const {
|
||||||
|
|
||||||
void BufferCacheRuntime::TickFrame(Common::SlotVector<Buffer>& slot_buffers) noexcept {
|
void BufferCacheRuntime::TickFrame(Common::SlotVector<Buffer>& slot_buffers) noexcept {
|
||||||
for (auto it = slot_buffers.begin(); it != slot_buffers.end(); it++) {
|
for (auto it = slot_buffers.begin(); it != slot_buffers.end(); it++) {
|
||||||
it->ResetUsageTracking();
|
if (scheduler.IsFree(it->LastUsageTick())) {
|
||||||
|
it->ResetUsageTracking();
|
||||||
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
|
||||||
|
|
@ -45,12 +45,17 @@ public:
|
||||||
|
|
||||||
void MarkUsage(u64 offset, u64 size) noexcept {
|
void MarkUsage(u64 offset, u64 size) noexcept {
|
||||||
tracker.Track(offset, size);
|
tracker.Track(offset, size);
|
||||||
|
last_usage_tick = scheduler->CurrentTick();
|
||||||
}
|
}
|
||||||
|
|
||||||
void ResetUsageTracking() noexcept {
|
void ResetUsageTracking() noexcept {
|
||||||
tracker.Reset();
|
tracker.Reset();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
[[nodiscard]] u64 LastUsageTick() const noexcept {
|
||||||
|
return last_usage_tick;
|
||||||
|
}
|
||||||
|
|
||||||
operator VkBuffer() const noexcept {
|
operator VkBuffer() const noexcept {
|
||||||
return *buffer;
|
return *buffer;
|
||||||
}
|
}
|
||||||
|
|
@ -64,9 +69,11 @@ private:
|
||||||
};
|
};
|
||||||
|
|
||||||
const Device* device{};
|
const Device* device{};
|
||||||
|
Scheduler* scheduler{};
|
||||||
vk::Buffer buffer;
|
vk::Buffer buffer;
|
||||||
std::vector<BufferView> views;
|
std::vector<BufferView> views;
|
||||||
VideoCommon::UsageTracker tracker;
|
VideoCommon::UsageTracker tracker;
|
||||||
|
u64 last_usage_tick{};
|
||||||
bool is_null{};
|
bool is_null{};
|
||||||
};
|
};
|
||||||
|
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue