summaryrefslogtreecommitdiffstats
diff options
context:
space:
mode:
authorReinUsesLisp <reinuseslisp@airmail.cc>2021-02-13 09:13:29 +0100
committerReinUsesLisp <reinuseslisp@airmail.cc>2021-02-13 09:14:11 +0100
commit6171566296154963933fb8553c15b5316b5dda2f (patch)
tree1701d8363c0da07c7eda13929328e5a08e7f82cb
parentgl_stream_buffer/vk_staging_buffer_pool: Fix size check (diff)
downloadyuzu-6171566296154963933fb8553c15b5316b5dda2f.tar
yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.gz
yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.bz2
yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.lz
yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.xz
yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.zst
yuzu-6171566296154963933fb8553c15b5316b5dda2f.zip
-rw-r--r--src/video_core/renderer_vulkan/vk_master_semaphore.h5
-rw-r--r--src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp3
2 files changed, 7 insertions, 1 deletions
diff --git a/src/video_core/renderer_vulkan/vk_master_semaphore.h b/src/video_core/renderer_vulkan/vk_master_semaphore.h
index f336f1862..33216d24a 100644
--- a/src/video_core/renderer_vulkan/vk_master_semaphore.h
+++ b/src/video_core/renderer_vulkan/vk_master_semaphore.h
@@ -24,6 +24,11 @@ public:
return current_tick;
}
+ /// Returns the last known GPU tick.
+ [[nodiscard]] u64 KnownGpuTick() const noexcept {
+ return gpu_tick;
+ }
+
/// Returns the timeline semaphore handle.
[[nodiscard]] VkSemaphore Handle() const noexcept {
return *semaphore;
diff --git a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
index 9b5786fcb..7a1232497 100644
--- a/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
+++ b/src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp
@@ -175,8 +175,9 @@ StagingBufferRef StagingBufferPool::GetStreamBuffer(size_t size) {
}
bool StagingBufferPool::AreRegionsActive(size_t region_begin, size_t region_end) const {
+ const u64 gpu_tick = scheduler.GetMasterSemaphore().KnownGpuTick();
return std::any_of(sync_ticks.begin() + region_begin, sync_ticks.begin() + region_end,
- [this](u64 sync_tick) { return !scheduler.IsFree(sync_tick); });
+ [gpu_tick](u64 sync_tick) { return gpu_tick < sync_tick; });
};
StagingBufferRef StagingBufferPool::GetStagingBuffer(size_t size, MemoryUsage usage) {