[video_core/buffer_cache] fix PAGE_SHIFT macro clash on FBSD

Signed-off-by: lizzie <lizzie@eden-emu.dev>
This commit is contained in:
lizzie
2026-08-31 03:43:50 +00:00
parent b7f0f98519
commit d762bc54d4
+17 -17
View File
@@ -9,13 +9,13 @@
namespace VideoCommon { namespace VideoCommon {
class UsageTracker { class UsageTracker {
static constexpr size_t BYTES_PER_BIT_SHIFT = 6; // PAGE_SHIFT is a macro on FreeBSD
static constexpr size_t PAGE_SHIFT = 6 + BYTES_PER_BIT_SHIFT; static constexpr size_t BUFFER_BYTES_PER_BITSHIFT = 6;
static constexpr size_t PAGE_BYTES = 1 << PAGE_SHIFT; static constexpr size_t BUFFER_PAGE_SHIFT = 6 + BUFFER_BYTES_PER_BITSHIFT;
static constexpr size_t BUFFER_PAGE_BYTES = 1 << BUFFER_PAGE_SHIFT;
public: public:
explicit UsageTracker(size_t size) { explicit UsageTracker(size_t size) {
const size_t num_pages = (size >> PAGE_SHIFT) + 1; const size_t num_pages = (size >> BUFFER_PAGE_SHIFT) + 1;
pages.resize(num_pages, 0ULL); pages.resize(num_pages, 0ULL);
} }
@@ -24,8 +24,8 @@ public:
} }
void Track(u64 offset, u64 size) noexcept { void Track(u64 offset, u64 size) noexcept {
const size_t page = offset >> PAGE_SHIFT; const size_t page = offset >> BUFFER_PAGE_SHIFT;
const size_t page_end = (offset + size) >> PAGE_SHIFT; const size_t page_end = (offset + size) >> BUFFER_PAGE_SHIFT;
if (page_end < page || page_end >= pages.size()) { if (page_end < page || page_end >= pages.size()) {
return; return;
} }
@@ -37,13 +37,13 @@ public:
pages[i] = ~u64{0}; pages[i] = ~u64{0};
} }
const size_t offset_end = offset + size; const size_t offset_end = offset + size;
const size_t offset_end_page_aligned = Common::AlignDown(offset_end, PAGE_BYTES); const size_t offset_end_page_aligned = Common::AlignDown(offset_end, BUFFER_PAGE_BYTES);
TrackPage(page_end, offset_end_page_aligned, offset_end - offset_end_page_aligned); TrackPage(page_end, offset_end_page_aligned, offset_end - offset_end_page_aligned);
} }
[[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept { [[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept {
const size_t page = offset >> PAGE_SHIFT; const size_t page = offset >> BUFFER_PAGE_SHIFT;
const size_t page_end = (offset + size) >> PAGE_SHIFT; const size_t page_end = (offset + size) >> BUFFER_PAGE_SHIFT;
if (page_end < page || page_end >= pages.size()) { if (page_end < page || page_end >= pages.size()) {
return false; return false;
} }
@@ -56,23 +56,23 @@ public:
} }
} }
const size_t offset_end = offset + size; const size_t offset_end = offset + size;
const size_t offset_end_page_aligned = Common::AlignDown(offset_end, PAGE_BYTES); const size_t offset_end_page_aligned = Common::AlignDown(offset_end, BUFFER_PAGE_BYTES);
return IsPageUsed(page_end, offset_end_page_aligned, offset_end - offset_end_page_aligned); return IsPageUsed(page_end, offset_end_page_aligned, offset_end - offset_end_page_aligned);
} }
private: private:
void TrackPage(u64 page, u64 offset, u64 size) noexcept { void TrackPage(u64 page, u64 offset, u64 size) noexcept {
const size_t offset_in_page = offset % PAGE_BYTES; const size_t offset_in_page = offset % BUFFER_PAGE_BYTES;
const size_t first_bit = offset_in_page >> BYTES_PER_BIT_SHIFT; const size_t first_bit = offset_in_page >> BUFFER_BYTES_PER_BITSHIFT;
const size_t num_bits = std::min<size_t>(size, PAGE_BYTES) >> BYTES_PER_BIT_SHIFT; const size_t num_bits = std::min<size_t>(size, BUFFER_PAGE_BYTES) >> BUFFER_BYTES_PER_BITSHIFT;
const size_t mask = ~u64{0} >> (64 - num_bits); const size_t mask = ~u64{0} >> (64 - num_bits);
pages[page] |= (~u64{0} & mask) << first_bit; pages[page] |= (~u64{0} & mask) << first_bit;
} }
bool IsPageUsed(u64 page, u64 offset, u64 size) const noexcept { bool IsPageUsed(u64 page, u64 offset, u64 size) const noexcept {
const size_t offset_in_page = offset % PAGE_BYTES; const size_t offset_in_page = offset % BUFFER_PAGE_BYTES;
const size_t first_bit = offset_in_page >> BYTES_PER_BIT_SHIFT; const size_t first_bit = offset_in_page >> BUFFER_BYTES_PER_BITSHIFT;
const size_t num_bits = std::min<size_t>(size, PAGE_BYTES) >> BYTES_PER_BIT_SHIFT; const size_t num_bits = std::min<size_t>(size, BUFFER_PAGE_BYTES) >> BUFFER_BYTES_PER_BITSHIFT;
const size_t mask = ~u64{0} >> (64 - num_bits); const size_t mask = ~u64{0} >> (64 - num_bits);
const size_t mask2 = (~u64{0} & mask) << first_bit; const size_t mask2 = (~u64{0} & mask) << first_bit;
return (pages[page] & mask2) != 0; return (pages[page] & mask2) != 0;