diff options
Diffstat (limited to 'src')
| -rw-r--r-- | src/common/lru_cache.h | 23 | ||||
| -rw-r--r-- | src/video_core/buffer_cache/buffer_base.h | 9 | ||||
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 6 | ||||
| -rw-r--r-- | src/video_core/texture_cache/image_base.h | 2 |
4 files changed, 23 insertions, 17 deletions
diff --git a/src/common/lru_cache.h b/src/common/lru_cache.h index 048e9c3da..365488ba5 100644 --- a/src/common/lru_cache.h +++ b/src/common/lru_cache.h | |||
| @@ -29,11 +29,11 @@ public: | |||
| 29 | ~LeastRecentlyUsedCache() = default; | 29 | ~LeastRecentlyUsedCache() = default; |
| 30 | 30 | ||
| 31 | size_t Insert(ObjectType obj, TickType tick) { | 31 | size_t Insert(ObjectType obj, TickType tick) { |
| 32 | const auto new_id = build(); | 32 | const auto new_id = Build(); |
| 33 | auto& item = item_pool[new_id]; | 33 | auto& item = item_pool[new_id]; |
| 34 | item.obj = obj; | 34 | item.obj = obj; |
| 35 | item.tick = tick; | 35 | item.tick = tick; |
| 36 | attach(item); | 36 | Attach(item); |
| 37 | return new_id; | 37 | return new_id; |
| 38 | } | 38 | } |
| 39 | 39 | ||
| @@ -46,13 +46,13 @@ public: | |||
| 46 | if (&item == last_item) { | 46 | if (&item == last_item) { |
| 47 | return; | 47 | return; |
| 48 | } | 48 | } |
| 49 | detach(item); | 49 | Detach(item); |
| 50 | attach(item); | 50 | Attach(item); |
| 51 | } | 51 | } |
| 52 | 52 | ||
| 53 | void Free(size_t id) { | 53 | void Free(size_t id) { |
| 54 | auto& item = item_pool[id]; | 54 | auto& item = item_pool[id]; |
| 55 | detach(item); | 55 | Detach(item); |
| 56 | item.prev = nullptr; | 56 | item.prev = nullptr; |
| 57 | item.next = nullptr; | 57 | item.next = nullptr; |
| 58 | free_items.push_back(id); | 58 | free_items.push_back(id); |
| @@ -80,11 +80,10 @@ public: | |||
| 80 | } | 80 | } |
| 81 | 81 | ||
| 82 | private: | 82 | private: |
| 83 | size_t build() { | 83 | size_t Build() { |
| 84 | if (free_items.empty()) { | 84 | if (free_items.empty()) { |
| 85 | const size_t item_id = item_pool.size(); | 85 | const size_t item_id = item_pool.size(); |
| 86 | item_pool.emplace_back(); | 86 | auto& item = item_pool.emplace_back(); |
| 87 | auto& item = item_pool[item_id]; | ||
| 88 | item.next = nullptr; | 87 | item.next = nullptr; |
| 89 | item.prev = nullptr; | 88 | item.prev = nullptr; |
| 90 | return item_id; | 89 | return item_id; |
| @@ -97,7 +96,7 @@ private: | |||
| 97 | return item_id; | 96 | return item_id; |
| 98 | } | 97 | } |
| 99 | 98 | ||
| 100 | void attach(Item& item) { | 99 | void Attach(Item& item) { |
| 101 | if (!first_item) { | 100 | if (!first_item) { |
| 102 | first_item = &item; | 101 | first_item = &item; |
| 103 | } | 102 | } |
| @@ -111,7 +110,7 @@ private: | |||
| 111 | } | 110 | } |
| 112 | } | 111 | } |
| 113 | 112 | ||
| 114 | void detach(Item& item) { | 113 | void Detach(Item& item) { |
| 115 | if (item.prev) { | 114 | if (item.prev) { |
| 116 | item.prev->next = item.next; | 115 | item.prev->next = item.next; |
| 117 | } | 116 | } |
| @@ -134,8 +133,8 @@ private: | |||
| 134 | 133 | ||
| 135 | std::deque<Item> item_pool; | 134 | std::deque<Item> item_pool; |
| 136 | std::deque<size_t> free_items; | 135 | std::deque<size_t> free_items; |
| 137 | Item* first_item; | 136 | Item* first_item{}; |
| 138 | Item* last_item; | 137 | Item* last_item{}; |
| 139 | }; | 138 | }; |
| 140 | 139 | ||
| 141 | } // namespace Common | 140 | } // namespace Common |
diff --git a/src/video_core/buffer_cache/buffer_base.h b/src/video_core/buffer_cache/buffer_base.h index 4b696a60f..18a3390c0 100644 --- a/src/video_core/buffer_cache/buffer_base.h +++ b/src/video_core/buffer_cache/buffer_base.h | |||
| @@ -297,7 +297,13 @@ public: | |||
| 297 | return words.size_bytes; | 297 | return words.size_bytes; |
| 298 | } | 298 | } |
| 299 | 299 | ||
| 300 | size_t lru_id; | 300 | size_t getLRUID() const noexcept { |
| 301 | return lru_id; | ||
| 302 | } | ||
| 303 | |||
| 304 | void setLRUID(size_t lru_id_) { | ||
| 305 | lru_id = lru_id_; | ||
| 306 | } | ||
| 301 | 307 | ||
| 302 | private: | 308 | private: |
| 303 | template <Type type> | 309 | template <Type type> |
| @@ -597,6 +603,7 @@ private: | |||
| 597 | Words words; | 603 | Words words; |
| 598 | BufferFlagBits flags{}; | 604 | BufferFlagBits flags{}; |
| 599 | int stream_score = 0; | 605 | int stream_score = 0; |
| 606 | size_t lru_id = SIZE_MAX; | ||
| 600 | }; | 607 | }; |
| 601 | 608 | ||
| 602 | } // namespace VideoCommon | 609 | } // namespace VideoCommon |
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index e40aa7fe6..617435968 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -1539,10 +1539,10 @@ void BufferCache<P>::ChangeRegister(BufferId buffer_id) { | |||
| 1539 | const auto size = buffer.SizeBytes(); | 1539 | const auto size = buffer.SizeBytes(); |
| 1540 | if (insert) { | 1540 | if (insert) { |
| 1541 | total_used_memory += Common::AlignUp(size, 1024); | 1541 | total_used_memory += Common::AlignUp(size, 1024); |
| 1542 | buffer.lru_id = lru_cache.Insert(buffer_id, frame_tick); | 1542 | buffer.setLRUID(lru_cache.Insert(buffer_id, frame_tick)); |
| 1543 | } else { | 1543 | } else { |
| 1544 | total_used_memory -= Common::AlignUp(size, 1024); | 1544 | total_used_memory -= Common::AlignUp(size, 1024); |
| 1545 | lru_cache.Free(buffer.lru_id); | 1545 | lru_cache.Free(buffer.getLRUID()); |
| 1546 | } | 1546 | } |
| 1547 | const VAddr cpu_addr_begin = buffer.CpuAddr(); | 1547 | const VAddr cpu_addr_begin = buffer.CpuAddr(); |
| 1548 | const VAddr cpu_addr_end = cpu_addr_begin + size; | 1548 | const VAddr cpu_addr_end = cpu_addr_begin + size; |
| @@ -1560,7 +1560,7 @@ void BufferCache<P>::ChangeRegister(BufferId buffer_id) { | |||
| 1560 | template <class P> | 1560 | template <class P> |
| 1561 | void BufferCache<P>::TouchBuffer(Buffer& buffer, BufferId buffer_id) noexcept { | 1561 | void BufferCache<P>::TouchBuffer(Buffer& buffer, BufferId buffer_id) noexcept { |
| 1562 | if (buffer_id != NULL_BUFFER_ID) { | 1562 | if (buffer_id != NULL_BUFFER_ID) { |
| 1563 | lru_cache.Touch(buffer.lru_id, frame_tick); | 1563 | lru_cache.Touch(buffer.getLRUID(), frame_tick); |
| 1564 | } | 1564 | } |
| 1565 | } | 1565 | } |
| 1566 | 1566 | ||
diff --git a/src/video_core/texture_cache/image_base.h b/src/video_core/texture_cache/image_base.h index 662089e3d..0c17a791b 100644 --- a/src/video_core/texture_cache/image_base.h +++ b/src/video_core/texture_cache/image_base.h | |||
| @@ -80,7 +80,7 @@ struct ImageBase { | |||
| 80 | VAddr cpu_addr_end = 0; | 80 | VAddr cpu_addr_end = 0; |
| 81 | 81 | ||
| 82 | u64 modification_tick = 0; | 82 | u64 modification_tick = 0; |
| 83 | size_t lru_index = ~0; | 83 | size_t lru_index = SIZE_MAX; |
| 84 | 84 | ||
| 85 | std::array<u32, MAX_MIP_LEVELS> mip_level_offsets{}; | 85 | std::array<u32, MAX_MIP_LEVELS> mip_level_offsets{}; |
| 86 | 86 | ||