|
|
@ -8,13 +8,16 @@ |
|
|
#include <unordered_map> |
|
|
#include <unordered_map> |
|
|
#include <vector> |
|
|
#include <vector> |
|
|
#include "common/common_types.h" |
|
|
#include "common/common_types.h" |
|
|
#include "video_core/engines/fermi_2d.h" |
|
|
|
|
|
#include "video_core/engines/maxwell_3d.h" |
|
|
|
|
|
#include "video_core/engines/maxwell_compute.h" |
|
|
|
|
|
#include "video_core/memory_manager.h" |
|
|
#include "video_core/memory_manager.h" |
|
|
|
|
|
|
|
|
namespace Tegra { |
|
|
namespace Tegra { |
|
|
|
|
|
|
|
|
|
|
|
namespace Engines { |
|
|
|
|
|
class Fermi2D; |
|
|
|
|
|
class Maxwell3D; |
|
|
|
|
|
class MaxwellCompute; |
|
|
|
|
|
} // namespace Engines |
|
|
|
|
|
|
|
|
enum class EngineID { |
|
|
enum class EngineID { |
|
|
FERMI_TWOD_A = 0x902D, // 2D Engine |
|
|
FERMI_TWOD_A = 0x902D, // 2D Engine |
|
|
MAXWELL_B = 0xB197, // 3D Engine |
|
|
MAXWELL_B = 0xB197, // 3D Engine |
|
|
@ -25,13 +28,8 @@ enum class EngineID { |
|
|
|
|
|
|
|
|
class GPU final { |
|
|
class GPU final { |
|
|
public: |
|
|
public: |
|
|
GPU() { |
|
|
|
|
|
memory_manager = std::make_unique<MemoryManager>(); |
|
|
|
|
|
maxwell_3d = std::make_unique<Engines::Maxwell3D>(*memory_manager); |
|
|
|
|
|
fermi_2d = std::make_unique<Engines::Fermi2D>(); |
|
|
|
|
|
maxwell_compute = std::make_unique<Engines::MaxwellCompute>(); |
|
|
|
|
|
} |
|
|
|
|
|
~GPU() = default; |
|
|
|
|
|
|
|
|
GPU(); |
|
|
|
|
|
~GPU(); |
|
|
|
|
|
|
|
|
/// Processes a command list stored at the specified address in GPU memory. |
|
|
/// Processes a command list stored at the specified address in GPU memory. |
|
|
void ProcessCommandList(GPUVAddr address, u32 size); |
|
|
void ProcessCommandList(GPUVAddr address, u32 size); |
|
|
|