diff options
| author | bunnei <bunneidev@gmail.com> | 2020-02-01 21:01:00 -0500 | 
|---|---|---|
| committer | bunnei <bunneidev@gmail.com> | 2020-02-07 22:59:35 -0500 | 
| commit | 7cacb08cdf8b813d8d564bff747ca2f741bb9f29 (patch) | |
| tree | b3171f77d8e6d2c4398858f4f79d565a5d6780ae | |
| parent | 90bda6602809a7133fac619b9fe712b51a723250 (diff) | |
video_core: memory_manager: Use GPU interface for cache functions.
| -rw-r--r-- | src/video_core/gpu.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/memory_manager.cpp | 14 | ||||
| -rw-r--r-- | src/video_core/memory_manager.h | 7 | 
3 files changed, 9 insertions, 14 deletions
| diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index b9c5c41a2..062ca83b8 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -23,7 +23,7 @@ MICROPROFILE_DEFINE(GPU_wait, "GPU", "Wait for the GPU", MP_RGB(128, 128, 192));  GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async)      : system{system}, renderer{renderer}, is_async{is_async} {      auto& rasterizer{renderer.Rasterizer()}; -    memory_manager = std::make_unique<Tegra::MemoryManager>(system, rasterizer); +    memory_manager = std::make_unique<Tegra::MemoryManager>(system);      dma_pusher = std::make_unique<Tegra::DmaPusher>(*this);      maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager);      fermi_2d = std::make_unique<Engines::Fermi2D>(rasterizer); diff --git a/src/video_core/memory_manager.cpp b/src/video_core/memory_manager.cpp index 11848fbce..f1d50be3e 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp @@ -9,13 +9,12 @@  #include "core/hle/kernel/process.h"  #include "core/hle/kernel/vm_manager.h"  #include "core/memory.h" +#include "video_core/gpu.h"  #include "video_core/memory_manager.h" -#include "video_core/rasterizer_interface.h"  namespace Tegra { -MemoryManager::MemoryManager(Core::System& system, VideoCore::RasterizerInterface& rasterizer) -    : rasterizer{rasterizer}, system{system} { +MemoryManager::MemoryManager(Core::System& system) : system{system} {      std::fill(page_table.pointers.begin(), page_table.pointers.end(), nullptr);      std::fill(page_table.attributes.begin(), page_table.attributes.end(),                Common::PageType::Unmapped); @@ -84,7 +83,8 @@ GPUVAddr MemoryManager::UnmapBuffer(GPUVAddr gpu_addr, u64 size) {      const auto cpu_addr = GpuToCpuAddress(gpu_addr);      ASSERT(cpu_addr); -    rasterizer.FlushAndInvalidateRegion(cache_addr, aligned_size); +    system.GPU().FlushAndInvalidateRegion(cache_addr, aligned_size); +      UnmapRange(gpu_addr, aligned_size);      ASSERT(system.CurrentProcess()                 ->VMManager() @@ -242,7 +242,7 @@ void MemoryManager::ReadBlock(GPUVAddr src_addr, void* dest_buffer, const std::s          switch (page_table.attributes[page_index]) {          case Common::PageType::Memory: {              const u8* src_ptr{page_table.pointers[page_index] + page_offset}; -            rasterizer.FlushRegion(ToCacheAddr(src_ptr), copy_amount); +            system.GPU().FlushRegion(ToCacheAddr(src_ptr), copy_amount);              std::memcpy(dest_buffer, src_ptr, copy_amount);              break;          } @@ -292,7 +292,7 @@ void MemoryManager::WriteBlock(GPUVAddr dest_addr, const void* src_buffer, const          switch (page_table.attributes[page_index]) {          case Common::PageType::Memory: {              u8* dest_ptr{page_table.pointers[page_index] + page_offset}; -            rasterizer.InvalidateRegion(ToCacheAddr(dest_ptr), copy_amount); +            system.GPU().InvalidateRegion(ToCacheAddr(dest_ptr), copy_amount);              std::memcpy(dest_ptr, src_buffer, copy_amount);              break;          } @@ -340,7 +340,7 @@ void MemoryManager::CopyBlock(GPUVAddr dest_addr, GPUVAddr src_addr, const std::          switch (page_table.attributes[page_index]) {          case Common::PageType::Memory: {              const u8* src_ptr{page_table.pointers[page_index] + page_offset}; -            rasterizer.FlushRegion(ToCacheAddr(src_ptr), copy_amount); +            system.GPU().FlushRegion(ToCacheAddr(src_ptr), copy_amount);              WriteBlock(dest_addr, src_ptr, copy_amount);              break;          } diff --git a/src/video_core/memory_manager.h b/src/video_core/memory_manager.h index aea010087..393447eb4 100644 --- a/src/video_core/memory_manager.h +++ b/src/video_core/memory_manager.h @@ -10,10 +10,6 @@  #include "common/common_types.h"  #include "common/page_table.h" -namespace VideoCore { -class RasterizerInterface; -} -  namespace Core {  class System;  } @@ -51,7 +47,7 @@ struct VirtualMemoryArea {  class MemoryManager final {  public: -    explicit MemoryManager(Core::System& system, VideoCore::RasterizerInterface& rasterizer); +    explicit MemoryManager(Core::System& system);      ~MemoryManager();      GPUVAddr AllocateSpace(u64 size, u64 align); @@ -176,7 +172,6 @@ private:      Common::PageTable page_table{page_bits};      VMAMap vma_map; -    VideoCore::RasterizerInterface& rasterizer;      Core::System& system;  }; | 
