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

video_core/memory_manager: Add a const qualified variant of GetPointer()

Allows retrieving read-only pointers from a const context externally.
Lioncash 7 лет назад
Родитель
Сommit
34510bcda8
2 измененных файлов с 17 добавлено и 2 удалено
  1. 16 2
      src/video_core/memory_manager.cpp
  2. 1 0
      src/video_core/memory_manager.h

+ 16 - 2
src/video_core/memory_manager.cpp

@@ -180,8 +180,22 @@ u8* MemoryManager::GetPointer(GPUVAddr addr) {
         return {};
     }
 
-    u8* page_pointer{page_table.pointers[addr >> page_bits]};
-    if (page_pointer) {
+    u8* const page_pointer{page_table.pointers[addr >> page_bits]};
+    if (page_pointer != nullptr) {
+        return page_pointer + (addr & page_mask);
+    }
+
+    LOG_ERROR(HW_GPU, "Unknown GetPointer @ 0x{:016X}", addr);
+    return {};
+}
+
+const u8* MemoryManager::GetPointer(GPUVAddr addr) const {
+    if (!IsAddressValid(addr)) {
+        return {};
+    }
+
+    const u8* const page_pointer{page_table.pointers[addr >> page_bits]};
+    if (page_pointer != nullptr) {
         return page_pointer + (addr & page_mask);
     }
 

+ 1 - 0
src/video_core/memory_manager.h

@@ -59,6 +59,7 @@ public:
     void Write(GPUVAddr addr, T data);
 
     u8* GetPointer(GPUVAddr addr);
+    const u8* GetPointer(GPUVAddr addr) const;
 
     void ReadBlock(GPUVAddr src_addr, void* dest_buffer, std::size_t size);
     void WriteBlock(GPUVAddr dest_addr, const void* src_buffer, std::size_t size);