diff options
| author | 2021-02-13 05:13:29 -0300 | |
|---|---|---|
| committer | 2021-02-13 05:14:11 -0300 | |
| commit | 6171566296154963933fb8553c15b5316b5dda2f (patch) | |
| tree | 1701d8363c0da07c7eda13929328e5a08e7f82cb | |
| parent | gl_stream_buffer/vk_staging_buffer_pool: Fix size check (diff) | |
| download | yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.gz yuzu-6171566296154963933fb8553c15b5316b5dda2f.tar.xz yuzu-6171566296154963933fb8553c15b5316b5dda2f.zip | |
vk_staging_buffer_pool: Inline tick tests
Load the current tick to a local variable, moving it out of an atomic
and allowing us to compare the value without going through a pointer
each time. This should make the loop more optimizable.
Diffstat (limited to '')
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_master_semaphore.h | 5 | ||||
| -rw-r--r-- | src/video_core/renderer_vulkan/vk_staging_buffer_pool.cpp | 3 |
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: | |||
| 24 | return current_tick; | 24 | return current_tick; |
| 25 | } | 25 | } |
| 26 | 26 | ||
| 27 | /// Returns the last known GPU tick. | ||
| 28 | [[nodiscard]] u64 KnownGpuTick() const noexcept { | ||
| 29 | return gpu_tick; | ||
| 30 | } | ||
| 31 | |||
| 27 | /// Returns the timeline semaphore handle. | 32 | /// Returns the timeline semaphore handle. |
| 28 | [[nodiscard]] VkSemaphore Handle() const noexcept { | 33 | [[nodiscard]] VkSemaphore Handle() const noexcept { |
| 29 | return *semaphore; | 34 | 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) { | |||
| 175 | } | 175 | } |
| 176 | 176 | ||
| 177 | bool StagingBufferPool::AreRegionsActive(size_t region_begin, size_t region_end) const { | 177 | bool StagingBufferPool::AreRegionsActive(size_t region_begin, size_t region_end) const { |
| 178 | const u64 gpu_tick = scheduler.GetMasterSemaphore().KnownGpuTick(); | ||
| 178 | return std::any_of(sync_ticks.begin() + region_begin, sync_ticks.begin() + region_end, | 179 | return std::any_of(sync_ticks.begin() + region_begin, sync_ticks.begin() + region_end, |
| 179 | [this](u64 sync_tick) { return !scheduler.IsFree(sync_tick); }); | 180 | [gpu_tick](u64 sync_tick) { return gpu_tick < sync_tick; }); |
| 180 | }; | 181 | }; |
| 181 | 182 | ||
| 182 | StagingBufferRef StagingBufferPool::GetStagingBuffer(size_t size, MemoryUsage usage) { | 183 | StagingBufferRef StagingBufferPool::GetStagingBuffer(size_t size, MemoryUsage usage) { |