diff options
| author | 2016-12-15 11:33:57 -0500 | |
|---|---|---|
| committer | 2016-12-15 11:33:57 -0500 | |
| commit | 0e0325739312b8fe33b728d039fd76faf891d31f (patch) | |
| tree | 9b13959bffec5fd7d65527551f2076eb8e9c985c /src | |
| parent | Merge pull request #2317 from yuriks/vertex-copy (diff) | |
| parent | Memory: Always flush whole pages from surface cache (diff) | |
| download | yuzu-0e0325739312b8fe33b728d039fd76faf891d31f.tar.gz yuzu-0e0325739312b8fe33b728d039fd76faf891d31f.tar.xz yuzu-0e0325739312b8fe33b728d039fd76faf891d31f.zip | |
Merge pull request #2321 from yuriks/flush-pages
Memory: Always flush whole pages from surface cache
Diffstat (limited to 'src')
| -rw-r--r-- | src/core/memory.cpp | 10 |
1 files changed, 10 insertions, 0 deletions
diff --git a/src/core/memory.cpp b/src/core/memory.cpp index 65e4bba85..d058dc844 100644 --- a/src/core/memory.cpp +++ b/src/core/memory.cpp | |||
| @@ -357,14 +357,24 @@ void RasterizerMarkRegionCached(PAddr start, u32 size, int count_delta) { | |||
| 357 | } | 357 | } |
| 358 | } | 358 | } |
| 359 | 359 | ||
| 360 | static void RoundToPages(PAddr& start, u32& size) { | ||
| 361 | PAddr start_rounded_down = start & ~PAGE_MASK; | ||
| 362 | PAddr end_rounded_up = ((start + size) + PAGE_MASK) & ~PAGE_MASK; | ||
| 363 | |||
| 364 | start = start_rounded_down; | ||
| 365 | size = end_rounded_up - start_rounded_down; | ||
| 366 | } | ||
| 367 | |||
| 360 | void RasterizerFlushRegion(PAddr start, u32 size) { | 368 | void RasterizerFlushRegion(PAddr start, u32 size) { |
| 361 | if (VideoCore::g_renderer != nullptr) { | 369 | if (VideoCore::g_renderer != nullptr) { |
| 370 | RoundToPages(start, size); | ||
| 362 | VideoCore::g_renderer->Rasterizer()->FlushRegion(start, size); | 371 | VideoCore::g_renderer->Rasterizer()->FlushRegion(start, size); |
| 363 | } | 372 | } |
| 364 | } | 373 | } |
| 365 | 374 | ||
| 366 | void RasterizerFlushAndInvalidateRegion(PAddr start, u32 size) { | 375 | void RasterizerFlushAndInvalidateRegion(PAddr start, u32 size) { |
| 367 | if (VideoCore::g_renderer != nullptr) { | 376 | if (VideoCore::g_renderer != nullptr) { |
| 377 | RoundToPages(start, size); | ||
| 368 | VideoCore::g_renderer->Rasterizer()->FlushAndInvalidateRegion(start, size); | 378 | VideoCore::g_renderer->Rasterizer()->FlushAndInvalidateRegion(start, size); |
| 369 | } | 379 | } |
| 370 | } | 380 | } |