gpu: Refactor to take RendererBase instead of RasterizerInterface.
This commit is contained in:
parent
d6015ee211
commit
4483089d70
|
@ -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);
|
||||||
|
|
||||||
|
|
|
@ -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);
|
||||||
|
|
|
@ -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) \
|
||||||
|
|
Reference in New Issue