diff options
author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2024-01-30 20:14:06 +0100 |
---|---|---|
committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2024-01-31 16:38:51 +0100 |
commit | 738e9a79a06c9d3955488022a1d3afd67bc5a11d (patch) | |
tree | f9d574ddd4e886e1e7938db8d5f6e68bed5eb240 /src/core/device_memory_manager.h | |
parent | NVDRV: Join the heaper optimization blocks (diff) | |
download | yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.tar yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.tar.gz yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.tar.bz2 yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.tar.lz yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.tar.xz yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.tar.zst yuzu-738e9a79a06c9d3955488022a1d3afd67bc5a11d.zip |
Diffstat (limited to '')
-rw-r--r-- | src/core/device_memory_manager.h | 15 |
1 files changed, 10 insertions, 5 deletions
diff --git a/src/core/device_memory_manager.h b/src/core/device_memory_manager.h index 63823602c..0568a821b 100644 --- a/src/core/device_memory_manager.h +++ b/src/core/device_memory_manager.h @@ -5,6 +5,7 @@ #include <array> #include <atomic> +#include <bit> #include <deque> #include <memory> #include <mutex> @@ -181,24 +182,28 @@ private: } Common::VirtualBuffer<VAddr> cpu_backing_address; - static constexpr size_t subentries = 8 / sizeof(u8); + using CounterType = u8; + using CounterAtomicType = std::atomic_uint8_t; + static constexpr size_t subentries = 8 / sizeof(CounterType); static constexpr size_t subentries_mask = subentries - 1; + static constexpr size_t subentries_shift = + std::countr_zero(sizeof(u64)) - std::countr_zero(sizeof(CounterType)); class CounterEntry final { public: CounterEntry() = default; - std::atomic_uint8_t& Count(std::size_t page) { + CounterAtomicType& Count(std::size_t page) { return values[page & subentries_mask]; } - const std::atomic_uint8_t& Count(std::size_t page) const { + const CounterAtomicType& Count(std::size_t page) const { return values[page & subentries_mask]; } private: - std::array<std::atomic_uint8_t, subentries> values{}; + std::array<CounterAtomicType, subentries> values{}; }; - static_assert(sizeof(CounterEntry) == subentries * sizeof(u8), + static_assert(sizeof(CounterEntry) == subentries * sizeof(CounterType), "CounterEntry should be 8 bytes!"); static constexpr size_t num_counter_entries = |