Browse Source

disable NCE temporarily to fix mvk issues

Signed-off-by: lizzie <lizzie@eden-emu.dev>
liz-dynarmic-macos-fbsd-port
lizzie 3 months ago
committed by Caio Oliveira
parent
commit
5ab21fd843
No known key found for this signature in database GPG Key ID: 362DA3DC1901E080
  1. 3
      CMakeLists.txt
  2. 12
      src/common/host_memory.cpp

3
CMakeLists.txt

@ -303,7 +303,8 @@ if (YUZU_LEGACY)
add_compile_definitions(YUZU_LEGACY)
endif()
if (ARCHITECTURE_arm64 AND (ANDROID OR APPLE OR PLATFORM_LINUX))
# TODO: APPLE
if (ARCHITECTURE_arm64 AND (ANDROID OR PLATFORM_LINUX))
set(HAS_NCE 1)
add_compile_definitions(HAS_NCE=1)
endif()

12
src/common/host_memory.cpp

@ -397,8 +397,8 @@ private:
#else // ^^^ Windows ^^^ vvv POSIX vvv
#ifdef ARCHITECTURE_arm64
// Use NCE friendly mapping techniques
#if defined(ARCHITECTURE_arm64) && defined(HAS_NCE)
static void* ChooseVirtualBase(size_t virtual_size) {
constexpr uintptr_t Map36BitSize = (1ULL << 36);
#ifdef __APPLE__
@ -484,9 +484,7 @@ static void* ChooseVirtualBase(size_t virtual_size) {
return MAP_FAILED;
#endif
}
#else
static void* ChooseVirtualBase(size_t virtual_size) {
#if defined(__FreeBSD__) || defined(__DragonFly__) || defined(__OpenBSD__) || defined(__sun__) || defined(__HAIKU__) || defined(__managarm__) || defined(__AIX__)
void* virtual_base = mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE | MAP_ALIGNED_SUPER, -1, 0);
@ -495,7 +493,6 @@ static void* ChooseVirtualBase(size_t virtual_size) {
#endif
return mmap(nullptr, virtual_size, PROT_READ | PROT_WRITE, MAP_PRIVATE | MAP_ANONYMOUS | MAP_NORESERVE, -1, 0);
}
#endif
#if defined(__sun__) || defined(__HAIKU__) || defined(__NetBSD__) || defined(__DragonFly__)
@ -622,9 +619,10 @@ public:
prot_flags |= PROT_READ;
if (True(perms & MemoryPermission::Write))
prot_flags |= PROT_WRITE;
#ifdef ARCHITECTURE_arm64
// W^X only supported with NCE
#if defined(ARCHITECTURE_arm64) && defined(HAS_NCE)
if (True(perms & MemoryPermission::Execute))
prot_flags |= PROT_EXEC;
flags |= PROT_EXEC;
#endif
int flags = (fd > 0 ? MAP_SHARED : MAP_PRIVATE) | MAP_FIXED;
void* ret = mmap(virtual_base + virtual_offset, length, prot_flags, flags, fd, host_offset);

Loading…
Cancel
Save