1
0
Fork 0
forked from suyu/suyu

gpu: Refactor to take RendererBase instead of RasterizerInterface.

This commit is contained in:
bunnei 2019-01-07 23:32:02 -05:00
parent d6015ee211
commit 4483089d70
3 changed files with 23 additions and 18 deletions

View file

@ -131,7 +131,7 @@ struct System::Impl {
is_powered_on = true; is_powered_on = true;
gpu_core = std::make_unique<Tegra::GPU>(system, renderer->Rasterizer()); gpu_core = std::make_unique<Tegra::GPU>(system, *renderer);
cpu_core_manager.Initialize(system); cpu_core_manager.Initialize(system);

View file

@ -12,7 +12,7 @@
#include "video_core/engines/maxwell_3d.h" #include "video_core/engines/maxwell_3d.h"
#include "video_core/engines/maxwell_dma.h" #include "video_core/engines/maxwell_dma.h"
#include "video_core/gpu.h" #include "video_core/gpu.h"
#include "video_core/rasterizer_interface.h" #include "video_core/renderer_base.h"
namespace Tegra { namespace Tegra {
@ -28,7 +28,8 @@ u32 FramebufferConfig::BytesPerPixel(PixelFormat format) {
UNREACHABLE(); UNREACHABLE();
} }
GPU::GPU(Core::System& system, VideoCore::RasterizerInterface& rasterizer) { GPU::GPU(Core::System& system, VideoCore::RendererBase& renderer) : renderer{renderer} {
auto& rasterizer{renderer.Rasterizer()};
memory_manager = std::make_unique<Tegra::MemoryManager>(); memory_manager = std::make_unique<Tegra::MemoryManager>();
dma_pusher = std::make_unique<Tegra::DmaPusher>(*this); dma_pusher = std::make_unique<Tegra::DmaPusher>(*this);
maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager); maxwell_3d = std::make_unique<Engines::Maxwell3D>(system, rasterizer, *memory_manager);

View file

@ -16,8 +16,8 @@ class System;
} }
namespace VideoCore { namespace VideoCore {
class RasterizerInterface; class RendererBase;
} } // namespace VideoCore
namespace Tegra { namespace Tegra {
@ -121,7 +121,8 @@ enum class EngineID {
class GPU final { class GPU final {
public: public:
explicit GPU(Core::System& system, VideoCore::RasterizerInterface& rasterizer); explicit GPU(Core::System& system, VideoCore::RendererBase& renderer);
~GPU(); ~GPU();
struct MethodCall { struct MethodCall {
@ -200,10 +201,25 @@ public:
}; };
} regs{}; } regs{};
private:
void ProcessBindMethod(const MethodCall& method_call);
void ProcessSemaphoreTriggerMethod();
void ProcessSemaphoreRelease();
void ProcessSemaphoreAcquire();
// Calls a GPU puller method.
void CallPullerMethod(const MethodCall& method_call);
// Calls a GPU engine method.
void CallEngineMethod(const MethodCall& method_call);
// Determines where the method should be executed.
bool ExecuteMethodOnEngine(const MethodCall& method_call);
private: private:
std::unique_ptr<Tegra::DmaPusher> dma_pusher; std::unique_ptr<Tegra::DmaPusher> dma_pusher;
std::unique_ptr<Tegra::MemoryManager> memory_manager; std::unique_ptr<Tegra::MemoryManager> memory_manager;
VideoCore::RendererBase& renderer;
/// Mapping of command subchannels to their bound engine ids. /// Mapping of command subchannels to their bound engine ids.
std::array<EngineID, 8> bound_engines = {}; std::array<EngineID, 8> bound_engines = {};
@ -217,18 +233,6 @@ private:
std::unique_ptr<Engines::MaxwellDMA> maxwell_dma; std::unique_ptr<Engines::MaxwellDMA> maxwell_dma;
/// Inline memory engine /// Inline memory engine
std::unique_ptr<Engines::KeplerMemory> kepler_memory; std::unique_ptr<Engines::KeplerMemory> kepler_memory;
void ProcessBindMethod(const MethodCall& method_call);
void ProcessSemaphoreTriggerMethod();
void ProcessSemaphoreRelease();
void ProcessSemaphoreAcquire();
// Calls a GPU puller method.
void CallPullerMethod(const MethodCall& method_call);
// Calls a GPU engine method.
void CallEngineMethod(const MethodCall& method_call);
// Determines where the method should be executed.
bool ExecuteMethodOnEngine(const MethodCall& method_call);
}; };
#define ASSERT_REG_POSITION(field_name, position) \ #define ASSERT_REG_POSITION(field_name, position) \