diff options
| -rw-r--r-- | src/core/core.cpp | 2 | ||||
| -rw-r--r-- | src/video_core/engines/kepler_memory.cpp | 7 | ||||
| -rw-r--r-- | src/video_core/engines/kepler_memory.h | 9 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_3d.cpp | 12 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_3d.h | 9 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_dma.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/engines/maxwell_dma.h | 10 | ||||
| -rw-r--r-- | src/video_core/gpu.cpp | 8 | ||||
| -rw-r--r-- | src/video_core/gpu.h | 7 | 
9 files changed, 49 insertions, 23 deletions
| diff --git a/src/core/core.cpp b/src/core/core.cpp index 8aa0932c5..ab7181a05 100644 --- a/src/core/core.cpp +++ b/src/core/core.cpp @@ -128,7 +128,7 @@ struct System::Impl {              return ResultStatus::ErrorVideoCore;          } -        gpu_core = std::make_unique<Tegra::GPU>(renderer->Rasterizer()); +        gpu_core = std::make_unique<Tegra::GPU>(system, renderer->Rasterizer());          cpu_core_manager.Initialize(system);          is_powered_on = true; diff --git a/src/video_core/engines/kepler_memory.cpp b/src/video_core/engines/kepler_memory.cpp index 5c1029ddf..4f6126116 100644 --- a/src/video_core/engines/kepler_memory.cpp +++ b/src/video_core/engines/kepler_memory.cpp @@ -2,6 +2,7 @@  // Licensed under GPLv2 or any later version  // Refer to the license.txt file included. +#include "common/assert.h"  #include "common/logging/log.h"  #include "core/core.h"  #include "core/memory.h" @@ -11,9 +12,9 @@  namespace Tegra::Engines { -KeplerMemory::KeplerMemory(VideoCore::RasterizerInterface& rasterizer, +KeplerMemory::KeplerMemory(Core::System& system, VideoCore::RasterizerInterface& rasterizer,                             MemoryManager& memory_manager) -    : memory_manager(memory_manager), rasterizer{rasterizer} {} +    : system{system}, memory_manager(memory_manager), rasterizer{rasterizer} {}  KeplerMemory::~KeplerMemory() = default; @@ -50,7 +51,7 @@ void KeplerMemory::ProcessData(u32 data) {      rasterizer.InvalidateRegion(*dest_address, sizeof(u32));      Memory::Write32(*dest_address, data); -    Core::System::GetInstance().GPU().Maxwell3D().dirty_flags.OnMemoryWrite(); +    system.GPU().Maxwell3D().dirty_flags.OnMemoryWrite();      state.write_offset++;  } diff --git a/src/video_core/engines/kepler_memory.h b/src/video_core/engines/kepler_memory.h index fe9ebc5b9..f680c2ad9 100644 --- a/src/video_core/engines/kepler_memory.h +++ b/src/video_core/engines/kepler_memory.h @@ -5,13 +5,16 @@  #pragma once  #include <array> -#include "common/assert.h"  #include "common/bit_field.h"  #include "common/common_funcs.h"  #include "common/common_types.h"  #include "video_core/gpu.h"  #include "video_core/memory_manager.h" +namespace Core { +class System; +} +  namespace VideoCore {  class RasterizerInterface;  } @@ -23,7 +26,8 @@ namespace Tegra::Engines {  class KeplerMemory final {  public: -    KeplerMemory(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager); +    KeplerMemory(Core::System& system, VideoCore::RasterizerInterface& rasterizer, +                 MemoryManager& memory_manager);      ~KeplerMemory();      /// Write the value to the register identified by method. @@ -76,6 +80,7 @@ public:      } state{};  private: +    Core::System& system;      MemoryManager& memory_manager;      VideoCore::RasterizerInterface& rasterizer; diff --git a/src/video_core/engines/maxwell_3d.cpp b/src/video_core/engines/maxwell_3d.cpp index 86ede5faa..2d2136067 100644 --- a/src/video_core/engines/maxwell_3d.cpp +++ b/src/video_core/engines/maxwell_3d.cpp @@ -19,8 +19,10 @@ namespace Tegra::Engines {  /// First register id that is actually a Macro call.  constexpr u32 MacroRegistersStart = 0xE00; -Maxwell3D::Maxwell3D(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager) -    : memory_manager(memory_manager), rasterizer{rasterizer}, macro_interpreter(*this) { +Maxwell3D::Maxwell3D(Core::System& system, VideoCore::RasterizerInterface& rasterizer, +                     MemoryManager& memory_manager) +    : memory_manager(memory_manager), system{system}, rasterizer{rasterizer}, +      macro_interpreter(*this) {      InitializeRegisterDefaults();  } @@ -103,7 +105,7 @@ void Maxwell3D::CallMacroMethod(u32 method, std::vector<u32> parameters) {  }  void Maxwell3D::CallMethod(const GPU::MethodCall& method_call) { -    auto debug_context = Core::System::GetInstance().GetGPUDebugContext(); +    auto debug_context = system.GetGPUDebugContext();      // It is an error to write to a register other than the current macro's ARG register before it      // has finished execution. @@ -317,7 +319,7 @@ void Maxwell3D::ProcessQueryGet() {              LongQueryResult query_result{};              query_result.value = result;              // TODO(Subv): Generate a real GPU timestamp and write it here instead of CoreTiming -            query_result.timestamp = Core::System::GetInstance().CoreTiming().GetTicks(); +            query_result.timestamp = system.CoreTiming().GetTicks();              Memory::WriteBlock(*address, &query_result, sizeof(query_result));          }          dirty_flags.OnMemoryWrite(); @@ -334,7 +336,7 @@ void Maxwell3D::DrawArrays() {                regs.vertex_buffer.count);      ASSERT_MSG(!(regs.index_array.count && regs.vertex_buffer.count), "Both indexed and direct?"); -    auto debug_context = Core::System::GetInstance().GetGPUDebugContext(); +    auto debug_context = system.GetGPUDebugContext();      if (debug_context) {          debug_context->OnEvent(Tegra::DebugContext::Event::IncomingPrimitiveBatch, nullptr); diff --git a/src/video_core/engines/maxwell_3d.h b/src/video_core/engines/maxwell_3d.h index 1f76aa670..0e3873ffd 100644 --- a/src/video_core/engines/maxwell_3d.h +++ b/src/video_core/engines/maxwell_3d.h @@ -17,6 +17,10 @@  #include "video_core/memory_manager.h"  #include "video_core/textures/texture.h" +namespace Core { +class System; +} +  namespace VideoCore {  class RasterizerInterface;  } @@ -28,7 +32,8 @@ namespace Tegra::Engines {  class Maxwell3D final {  public: -    explicit Maxwell3D(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager); +    explicit Maxwell3D(Core::System& system, VideoCore::RasterizerInterface& rasterizer, +                       MemoryManager& memory_manager);      ~Maxwell3D() = default;      /// Register structure of the Maxwell3D engine. @@ -1131,6 +1136,8 @@ public:  private:      void InitializeRegisterDefaults(); +    Core::System& system; +      VideoCore::RasterizerInterface& rasterizer;      /// Start offsets of each macro in macro_memory diff --git a/src/video_core/engines/maxwell_dma.cpp b/src/video_core/engines/maxwell_dma.cpp index d6c41a5ae..529a14ec7 100644 --- a/src/video_core/engines/maxwell_dma.cpp +++ b/src/video_core/engines/maxwell_dma.cpp @@ -2,6 +2,7 @@  // Licensed under GPLv2 or any later version  // Refer to the license.txt file included. +#include "common/assert.h"  #include "core/core.h"  #include "core/memory.h"  #include "video_core/engines/maxwell_3d.h" @@ -11,8 +12,9 @@  namespace Tegra::Engines { -MaxwellDMA::MaxwellDMA(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager) -    : memory_manager(memory_manager), rasterizer{rasterizer} {} +MaxwellDMA::MaxwellDMA(Core::System& system, VideoCore::RasterizerInterface& rasterizer, +                       MemoryManager& memory_manager) +    : memory_manager(memory_manager), system{system}, rasterizer{rasterizer} {}  void MaxwellDMA::CallMethod(const GPU::MethodCall& method_call) {      ASSERT_MSG(method_call.method < Regs::NUM_REGS, @@ -59,7 +61,7 @@ void MaxwellDMA::HandleCopy() {      }      // All copies here update the main memory, so mark all rasterizer states as invalid. -    Core::System::GetInstance().GPU().Maxwell3D().dirty_flags.OnMemoryWrite(); +    system.GPU().Maxwell3D().dirty_flags.OnMemoryWrite();      if (regs.exec.is_dst_linear && regs.exec.is_src_linear) {          // When the enable_2d bit is disabled, the copy is performed as if we were copying a 1D diff --git a/src/video_core/engines/maxwell_dma.h b/src/video_core/engines/maxwell_dma.h index 1f8cd65d2..cf75aeb12 100644 --- a/src/video_core/engines/maxwell_dma.h +++ b/src/video_core/engines/maxwell_dma.h @@ -5,13 +5,16 @@  #pragma once  #include <array> -#include "common/assert.h"  #include "common/bit_field.h"  #include "common/common_funcs.h"  #include "common/common_types.h"  #include "video_core/gpu.h"  #include "video_core/memory_manager.h" +namespace Core { +class System; +} +  namespace VideoCore {  class RasterizerInterface;  } @@ -20,7 +23,8 @@ namespace Tegra::Engines {  class MaxwellDMA final {  public: -    explicit MaxwellDMA(VideoCore::RasterizerInterface& rasterizer, MemoryManager& memory_manager); +    explicit MaxwellDMA(Core::System& system, VideoCore::RasterizerInterface& rasterizer, +                        MemoryManager& memory_manager);      ~MaxwellDMA() = default;      /// Write the value to the register identified by method. @@ -137,6 +141,8 @@ public:      MemoryManager& memory_manager;  private: +    Core::System& system; +      VideoCore::RasterizerInterface& rasterizer;      /// Performs the copy from the source buffer to the destination buffer as configured in the diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index b86265dfe..ac30d1a89 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -28,14 +28,14 @@ u32 FramebufferConfig::BytesPerPixel(PixelFormat format) {      UNREACHABLE();  } -GPU::GPU(VideoCore::RasterizerInterface& rasterizer) { +GPU::GPU(Core::System& system, VideoCore::RasterizerInterface& rasterizer) {      memory_manager = std::make_unique<Tegra::MemoryManager>();      dma_pusher = std::make_unique<Tegra::DmaPusher>(*this); -    maxwell_3d = std::make_unique<Engines::Maxwell3D>(rasterizer, *memory_manager); +    maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager);      fermi_2d = std::make_unique<Engines::Fermi2D>(rasterizer, *memory_manager);      kepler_compute = std::make_unique<Engines::KeplerCompute>(*memory_manager); -    maxwell_dma = std::make_unique<Engines::MaxwellDMA>(rasterizer, *memory_manager); -    kepler_memory = std::make_unique<Engines::KeplerMemory>(rasterizer, *memory_manager); +    maxwell_dma = std::make_unique<Engines::MaxwellDMA>(system, rasterizer, *memory_manager); +    kepler_memory = std::make_unique<Engines::KeplerMemory>(system, rasterizer, *memory_manager);  }  GPU::~GPU() = default; diff --git a/src/video_core/gpu.h b/src/video_core/gpu.h index a482196ea..0f5bfdcbf 100644 --- a/src/video_core/gpu.h +++ b/src/video_core/gpu.h @@ -6,12 +6,15 @@  #include <array>  #include <memory> -#include <vector>  #include "common/common_types.h"  #include "core/hle/service/nvflinger/buffer_queue.h"  #include "video_core/dma_pusher.h"  #include "video_core/memory_manager.h" +namespace Core { +class System; +} +  namespace VideoCore {  class RasterizerInterface;  } @@ -118,7 +121,7 @@ enum class EngineID {  class GPU final {  public: -    explicit GPU(VideoCore::RasterizerInterface& rasterizer); +    explicit GPU(Core::System& system, VideoCore::RasterizerInterface& rasterizer);      ~GPU();      struct MethodCall { | 
