video_core: use interval map for page count tracking
This commit is contained in:
parent
462ba1b360
commit
030e6b3980
7 changed files with 66 additions and 76 deletions
|
@ -23,13 +23,13 @@ constexpr VAddr c = 16 * HIGH_PAGE_SIZE;
|
|||
|
||||
class RasterizerInterface {
|
||||
public:
|
||||
void UpdatePagesCachedCount(VAddr addr, u64 size, int delta) {
|
||||
void UpdatePagesCachedCount(VAddr addr, u64 size, bool cache) {
|
||||
const u64 page_start{addr >> Core::Memory::YUZU_PAGEBITS};
|
||||
const u64 page_end{(addr + size + Core::Memory::YUZU_PAGESIZE - 1) >>
|
||||
Core::Memory::YUZU_PAGEBITS};
|
||||
for (u64 page = page_start; page < page_end; ++page) {
|
||||
int& value = page_table[page];
|
||||
value += delta;
|
||||
value += (cache ? 1 : -1);
|
||||
if (value < 0) {
|
||||
throw std::logic_error{"negative page"};
|
||||
}
|
||||
|
@ -546,4 +546,4 @@ TEST_CASE("MemoryTracker: Cached write downloads") {
|
|||
REQUIRE(!memory_track->IsRegionGpuModified(c + PAGE, PAGE));
|
||||
memory_track->MarkRegionAsCpuModified(c, WORD);
|
||||
REQUIRE(rasterizer.Count() == 0);
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue