summaryrefslogtreecommitdiffstats
path: root/src/core/device_memory_manager.h
diff options
context:
space:
mode:
authorFernando Sahmkow <fsahmkow27@gmail.com>2024-01-30 20:14:06 +0100
committerFernando Sahmkow <fsahmkow27@gmail.com>2024-01-31 16:38:51 +0100
commit738e9a79a06c9d3955488022a1d3afd67bc5a11d (patch)
treef9d574ddd4e886e1e7938db8d5f6e68bed5eb240 /src/core/device_memory_manager.h
parentNVDRV: Join the heaper optimization blocks (diff)
downloadyuzu-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.h15
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 =