diff options
| author | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-06-29 12:24:56 +0200 | 
|---|---|---|
| committer | Fernando Sahmkow <fsahmkow27@gmail.com> | 2023-06-29 12:25:12 +0200 | 
| commit | 0e6b559c98e3dee54c3c9eaef2d3e59f3871882d (patch) | |
| tree | 7bbbb964bab0734f2031ca528a50422ac2b84eac | |
| parent | da440da9f54cc860f3c69da685a415d5ec9d7b64 (diff) | |
Memory Tracker: Use 64 bit atomics instead of 128 bits
| -rw-r--r-- | src/core/gpu_dirty_memory_manager.h | 22 | 
1 files changed, 13 insertions, 9 deletions
| diff --git a/src/core/gpu_dirty_memory_manager.h b/src/core/gpu_dirty_memory_manager.h index 789b7530f..9687531e8 100644 --- a/src/core/gpu_dirty_memory_manager.h +++ b/src/core/gpu_dirty_memory_manager.h @@ -16,7 +16,10 @@ namespace Core {  class GPUDirtyMemoryManager {  public: -    GPUDirtyMemoryManager() : current{default_transform} {} +    GPUDirtyMemoryManager() : current{default_transform} { +        back_buffer.reserve(256); +        front_buffer.reserve(256); +    }      ~GPUDirtyMemoryManager() = default; @@ -62,7 +65,8 @@ public:                  mask = mask >> empty_bits;                  const size_t continuous_bits = std::countr_one(mask); -                callback((transform.address << page_bits) + offset, continuous_bits << align_bits); +                callback((static_cast<VAddr>(transform.address) << page_bits) + offset, +                         continuous_bits << align_bits);                  mask = continuous_bits < align_size ? (mask >> continuous_bits) : 0;                  offset += continuous_bits << align_bits;              } @@ -71,19 +75,19 @@ public:      }  private: -    struct alignas(16) TransformAddress { -        VAddr address; -        u64 mask; +    struct alignas(8) TransformAddress { +        u32 address; +        u32 mask;      }; -    constexpr static size_t page_bits = Memory::YUZU_PAGEBITS; +    constexpr static size_t page_bits = Memory::YUZU_PAGEBITS - 1;      constexpr static size_t page_size = 1ULL << page_bits;      constexpr static size_t page_mask = page_size - 1;      constexpr static size_t align_bits = 6U;      constexpr static size_t align_size = 1U << align_bits;      constexpr static size_t align_mask = align_size - 1; -    constexpr static TransformAddress default_transform = {.address = ~0ULL, .mask = 0ULL}; +    constexpr static TransformAddress default_transform = {.address = ~0U, .mask = 0U};      bool IsValid(VAddr address) {          return address < (1ULL << 39); @@ -104,8 +108,8 @@ private:          const size_t minor_bit = minor_address >> align_bits;          const size_t top_bit = (minor_address + size + align_mask) >> align_bits;          TransformAddress result{}; -        result.address = address >> page_bits; -        result.mask = CreateMask<u64>(top_bit, minor_bit); +        result.address = static_cast<u32>(address >> page_bits); +        result.mask = CreateMask<u32>(top_bit, minor_bit);          return result;      } | 
