Browse Source
Make a GPU class in VideoCore to contain the GPU state.
Make a GPU class in VideoCore to contain the GPU state.
Also moved the GPU MemoryManager class to video_core since it makes more sense for it to be there.nce_cpp
20 changed files with 125 additions and 76 deletions
-
2src/core/CMakeLists.txt
-
2src/core/core.cpp
-
7src/core/core.h
-
12src/core/hle/service/nvdrv/devices/nvhost_as_gpu.cpp
-
5src/core/hle/service/nvdrv/devices/nvhost_as_gpu.h
-
7src/core/hle/service/nvdrv/devices/nvhost_gpu.cpp
-
5src/core/hle/service/nvdrv/devices/nvhost_gpu.h
-
7src/core/hle/service/nvdrv/nvdrv.cpp
-
3src/video_core/CMakeLists.txt
-
33src/video_core/command_processor.cpp
-
4src/video_core/command_processor.h
-
4src/video_core/engines/fermi_2d.cpp
-
10src/video_core/engines/fermi_2d.h
-
4src/video_core/engines/maxwell_3d.cpp
-
10src/video_core/engines/maxwell_3d.h
-
4src/video_core/engines/maxwell_compute.cpp
-
10src/video_core/engines/maxwell_compute.h
-
55src/video_core/gpu.h
-
8src/video_core/memory_manager.cpp
-
9src/video_core/memory_manager.h
@ -0,0 +1,55 @@ |
|||||
|
// Copyright 2018 yuzu Emulator Project |
||||
|
// Licensed under GPLv2 or any later version |
||||
|
// Refer to the license.txt file included. |
||||
|
|
||||
|
#pragma once |
||||
|
|
||||
|
#include <memory> |
||||
|
#include <unordered_map> |
||||
|
#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" |
||||
|
|
||||
|
namespace Tegra { |
||||
|
|
||||
|
enum class EngineID { |
||||
|
FERMI_TWOD_A = 0x902D, // 2D Engine |
||||
|
MAXWELL_B = 0xB197, // 3D Engine |
||||
|
MAXWELL_COMPUTE_B = 0xB1C0, |
||||
|
KEPLER_INLINE_TO_MEMORY_B = 0xA140, |
||||
|
MAXWELL_DMA_COPY_A = 0xB0B5, |
||||
|
}; |
||||
|
|
||||
|
class GPU final { |
||||
|
public: |
||||
|
GPU() { |
||||
|
memory_manager = std::make_unique<MemoryManager>(); |
||||
|
maxwell_3d = std::make_unique<Engines::Maxwell3D>(); |
||||
|
fermi_2d = std::make_unique<Engines::Fermi2D>(); |
||||
|
maxwell_compute = std::make_unique<Engines::MaxwellCompute>(); |
||||
|
} |
||||
|
~GPU() = default; |
||||
|
|
||||
|
/// Processes a command list stored at the specified address in GPU memory. |
||||
|
void ProcessCommandList(GPUVAddr address, u32 size); |
||||
|
|
||||
|
std::unique_ptr<MemoryManager> memory_manager; |
||||
|
|
||||
|
private: |
||||
|
/// Writes a single register in the engine bound to the specified subchannel |
||||
|
void WriteReg(u32 method, u32 subchannel, u32 value); |
||||
|
|
||||
|
/// Mapping of command subchannels to their bound engine ids. |
||||
|
std::unordered_map<u32, EngineID> bound_engines; |
||||
|
|
||||
|
/// 3D engine |
||||
|
std::unique_ptr<Engines::Maxwell3D> maxwell_3d; |
||||
|
/// 2D engine |
||||
|
std::unique_ptr<Engines::Fermi2D> fermi_2d; |
||||
|
/// Compute engine |
||||
|
std::unique_ptr<Engines::MaxwellCompute> maxwell_compute; |
||||
|
}; |
||||
|
|
||||
|
} // namespace Tegra |
||||
Write
Preview
Loading…
Cancel
Save
Reference in new issue