Common/MemArenaWin: Handle file mappings >= 4GB.

This commit is contained in:
Admiral H. Curtiss 2023-05-11 01:35:23 +02:00
parent b0d7fa9eb1
commit ff5bcba966
No known key found for this signature in database
GPG Key ID: F051B4C4044F33FB
1 changed files with 16 additions and 4 deletions

View File

@ -97,11 +97,22 @@ MemArena::~MemArena()
ReleaseSHMSegment(); ReleaseSHMSegment();
} }
static DWORD GetHighDWORD(u64 value)
{
return static_cast<DWORD>(value >> 32);
}
static DWORD GetLowDWORD(u64 value)
{
return static_cast<DWORD>(value);
}
void MemArena::GrabSHMSegment(size_t size) void MemArena::GrabSHMSegment(size_t size)
{ {
const std::string name = "dolphin-emu." + std::to_string(GetCurrentProcessId()); const std::string name = "dolphin-emu." + std::to_string(GetCurrentProcessId());
m_memory_handle = CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, 0, m_memory_handle =
static_cast<DWORD>(size), UTF8ToTStr(name).c_str()); CreateFileMapping(INVALID_HANDLE_VALUE, nullptr, PAGE_READWRITE, GetHighDWORD(size),
GetLowDWORD(size), UTF8ToTStr(name).c_str());
} }
void MemArena::ReleaseSHMSegment() void MemArena::ReleaseSHMSegment()
@ -114,8 +125,9 @@ void MemArena::ReleaseSHMSegment()
void* MemArena::CreateView(s64 offset, size_t size) void* MemArena::CreateView(s64 offset, size_t size)
{ {
return MapViewOfFileEx(m_memory_handle, FILE_MAP_ALL_ACCESS, 0, (DWORD)((u64)offset), size, const u64 off = static_cast<u64>(offset);
nullptr); return MapViewOfFileEx(m_memory_handle, FILE_MAP_ALL_ACCESS, GetHighDWORD(off), GetLowDWORD(off),
size, nullptr);
} }
void MemArena::ReleaseView(void* view, size_t size) void MemArena::ReleaseView(void* view, size_t size)