diff options
Diffstat (limited to 'src/video_core/rasterizer_accelerated.h')
| -rw-r--r-- | src/video_core/rasterizer_accelerated.h | 25 |
1 files changed, 19 insertions, 6 deletions
diff --git a/src/video_core/rasterizer_accelerated.h b/src/video_core/rasterizer_accelerated.h index 91866d7dd..9227a4adc 100644 --- a/src/video_core/rasterizer_accelerated.h +++ b/src/video_core/rasterizer_accelerated.h | |||
| @@ -4,9 +4,8 @@ | |||
| 4 | 4 | ||
| 5 | #pragma once | 5 | #pragma once |
| 6 | 6 | ||
| 7 | #include <mutex> | 7 | #include <array> |
| 8 | 8 | #include <atomic> | |
| 9 | #include <boost/icl/interval_map.hpp> | ||
| 10 | 9 | ||
| 11 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 12 | #include "video_core/rasterizer_interface.h" | 11 | #include "video_core/rasterizer_interface.h" |
| @@ -26,10 +25,24 @@ public: | |||
| 26 | void UpdatePagesCachedCount(VAddr addr, u64 size, int delta) override; | 25 | void UpdatePagesCachedCount(VAddr addr, u64 size, int delta) override; |
| 27 | 26 | ||
| 28 | private: | 27 | private: |
| 29 | using CachedPageMap = boost::icl::interval_map<u64, int>; | 28 | class CacheEntry final { |
| 30 | CachedPageMap cached_pages; | 29 | public: |
| 31 | std::mutex pages_mutex; | 30 | CacheEntry() = default; |
| 31 | |||
| 32 | std::atomic_uint8_t& Count(std::size_t page) { | ||
| 33 | return values[page & 7]; | ||
| 34 | } | ||
| 35 | |||
| 36 | const std::atomic_uint8_t& Count(std::size_t page) const { | ||
| 37 | return values[page & 7]; | ||
| 38 | } | ||
| 39 | |||
| 40 | private: | ||
| 41 | std::array<std::atomic_uint8_t, 8> values{}; | ||
| 42 | }; | ||
| 43 | static_assert(sizeof(CacheEntry) == 8, "CacheEntry should be 8 bytes!"); | ||
| 32 | 44 | ||
| 45 | std::array<CacheEntry, 0x800000> cached_pages; | ||
| 33 | Core::Memory::Memory& cpu_memory; | 46 | Core::Memory::Memory& cpu_memory; |
| 34 | }; | 47 | }; |
| 35 | 48 | ||