|
|
@@ -16,8 +16,8 @@ class System;
|
|
|
}
|
|
|
|
|
|
namespace VideoCore {
|
|
|
-class RasterizerInterface;
|
|
|
-}
|
|
|
+class RendererBase;
|
|
|
+} // namespace VideoCore
|
|
|
|
|
|
namespace Tegra {
|
|
|
|
|
|
@@ -121,7 +121,8 @@ enum class EngineID {
|
|
|
|
|
|
class GPU final {
|
|
|
public:
|
|
|
- explicit GPU(Core::System& system, VideoCore::RasterizerInterface& rasterizer);
|
|
|
+ explicit GPU(Core::System& system, VideoCore::RendererBase& renderer);
|
|
|
+
|
|
|
~GPU();
|
|
|
|
|
|
struct MethodCall {
|
|
|
@@ -200,9 +201,24 @@ public:
|
|
|
};
|
|
|
} 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:
|
|
|
std::unique_ptr<Tegra::DmaPusher> dma_pusher;
|
|
|
std::unique_ptr<Tegra::MemoryManager> memory_manager;
|
|
|
+
|
|
|
+ VideoCore::RendererBase& renderer;
|
|
|
|
|
|
/// Mapping of command subchannels to their bound engine ids.
|
|
|
std::array<EngineID, 8> bound_engines = {};
|
|
|
@@ -217,18 +233,6 @@ private:
|
|
|
std::unique_ptr<Engines::MaxwellDMA> maxwell_dma;
|
|
|
/// Inline memory engine
|
|
|
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) \
|