Просмотр исходного кода

device_memory: Enable direct mapped addresses for nce

GPUCode 2 лет назад
Родитель
Сommit
4838837620
5 измененных файлов с 21 добавлено и 8 удалено
  1. 8 2
      src/common/settings.cpp
  2. 2 1
      src/common/settings.h
  3. 2 1
      src/core/core.cpp
  4. 8 3
      src/core/device_memory.cpp
  5. 1 1
      src/core/device_memory.h

+ 8 - 2
src/common/settings.cpp

@@ -156,8 +156,14 @@ bool IsFastmemEnabled() {
     return true;
 }
 
-bool IsNceEnabled(bool is_64bit) {
-    return values.cpu_backend.GetValue() == CpuBackend::Nce && is_64bit;
+static bool is_nce_enabled = false;
+
+void SetNceEnabled(bool is_64bit) {
+    is_nce_enabled = values.cpu_backend.GetValue() == CpuBackend::Nce && is_64bit;
+}
+
+bool IsNceEnabled() {
+    return is_nce_enabled;
 }
 
 bool IsDockedMode() {

+ 2 - 1
src/common/settings.h

@@ -573,7 +573,8 @@ bool IsGPULevelExtreme();
 bool IsGPULevelHigh();
 
 bool IsFastmemEnabled();
-bool IsNceEnabled(bool is_64bit = true);
+void SetNceEnabled(bool is_64bit);
+bool IsNceEnabled();
 
 bool IsDockedMode();
 

+ 2 - 1
src/core/core.cpp

@@ -136,7 +136,8 @@ struct System::Impl {
     }
 
     void Initialize(System& system) {
-        device_memory = std::make_unique<Core::DeviceMemory>();
+        const bool direct_mapped_address = Settings::IsNceEnabled();
+        device_memory = std::make_unique<Core::DeviceMemory>(direct_mapped_address);
 
         is_multicore = Settings::values.use_multi_core.GetValue();
         extended_memory_layout =

+ 8 - 3
src/core/device_memory.cpp

@@ -6,15 +6,20 @@
 
 namespace Core {
 
-#ifdef ANDROID
+#ifdef ARCHITECTURE_arm64
 constexpr size_t VirtualReserveSize = 1ULL << 38;
 #else
 constexpr size_t VirtualReserveSize = 1ULL << 39;
 #endif
 
-DeviceMemory::DeviceMemory()
+DeviceMemory::DeviceMemory(bool direct_mapped_address)
     : buffer{Kernel::Board::Nintendo::Nx::KSystemControl::Init::GetIntendedMemorySize(),
-             VirtualReserveSize} {}
+             VirtualReserveSize} {
+    if (direct_mapped_address) {
+        buffer.EnableDirectMappedAddress();
+    }
+}
+
 DeviceMemory::~DeviceMemory() = default;
 
 } // namespace Core

+ 1 - 1
src/core/device_memory.h

@@ -18,7 +18,7 @@ enum : u64 {
 
 class DeviceMemory {
 public:
-    explicit DeviceMemory();
+    explicit DeviceMemory(bool direct_mapped_address);
     ~DeviceMemory();
 
     DeviceMemory& operator=(const DeviceMemory&) = delete;