summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorGravatar ReinUsesLisp2021-02-13 17:52:13 -0300
committerGravatar ReinUsesLisp2021-02-13 17:53:58 -0300
commitb8ffdbb1674e28b77b473d87f835dd052d8127ac (patch)
treed0f64d6304314256437af4325d755a726ba13def
parentMerge pull request #5921 from ameerj/srgb-views (diff)
downloadyuzu-b8ffdbb1674e28b77b473d87f835dd052d8127ac.tar.gz
yuzu-b8ffdbb1674e28b77b473d87f835dd052d8127ac.tar.xz
yuzu-b8ffdbb1674e28b77b473d87f835dd052d8127ac.zip
vk_resource_pool: Load GPU tick once and compare with it
Other minor style improvements. Rename free_iterator to hint_iterator, to describe better what it does.
-rw-r--r--src/video_core/renderer_vulkan/vk_resource_pool.cpp14
-rw-r--r--src/video_core/renderer_vulkan/vk_resource_pool.h2
2 files changed, 8 insertions, 8 deletions
diff --git a/src/video_core/renderer_vulkan/vk_resource_pool.cpp b/src/video_core/renderer_vulkan/vk_resource_pool.cpp
index ee274ac59..a8bf7bda8 100644
--- a/src/video_core/renderer_vulkan/vk_resource_pool.cpp
+++ b/src/video_core/renderer_vulkan/vk_resource_pool.cpp
@@ -17,21 +17,21 @@ ResourcePool::~ResourcePool() = default;
17size_t ResourcePool::CommitResource() { 17size_t ResourcePool::CommitResource() {
18 // Refresh semaphore to query updated results 18 // Refresh semaphore to query updated results
19 master_semaphore.Refresh(); 19 master_semaphore.Refresh();
20 20 const u64 gpu_tick = master_semaphore.KnownGpuTick();
21 const auto search = [this](size_t begin, size_t end) -> std::optional<size_t> { 21 const auto search = [this, gpu_tick](size_t begin, size_t end) -> std::optional<size_t> {
22 for (size_t iterator = begin; iterator < end; ++iterator) { 22 for (size_t iterator = begin; iterator < end; ++iterator) {
23 if (master_semaphore.IsFree(ticks[iterator])) { 23 if (gpu_tick >= ticks[iterator]) {
24 ticks[iterator] = master_semaphore.CurrentTick(); 24 ticks[iterator] = master_semaphore.CurrentTick();
25 return iterator; 25 return iterator;
26 } 26 }
27 } 27 }
28 return {}; 28 return std::nullopt;
29 }; 29 };
30 // Try to find a free resource from the hinted position to the end. 30 // Try to find a free resource from the hinted position to the end.
31 auto found = search(free_iterator, ticks.size()); 31 std::optional<size_t> found = search(hint_iterator, ticks.size());
32 if (!found) { 32 if (!found) {
33 // Search from beginning to the hinted position. 33 // Search from beginning to the hinted position.
34 found = search(0, free_iterator); 34 found = search(0, hint_iterator);
35 if (!found) { 35 if (!found) {
36 // Both searches failed, the pool is full; handle it. 36 // Both searches failed, the pool is full; handle it.
37 const size_t free_resource = ManageOverflow(); 37 const size_t free_resource = ManageOverflow();
@@ -41,7 +41,7 @@ size_t ResourcePool::CommitResource() {
41 } 41 }
42 } 42 }
43 // Free iterator is hinted to the resource after the one that's been commited. 43 // Free iterator is hinted to the resource after the one that's been commited.
44 free_iterator = (*found + 1) % ticks.size(); 44 hint_iterator = (*found + 1) % ticks.size();
45 return *found; 45 return *found;
46} 46}
47 47
diff --git a/src/video_core/renderer_vulkan/vk_resource_pool.h b/src/video_core/renderer_vulkan/vk_resource_pool.h
index a018c7ec2..9d0bb3b4d 100644
--- a/src/video_core/renderer_vulkan/vk_resource_pool.h
+++ b/src/video_core/renderer_vulkan/vk_resource_pool.h
@@ -36,7 +36,7 @@ private:
36 36
37 MasterSemaphore& master_semaphore; 37 MasterSemaphore& master_semaphore;
38 size_t grow_step = 0; ///< Number of new resources created after an overflow 38 size_t grow_step = 0; ///< Number of new resources created after an overflow
39 size_t free_iterator = 0; ///< Hint to where the next free resources is likely to be found 39 size_t hint_iterator = 0; ///< Hint to where the next free resources is likely to be found
40 std::vector<u64> ticks; ///< Ticks for each resource 40 std::vector<u64> ticks; ///< Ticks for each resource
41}; 41};
42 42