summaryrefslogtreecommitdiff
path: root/src/video_core/rasterizer_accelerated.cpp
diff options
context:
space:
mode:
authorGravatar liamwhite2023-07-26 10:33:28 -0400
committerGravatar GitHub2023-07-26 10:33:28 -0400
commitd3da1e6517fe27670b6c2d713d144872d55057d8 (patch)
treeab5c72b17b15185ec40945c5ba29400569b50630 /src/video_core/rasterizer_accelerated.cpp
parentMerge pull request #11142 from german77/avoid_crash (diff)
parentFixes and workarounds to make UBSan happier on macOS (diff)
downloadyuzu-d3da1e6517fe27670b6c2d713d144872d55057d8.tar.gz
yuzu-d3da1e6517fe27670b6c2d713d144872d55057d8.tar.xz
yuzu-d3da1e6517fe27670b6c2d713d144872d55057d8.zip
Merge pull request #10990 from comex/ubsan
Fixes and workarounds to make UBSan happier on macOS
Diffstat (limited to 'src/video_core/rasterizer_accelerated.cpp')
-rw-r--r--src/video_core/rasterizer_accelerated.cpp5
1 files changed, 3 insertions, 2 deletions
diff --git a/src/video_core/rasterizer_accelerated.cpp b/src/video_core/rasterizer_accelerated.cpp
index 4a197d65d..f200a650f 100644
--- a/src/video_core/rasterizer_accelerated.cpp
+++ b/src/video_core/rasterizer_accelerated.cpp
@@ -13,7 +13,8 @@ namespace VideoCore {
13 13
14using namespace Core::Memory; 14using namespace Core::Memory;
15 15
16RasterizerAccelerated::RasterizerAccelerated(Memory& cpu_memory_) : cpu_memory{cpu_memory_} {} 16RasterizerAccelerated::RasterizerAccelerated(Memory& cpu_memory_)
17 : cached_pages(std::make_unique<CachedPages>()), cpu_memory{cpu_memory_} {}
17 18
18RasterizerAccelerated::~RasterizerAccelerated() = default; 19RasterizerAccelerated::~RasterizerAccelerated() = default;
19 20
@@ -26,7 +27,7 @@ void RasterizerAccelerated::UpdatePagesCachedCount(VAddr addr, u64 size, int del
26 std::atomic_thread_fence(std::memory_order_acquire); 27 std::atomic_thread_fence(std::memory_order_acquire);
27 const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE); 28 const u64 page_end = Common::DivCeil(addr + size, YUZU_PAGESIZE);
28 for (u64 page = addr >> YUZU_PAGEBITS; page != page_end; ++page) { 29 for (u64 page = addr >> YUZU_PAGEBITS; page != page_end; ++page) {
29 std::atomic_uint16_t& count = cached_pages.at(page >> 2).Count(page); 30 std::atomic_uint16_t& count = cached_pages->at(page >> 2).Count(page);
30 31
31 if (delta > 0) { 32 if (delta > 0) {
32 ASSERT_MSG(count.load(std::memory_order::relaxed) < UINT16_MAX, "Count may overflow!"); 33 ASSERT_MSG(count.load(std::memory_order::relaxed) < UINT16_MAX, "Count may overflow!");