diff options
| author | 2020-02-08 21:15:27 -0500 | |
|---|---|---|
| committer | 2020-02-08 21:15:27 -0500 | |
| commit | 6536cc97410bc20e2bb9c81620c15f353e1ed97f (patch) | |
| tree | b3171f77d8e6d2c4398858f4f79d565a5d6780ae | |
| parent | Merge pull request #3378 from ReinUsesLisp/uscaled (diff) | |
| parent | video_core: memory_manager: Use GPU interface for cache functions. (diff) | |
| download | yuzu-6536cc97410bc20e2bb9c81620c15f353e1ed97f.tar.gz yuzu-6536cc97410bc20e2bb9c81620c15f353e1ed97f.tar.xz yuzu-6536cc97410bc20e2bb9c81620c15f353e1ed97f.zip | |
Merge pull request #3386 from bunnei/gpu-mem-interface
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)); | |||
| 23 | GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async) | 23 | GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async) |
| 24 | : system{system}, renderer{renderer}, is_async{is_async} { | 24 | : system{system}, renderer{renderer}, is_async{is_async} { |
| 25 | auto& rasterizer{renderer.Rasterizer()}; | 25 | auto& rasterizer{renderer.Rasterizer()}; |
| 26 | memory_manager = std::make_unique<Tegra::MemoryManager>(system, rasterizer); | 26 | memory_manager = std::make_unique<Tegra::MemoryManager>(system); |
| 27 | dma_pusher = std::make_unique<Tegra::DmaPusher>(*this); | 27 | dma_pusher = std::make_unique<Tegra::DmaPusher>(*this); |
| 28 | maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager); | 28 | maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager); |
| 29 | fermi_2d = std::make_unique<Engines::Fermi2D>(rasterizer); | 29 | 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 @@ | |||
| 9 | #include "core/hle/kernel/process.h" | 9 | #include "core/hle/kernel/process.h" |
| 10 | #include "core/hle/kernel/vm_manager.h" | 10 | #include "core/hle/kernel/vm_manager.h" |
| 11 | #include "core/memory.h" | 11 | #include "core/memory.h" |
| 12 | #include "video_core/gpu.h" | ||
| 12 | #include "video_core/memory_manager.h" | 13 | #include "video_core/memory_manager.h" |
| 13 | #include "video_core/rasterizer_interface.h" | ||
| 14 | 14 | ||
| 15 | namespace Tegra { | 15 | namespace Tegra { |
| 16 | 16 | ||
| 17 | MemoryManager::MemoryManager(Core::System& system, VideoCore::RasterizerInterface& rasterizer) | 17 | MemoryManager::MemoryManager(Core::System& system) : system{system} { |
| 18 | : rasterizer{rasterizer}, system{system} { | ||
| 19 | std::fill(page_table.pointers.begin(), page_table.pointers.end(), nullptr); | 18 | std::fill(page_table.pointers.begin(), page_table.pointers.end(), nullptr); |
| 20 | std::fill(page_table.attributes.begin(), page_table.attributes.end(), | 19 | std::fill(page_table.attributes.begin(), page_table.attributes.end(), |
| 21 | Common::PageType::Unmapped); | 20 | Common::PageType::Unmapped); |
| @@ -84,7 +83,8 @@ GPUVAddr MemoryManager::UnmapBuffer(GPUVAddr gpu_addr, u64 size) { | |||
| 84 | const auto cpu_addr = GpuToCpuAddress(gpu_addr); | 83 | const auto cpu_addr = GpuToCpuAddress(gpu_addr); |
| 85 | ASSERT(cpu_addr); | 84 | ASSERT(cpu_addr); |
| 86 | 85 | ||
| 87 | rasterizer.FlushAndInvalidateRegion(cache_addr, aligned_size); | 86 | system.GPU().FlushAndInvalidateRegion(cache_addr, aligned_size); |
| 87 | |||
| 88 | UnmapRange(gpu_addr, aligned_size); | 88 | UnmapRange(gpu_addr, aligned_size); |
| 89 | ASSERT(system.CurrentProcess() | 89 | ASSERT(system.CurrentProcess() |
| 90 | ->VMManager() | 90 | ->VMManager() |
| @@ -242,7 +242,7 @@ void MemoryManager::ReadBlock(GPUVAddr src_addr, void* dest_buffer, const std::s | |||
| 242 | switch (page_table.attributes[page_index]) { | 242 | switch (page_table.attributes[page_index]) { |
| 243 | case Common::PageType::Memory: { | 243 | case Common::PageType::Memory: { |
| 244 | const u8* src_ptr{page_table.pointers[page_index] + page_offset}; | 244 | const u8* src_ptr{page_table.pointers[page_index] + page_offset}; |
| 245 | rasterizer.FlushRegion(ToCacheAddr(src_ptr), copy_amount); | 245 | system.GPU().FlushRegion(ToCacheAddr(src_ptr), copy_amount); |
| 246 | std::memcpy(dest_buffer, src_ptr, copy_amount); | 246 | std::memcpy(dest_buffer, src_ptr, copy_amount); |
| 247 | break; | 247 | break; |
| 248 | } | 248 | } |
| @@ -292,7 +292,7 @@ void MemoryManager::WriteBlock(GPUVAddr dest_addr, const void* src_buffer, const | |||
| 292 | switch (page_table.attributes[page_index]) { | 292 | switch (page_table.attributes[page_index]) { |
| 293 | case Common::PageType::Memory: { | 293 | case Common::PageType::Memory: { |
| 294 | u8* dest_ptr{page_table.pointers[page_index] + page_offset}; | 294 | u8* dest_ptr{page_table.pointers[page_index] + page_offset}; |
| 295 | rasterizer.InvalidateRegion(ToCacheAddr(dest_ptr), copy_amount); | 295 | system.GPU().InvalidateRegion(ToCacheAddr(dest_ptr), copy_amount); |
| 296 | std::memcpy(dest_ptr, src_buffer, copy_amount); | 296 | std::memcpy(dest_ptr, src_buffer, copy_amount); |
| 297 | break; | 297 | break; |
| 298 | } | 298 | } |
| @@ -340,7 +340,7 @@ void MemoryManager::CopyBlock(GPUVAddr dest_addr, GPUVAddr src_addr, const std:: | |||
| 340 | switch (page_table.attributes[page_index]) { | 340 | switch (page_table.attributes[page_index]) { |
| 341 | case Common::PageType::Memory: { | 341 | case Common::PageType::Memory: { |
| 342 | const u8* src_ptr{page_table.pointers[page_index] + page_offset}; | 342 | const u8* src_ptr{page_table.pointers[page_index] + page_offset}; |
| 343 | rasterizer.FlushRegion(ToCacheAddr(src_ptr), copy_amount); | 343 | system.GPU().FlushRegion(ToCacheAddr(src_ptr), copy_amount); |
| 344 | WriteBlock(dest_addr, src_ptr, copy_amount); | 344 | WriteBlock(dest_addr, src_ptr, copy_amount); |
| 345 | break; | 345 | break; |
| 346 | } | 346 | } |
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 @@ | |||
| 10 | #include "common/common_types.h" | 10 | #include "common/common_types.h" |
| 11 | #include "common/page_table.h" | 11 | #include "common/page_table.h" |
| 12 | 12 | ||
| 13 | namespace VideoCore { | ||
| 14 | class RasterizerInterface; | ||
| 15 | } | ||
| 16 | |||
| 17 | namespace Core { | 13 | namespace Core { |
| 18 | class System; | 14 | class System; |
| 19 | } | 15 | } |
| @@ -51,7 +47,7 @@ struct VirtualMemoryArea { | |||
| 51 | 47 | ||
| 52 | class MemoryManager final { | 48 | class MemoryManager final { |
| 53 | public: | 49 | public: |
| 54 | explicit MemoryManager(Core::System& system, VideoCore::RasterizerInterface& rasterizer); | 50 | explicit MemoryManager(Core::System& system); |
| 55 | ~MemoryManager(); | 51 | ~MemoryManager(); |
| 56 | 52 | ||
| 57 | GPUVAddr AllocateSpace(u64 size, u64 align); | 53 | GPUVAddr AllocateSpace(u64 size, u64 align); |
| @@ -176,7 +172,6 @@ private: | |||
| 176 | 172 | ||
| 177 | Common::PageTable page_table{page_bits}; | 173 | Common::PageTable page_table{page_bits}; |
| 178 | VMAMap vma_map; | 174 | VMAMap vma_map; |
| 179 | VideoCore::RasterizerInterface& rasterizer; | ||
| 180 | 175 | ||
| 181 | Core::System& system; | 176 | Core::System& system; |
| 182 | }; | 177 | }; |