diff options
| author | 2022-08-21 12:59:01 -0400 | |
|---|---|---|
| committer | 2022-08-21 12:59:01 -0400 | |
| commit | 064f836d1c4f6de7d7c100b4aff700bf66448e22 (patch) | |
| tree | 7f087cacbde745c7d64f205618b80624c8599074 /src/video_core/buffer_cache | |
| parent | Merge pull request #8790 from liamwhite/too-many-ways-to-name-a-byte-string (diff) | |
| parent | code: dodge PAGE_SIZE #define (diff) | |
| download | yuzu-064f836d1c4f6de7d7c100b4aff700bf66448e22.tar.gz yuzu-064f836d1c4f6de7d7c100b4aff700bf66448e22.tar.xz yuzu-064f836d1c4f6de7d7c100b4aff700bf66448e22.zip | |
Merge pull request #8784 from Docteh/nosnek
code: dodge PAGE_SIZE #define
Diffstat (limited to 'src/video_core/buffer_cache')
| -rw-r--r-- | src/video_core/buffer_cache/buffer_base.h | 2 | ||||
| -rw-r--r-- | src/video_core/buffer_cache/buffer_cache.h | 49 |
2 files changed, 26 insertions, 25 deletions
diff --git a/src/video_core/buffer_cache/buffer_base.h b/src/video_core/buffer_cache/buffer_base.h index 3e20608ca..0b2bc67b1 100644 --- a/src/video_core/buffer_cache/buffer_base.h +++ b/src/video_core/buffer_cache/buffer_base.h | |||
| @@ -36,7 +36,7 @@ struct NullBufferParams {}; | |||
| 36 | template <class RasterizerInterface> | 36 | template <class RasterizerInterface> |
| 37 | class BufferBase { | 37 | class BufferBase { |
| 38 | static constexpr u64 PAGES_PER_WORD = 64; | 38 | static constexpr u64 PAGES_PER_WORD = 64; |
| 39 | static constexpr u64 BYTES_PER_PAGE = Core::Memory::PAGE_SIZE; | 39 | static constexpr u64 BYTES_PER_PAGE = Core::Memory::YUZU_PAGESIZE; |
| 40 | static constexpr u64 BYTES_PER_WORD = PAGES_PER_WORD * BYTES_PER_PAGE; | 40 | static constexpr u64 BYTES_PER_WORD = PAGES_PER_WORD * BYTES_PER_PAGE; |
| 41 | 41 | ||
| 42 | /// Vector tracking modified pages tightly packed with small vector optimization | 42 | /// Vector tracking modified pages tightly packed with small vector optimization |
diff --git a/src/video_core/buffer_cache/buffer_cache.h b/src/video_core/buffer_cache/buffer_cache.h index b74ad7900..f015dae56 100644 --- a/src/video_core/buffer_cache/buffer_cache.h +++ b/src/video_core/buffer_cache/buffer_cache.h | |||
| @@ -60,8 +60,8 @@ class BufferCache { | |||
| 60 | 60 | ||
| 61 | // Page size for caching purposes. | 61 | // Page size for caching purposes. |
| 62 | // This is unrelated to the CPU page size and it can be changed as it seems optimal. | 62 | // This is unrelated to the CPU page size and it can be changed as it seems optimal. |
| 63 | static constexpr u32 PAGE_BITS = 16; | 63 | static constexpr u32 YUZU_PAGEBITS = 16; |
| 64 | static constexpr u64 PAGE_SIZE = u64{1} << PAGE_BITS; | 64 | static constexpr u64 YUZU_PAGESIZE = u64{1} << YUZU_PAGEBITS; |
| 65 | 65 | ||
| 66 | static constexpr bool IS_OPENGL = P::IS_OPENGL; | 66 | static constexpr bool IS_OPENGL = P::IS_OPENGL; |
| 67 | static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = | 67 | static constexpr bool HAS_PERSISTENT_UNIFORM_BUFFER_BINDINGS = |
| @@ -216,8 +216,8 @@ private: | |||
| 216 | 216 | ||
| 217 | template <typename Func> | 217 | template <typename Func> |
| 218 | void ForEachBufferInRange(VAddr cpu_addr, u64 size, Func&& func) { | 218 | void ForEachBufferInRange(VAddr cpu_addr, u64 size, Func&& func) { |
| 219 | const u64 page_end = Common::DivCeil(cpu_addr + size, PAGE_SIZE); | 219 | const u64 page_end = Common::DivCeil(cpu_addr + size, YUZU_PAGESIZE); |
| 220 | for (u64 page = cpu_addr >> PAGE_BITS; page < page_end;) { | 220 | for (u64 page = cpu_addr >> YUZU_PAGEBITS; page < page_end;) { |
| 221 | const BufferId buffer_id = page_table[page]; | 221 | const BufferId buffer_id = page_table[page]; |
| 222 | if (!buffer_id) { | 222 | if (!buffer_id) { |
| 223 | ++page; | 223 | ++page; |
| @@ -227,7 +227,7 @@ private: | |||
| 227 | func(buffer_id, buffer); | 227 | func(buffer_id, buffer); |
| 228 | 228 | ||
| 229 | const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); | 229 | const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); |
| 230 | page = Common::DivCeil(end_addr, PAGE_SIZE); | 230 | page = Common::DivCeil(end_addr, YUZU_PAGESIZE); |
| 231 | } | 231 | } |
| 232 | } | 232 | } |
| 233 | 233 | ||
| @@ -262,8 +262,8 @@ private: | |||
| 262 | } | 262 | } |
| 263 | 263 | ||
| 264 | static bool IsRangeGranular(VAddr cpu_addr, size_t size) { | 264 | static bool IsRangeGranular(VAddr cpu_addr, size_t size) { |
| 265 | return (cpu_addr & ~Core::Memory::PAGE_MASK) == | 265 | return (cpu_addr & ~Core::Memory::YUZU_PAGEMASK) == |
| 266 | ((cpu_addr + size) & ~Core::Memory::PAGE_MASK); | 266 | ((cpu_addr + size) & ~Core::Memory::YUZU_PAGEMASK); |
| 267 | } | 267 | } |
| 268 | 268 | ||
| 269 | void RunGarbageCollector(); | 269 | void RunGarbageCollector(); |
| @@ -439,7 +439,7 @@ private: | |||
| 439 | u64 minimum_memory = 0; | 439 | u64 minimum_memory = 0; |
| 440 | u64 critical_memory = 0; | 440 | u64 critical_memory = 0; |
| 441 | 441 | ||
| 442 | std::array<BufferId, ((1ULL << 39) >> PAGE_BITS)> page_table; | 442 | std::array<BufferId, ((1ULL << 39) >> YUZU_PAGEBITS)> page_table; |
| 443 | }; | 443 | }; |
| 444 | 444 | ||
| 445 | template <class P> | 445 | template <class P> |
| @@ -926,8 +926,8 @@ void BufferCache<P>::PopAsyncFlushes() {} | |||
| 926 | 926 | ||
| 927 | template <class P> | 927 | template <class P> |
| 928 | bool BufferCache<P>::IsRegionGpuModified(VAddr addr, size_t size) { | 928 | bool BufferCache<P>::IsRegionGpuModified(VAddr addr, size_t size) { |
| 929 | const u64 page_end = Common::DivCeil(addr + size, PAGE_SIZE); | 929 | const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); |
| 930 | for (u64 page = addr >> PAGE_BITS; page < page_end;) { | 930 | for (u64 page = addr >> YUZU_PAGEBITS; page < page_end;) { |
| 931 | const BufferId image_id = page_table[page]; | 931 | const BufferId image_id = page_table[page]; |
| 932 | if (!image_id) { | 932 | if (!image_id) { |
| 933 | ++page; | 933 | ++page; |
| @@ -938,7 +938,7 @@ bool BufferCache<P>::IsRegionGpuModified(VAddr addr, size_t size) { | |||
| 938 | return true; | 938 | return true; |
| 939 | } | 939 | } |
| 940 | const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); | 940 | const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); |
| 941 | page = Common::DivCeil(end_addr, PAGE_SIZE); | 941 | page = Common::DivCeil(end_addr, YUZU_PAGESIZE); |
| 942 | } | 942 | } |
| 943 | return false; | 943 | return false; |
| 944 | } | 944 | } |
| @@ -946,8 +946,8 @@ bool BufferCache<P>::IsRegionGpuModified(VAddr addr, size_t size) { | |||
| 946 | template <class P> | 946 | template <class P> |
| 947 | bool BufferCache<P>::IsRegionRegistered(VAddr addr, size_t size) { | 947 | bool BufferCache<P>::IsRegionRegistered(VAddr addr, size_t size) { |
| 948 | const VAddr end_addr = addr + size; | 948 | const VAddr end_addr = addr + size; |
| 949 | const u64 page_end = Common::DivCeil(end_addr, PAGE_SIZE); | 949 | const u64 page_end = Common::DivCeil(end_addr, YUZU_PAGESIZE); |
| 950 | for (u64 page = addr >> PAGE_BITS; page < page_end;) { | 950 | for (u64 page = addr >> YUZU_PAGEBITS; page < page_end;) { |
| 951 | const BufferId buffer_id = page_table[page]; | 951 | const BufferId buffer_id = page_table[page]; |
| 952 | if (!buffer_id) { | 952 | if (!buffer_id) { |
| 953 | ++page; | 953 | ++page; |
| @@ -959,15 +959,15 @@ bool BufferCache<P>::IsRegionRegistered(VAddr addr, size_t size) { | |||
| 959 | if (buf_start_addr < end_addr && addr < buf_end_addr) { | 959 | if (buf_start_addr < end_addr && addr < buf_end_addr) { |
| 960 | return true; | 960 | return true; |
| 961 | } | 961 | } |
| 962 | page = Common::DivCeil(end_addr, PAGE_SIZE); | 962 | page = Common::DivCeil(end_addr, YUZU_PAGESIZE); |
| 963 | } | 963 | } |
| 964 | return false; | 964 | return false; |
| 965 | } | 965 | } |
| 966 | 966 | ||
| 967 | template <class P> | 967 | template <class P> |
| 968 | bool BufferCache<P>::IsRegionCpuModified(VAddr addr, size_t size) { | 968 | bool BufferCache<P>::IsRegionCpuModified(VAddr addr, size_t size) { |
| 969 | const u64 page_end = Common::DivCeil(addr + size, PAGE_SIZE); | 969 | const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); |
| 970 | for (u64 page = addr >> PAGE_BITS; page < page_end;) { | 970 | for (u64 page = addr >> YUZU_PAGEBITS; page < page_end;) { |
| 971 | const BufferId image_id = page_table[page]; | 971 | const BufferId image_id = page_table[page]; |
| 972 | if (!image_id) { | 972 | if (!image_id) { |
| 973 | ++page; | 973 | ++page; |
| @@ -978,7 +978,7 @@ bool BufferCache<P>::IsRegionCpuModified(VAddr addr, size_t size) { | |||
| 978 | return true; | 978 | return true; |
| 979 | } | 979 | } |
| 980 | const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); | 980 | const VAddr end_addr = buffer.CpuAddr() + buffer.SizeBytes(); |
| 981 | page = Common::DivCeil(end_addr, PAGE_SIZE); | 981 | page = Common::DivCeil(end_addr, YUZU_PAGESIZE); |
| 982 | } | 982 | } |
| 983 | return false; | 983 | return false; |
| 984 | } | 984 | } |
| @@ -1472,7 +1472,7 @@ BufferId BufferCache<P>::FindBuffer(VAddr cpu_addr, u32 size) { | |||
| 1472 | if (cpu_addr == 0) { | 1472 | if (cpu_addr == 0) { |
| 1473 | return NULL_BUFFER_ID; | 1473 | return NULL_BUFFER_ID; |
| 1474 | } | 1474 | } |
| 1475 | const u64 page = cpu_addr >> PAGE_BITS; | 1475 | const u64 page = cpu_addr >> YUZU_PAGEBITS; |
| 1476 | const BufferId buffer_id = page_table[page]; | 1476 | const BufferId buffer_id = page_table[page]; |
| 1477 | if (!buffer_id) { | 1477 | if (!buffer_id) { |
| 1478 | return CreateBuffer(cpu_addr, size); | 1478 | return CreateBuffer(cpu_addr, size); |
| @@ -1493,8 +1493,9 @@ typename BufferCache<P>::OverlapResult BufferCache<P>::ResolveOverlaps(VAddr cpu | |||
| 1493 | VAddr end = cpu_addr + wanted_size; | 1493 | VAddr end = cpu_addr + wanted_size; |
| 1494 | int stream_score = 0; | 1494 | int stream_score = 0; |
| 1495 | bool has_stream_leap = false; | 1495 | bool has_stream_leap = false; |
| 1496 | for (; cpu_addr >> PAGE_BITS < Common::DivCeil(end, PAGE_SIZE); cpu_addr += PAGE_SIZE) { | 1496 | for (; cpu_addr >> YUZU_PAGEBITS < Common::DivCeil(end, YUZU_PAGESIZE); |
| 1497 | const BufferId overlap_id = page_table[cpu_addr >> PAGE_BITS]; | 1497 | cpu_addr += YUZU_PAGESIZE) { |
| 1498 | const BufferId overlap_id = page_table[cpu_addr >> YUZU_PAGEBITS]; | ||
| 1498 | if (!overlap_id) { | 1499 | if (!overlap_id) { |
| 1499 | continue; | 1500 | continue; |
| 1500 | } | 1501 | } |
| @@ -1520,11 +1521,11 @@ typename BufferCache<P>::OverlapResult BufferCache<P>::ResolveOverlaps(VAddr cpu | |||
| 1520 | // as a stream buffer. Increase the size to skip constantly recreating buffers. | 1521 | // as a stream buffer. Increase the size to skip constantly recreating buffers. |
| 1521 | has_stream_leap = true; | 1522 | has_stream_leap = true; |
| 1522 | if (expands_right) { | 1523 | if (expands_right) { |
| 1523 | begin -= PAGE_SIZE * 256; | 1524 | begin -= YUZU_PAGESIZE * 256; |
| 1524 | cpu_addr = begin; | 1525 | cpu_addr = begin; |
| 1525 | } | 1526 | } |
| 1526 | if (expands_left) { | 1527 | if (expands_left) { |
| 1527 | end += PAGE_SIZE * 256; | 1528 | end += YUZU_PAGESIZE * 256; |
| 1528 | } | 1529 | } |
| 1529 | } | 1530 | } |
| 1530 | } | 1531 | } |
| @@ -1598,8 +1599,8 @@ void BufferCache<P>::ChangeRegister(BufferId buffer_id) { | |||
| 1598 | } | 1599 | } |
| 1599 | const VAddr cpu_addr_begin = buffer.CpuAddr(); | 1600 | const VAddr cpu_addr_begin = buffer.CpuAddr(); |
| 1600 | const VAddr cpu_addr_end = cpu_addr_begin + size; | 1601 | const VAddr cpu_addr_end = cpu_addr_begin + size; |
| 1601 | const u64 page_begin = cpu_addr_begin / PAGE_SIZE; | 1602 | const u64 page_begin = cpu_addr_begin / YUZU_PAGESIZE; |
| 1602 | const u64 page_end = Common::DivCeil(cpu_addr_end, PAGE_SIZE); | 1603 | const u64 page_end = Common::DivCeil(cpu_addr_end, YUZU_PAGESIZE); |
| 1603 | for (u64 page = page_begin; page != page_end; ++page) { | 1604 | for (u64 page = page_begin; page != page_end; ++page) { |
| 1604 | if constexpr (insert) { | 1605 | if constexpr (insert) { |
| 1605 | page_table[page] = buffer_id; | 1606 | page_table[page] = buffer_id; |