aboutsummaryrefslogtreecommitdiff
path: root/src/video_core
diff options
context:
space:
mode:
authorlizzie <lizzie@eden-emu.dev>2026-08-31 21:34:01 +0200
committercrueter <crueter@eden-emu.dev>2026-08-31 21:34:01 +0200
commitf7e5ceeacb78c96110b4da984973a4dfba77e399 (patch)
tree5f039f92fa27c5c94434a2a88ebacc2744c8471d /src/video_core
parentb7f0f98519b273e161561de1060fb3446d1b3d17 (diff)
[video_core/buffer_cache] fix PAGE_SHIFT/BSD macro clash on Linux, *BSD (#4329)
Signed-off-by: lizzie <lizzie@eden-emu.dev> - [x] I have read and followed the [Contribution Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/CONTRIBUTING.md#code-contributions). - [x] I have read and followed the [AI Policy](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/AI.md) - [x] I have read and followed the [Coding Guidelines](https://git.eden-emu.dev/eden-emu/eden/src/branch/master/docs/policies/Coding.md) to the best of my ability. ------------------- PAGE_SHIFT is a macro (sys/user.h on linux, machine/params.h on FBSD), dont name stuff that https://stackoverflow.com/questions/77611721/get-page-shift-value-in-user-space BSD is also a macro Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/4329 Reviewed-by: CamilleLaVey <camillelavey99@gmail.com> Reviewed-by: MaranBr <maranbr@eden-emu.dev>
Diffstat (limited to 'src/video_core')
-rw-r--r--src/video_core/buffer_cache/usage_tracker.h37
1 files changed, 20 insertions, 17 deletions
diff --git a/src/video_core/buffer_cache/usage_tracker.h b/src/video_core/buffer_cache/usage_tracker.h
index ae511ccb69..6f84e463e3 100644
--- a/src/video_core/buffer_cache/usage_tracker.h
+++ b/src/video_core/buffer_cache/usage_tracker.h
@@ -1,3 +1,6 @@
+// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
+// SPDX-License-Identifier: GPL-3.0-or-later
+
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
@@ -9,13 +12,13 @@
namespace VideoCommon {
class UsageTracker {
- static constexpr size_t BYTES_PER_BIT_SHIFT = 6;
- static constexpr size_t PAGE_SHIFT = 6 + BYTES_PER_BIT_SHIFT;
- static constexpr size_t PAGE_BYTES = 1 << PAGE_SHIFT;
-
+ // PAGE_SHIFT is a macro on FreeBSD
+ static constexpr size_t BUFFER_BYTES_PER_BITSHIFT = 6;
+ static constexpr size_t BUFFER_PAGE_SHIFT = 6 + BUFFER_BYTES_PER_BITSHIFT;
+ static constexpr size_t BUFFER_PAGE_BYTES = 1 << BUFFER_PAGE_SHIFT;
public:
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);
}
@@ -24,8 +27,8 @@ public:
}
void Track(u64 offset, u64 size) noexcept {
- const size_t page = offset >> PAGE_SHIFT;
- const size_t page_end = (offset + size) >> PAGE_SHIFT;
+ const size_t page = offset >> BUFFER_PAGE_SHIFT;
+ const size_t page_end = (offset + size) >> BUFFER_PAGE_SHIFT;
if (page_end < page || page_end >= pages.size()) {
return;
}
@@ -37,13 +40,13 @@ public:
pages[i] = ~u64{0};
}
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);
}
[[nodiscard]] bool IsUsed(u64 offset, u64 size) const noexcept {
- const size_t page = offset >> PAGE_SHIFT;
- const size_t page_end = (offset + size) >> PAGE_SHIFT;
+ const size_t page = offset >> BUFFER_PAGE_SHIFT;
+ const size_t page_end = (offset + size) >> BUFFER_PAGE_SHIFT;
if (page_end < page || page_end >= pages.size()) {
return false;
}
@@ -56,23 +59,23 @@ public:
}
}
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);
}
private:
void TrackPage(u64 page, u64 offset, u64 size) noexcept {
- const size_t offset_in_page = offset % PAGE_BYTES;
- const size_t first_bit = offset_in_page >> BYTES_PER_BIT_SHIFT;
- const size_t num_bits = std::min<size_t>(size, PAGE_BYTES) >> BYTES_PER_BIT_SHIFT;
+ const size_t offset_in_page = offset % BUFFER_PAGE_BYTES;
+ const size_t first_bit = offset_in_page >> BUFFER_BYTES_PER_BITSHIFT;
+ 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);
pages[page] |= (~u64{0} & mask) << first_bit;
}
bool IsPageUsed(u64 page, u64 offset, u64 size) const noexcept {
- const size_t offset_in_page = offset % PAGE_BYTES;
- const size_t first_bit = offset_in_page >> BYTES_PER_BIT_SHIFT;
- const size_t num_bits = std::min<size_t>(size, PAGE_BYTES) >> BYTES_PER_BIT_SHIFT;
+ const size_t offset_in_page = offset % BUFFER_PAGE_BYTES;
+ const size_t first_bit = offset_in_page >> BUFFER_BYTES_PER_BITSHIFT;
+ 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 mask2 = (~u64{0} & mask) << first_bit;
return (pages[page] & mask2) != 0;