diff options
| author | 2020-02-15 22:37:29 -0500 | |
|---|---|---|
| committer | 2020-02-15 22:37:29 -0500 | |
| commit | 619f64d7f4d970e0e6fb7529a4fe5a9fbfffab53 (patch) | |
| tree | d10afc301c43914fd67686ebffeec4b2b052df82 /src | |
| parent | Merge pull request #3401 from FernandoS27/synchronization (diff) | |
| parent | Revert "video_core: memory_manager: Use GPU interface for cache functions." (diff) | |
| download | yuzu-619f64d7f4d970e0e6fb7529a4fe5a9fbfffab53.tar.gz yuzu-619f64d7f4d970e0e6fb7529a4fe5a9fbfffab53.tar.xz yuzu-619f64d7f4d970e0e6fb7529a4fe5a9fbfffab53.zip | |
Merge pull request #3419 from yuzu-emu/revert-3386-gpu-mem-interface
Revert "video_core: memory_manager: Use GPU interface for cache functions."
Diffstat (limited to '')
| -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, 14 insertions, 9 deletions
diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 4419ab735..7d7137109 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp | |||
| @@ -24,7 +24,7 @@ MICROPROFILE_DEFINE(GPU_wait, "GPU", "Wait for the GPU", MP_RGB(128, 128, 192)); | |||
| 24 | GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async) | 24 | GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer, bool is_async) |
| 25 | : system{system}, renderer{renderer}, is_async{is_async} { | 25 | : system{system}, renderer{renderer}, is_async{is_async} { |
| 26 | auto& rasterizer{renderer.Rasterizer()}; | 26 | auto& rasterizer{renderer.Rasterizer()}; |
| 27 | memory_manager = std::make_unique<Tegra::MemoryManager>(system); | 27 | memory_manager = std::make_unique<Tegra::MemoryManager>(system, rasterizer); |
| 28 | dma_pusher = std::make_unique<Tegra::DmaPusher>(*this); | 28 | dma_pusher = std::make_unique<Tegra::DmaPusher>(*this); |
| 29 | maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager); | 29 | maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager); |
| 30 | fermi_2d = std::make_unique<Engines::Fermi2D>(rasterizer); | 30 | 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 f1d50be3e..11848fbce 100644 --- a/src/video_core/memory_manager.cpp +++ b/src/video_core/memory_manager.cpp | |||
| @@ -9,12 +9,13 @@ | |||
| 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" | ||
| 13 | #include "video_core/memory_manager.h" | 12 | #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) : system{system} { | 17 | MemoryManager::MemoryManager(Core::System& system, VideoCore::RasterizerInterface& rasterizer) |
| 18 | : rasterizer{rasterizer}, system{system} { | ||
| 18 | std::fill(page_table.pointers.begin(), page_table.pointers.end(), nullptr); | 19 | std::fill(page_table.pointers.begin(), page_table.pointers.end(), nullptr); |
| 19 | std::fill(page_table.attributes.begin(), page_table.attributes.end(), | 20 | std::fill(page_table.attributes.begin(), page_table.attributes.end(), |
| 20 | Common::PageType::Unmapped); | 21 | Common::PageType::Unmapped); |
| @@ -83,8 +84,7 @@ GPUVAddr MemoryManager::UnmapBuffer(GPUVAddr gpu_addr, u64 size) { | |||
| 83 | const auto cpu_addr = GpuToCpuAddress(gpu_addr); | 84 | const auto cpu_addr = GpuToCpuAddress(gpu_addr); |
| 84 | ASSERT(cpu_addr); | 85 | ASSERT(cpu_addr); |
| 85 | 86 | ||
| 86 | system.GPU().FlushAndInvalidateRegion(cache_addr, aligned_size); | 87 | rasterizer.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 | system.GPU().FlushRegion(ToCacheAddr(src_ptr), copy_amount); | 245 | rasterizer.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 | system.GPU().InvalidateRegion(ToCacheAddr(dest_ptr), copy_amount); | 295 | rasterizer.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 | system.GPU().FlushRegion(ToCacheAddr(src_ptr), copy_amount); | 343 | rasterizer.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 393447eb4..aea010087 100644 --- a/src/video_core/memory_manager.h +++ b/src/video_core/memory_manager.h | |||
| @@ -10,6 +10,10 @@ | |||
| 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 | |||
| 13 | namespace Core { | 17 | namespace Core { |
| 14 | class System; | 18 | class System; |
| 15 | } | 19 | } |
| @@ -47,7 +51,7 @@ struct VirtualMemoryArea { | |||
| 47 | 51 | ||
| 48 | class MemoryManager final { | 52 | class MemoryManager final { |
| 49 | public: | 53 | public: |
| 50 | explicit MemoryManager(Core::System& system); | 54 | explicit MemoryManager(Core::System& system, VideoCore::RasterizerInterface& rasterizer); |
| 51 | ~MemoryManager(); | 55 | ~MemoryManager(); |
| 52 | 56 | ||
| 53 | GPUVAddr AllocateSpace(u64 size, u64 align); | 57 | GPUVAddr AllocateSpace(u64 size, u64 align); |
| @@ -172,6 +176,7 @@ private: | |||
| 172 | 176 | ||
| 173 | Common::PageTable page_table{page_bits}; | 177 | Common::PageTable page_table{page_bits}; |
| 174 | VMAMap vma_map; | 178 | VMAMap vma_map; |
| 179 | VideoCore::RasterizerInterface& rasterizer; | ||
| 175 | 180 | ||
| 176 | Core::System& system; | 181 | Core::System& system; |
| 177 | }; | 182 | }; |