NVDRV: Implement sessions and initial implementation of SMMU

This commit is contained in:
Fernando Sahmkow 2023-12-24 18:20:02 +01:00 committed by Liam
parent 2f0418c101
commit 7a9d1ad2f8
37 changed files with 260 additions and 100 deletions

View file

@ -71,6 +71,8 @@ add_library(video_core STATIC
host1x/ffmpeg/ffmpeg.h
host1x/control.cpp
host1x/control.h
host1x/gpu_device_memory_manager.cpp
host1x/gpu_device_memory_manager.h
host1x/host1x.cpp
host1x/host1x.h
host1x/nvdec.cpp

View file

@ -85,7 +85,7 @@ struct GPU::Impl {
void BindRenderer(std::unique_ptr<VideoCore::RendererBase> renderer_) {
renderer = std::move(renderer_);
rasterizer = renderer->ReadRasterizer();
host1x.MemoryManager().BindRasterizer(rasterizer);
host1x.MemoryManager().BindInterface(rasterizer);
}
/// Flush all current written commands into the host GPU for execution.

View file

@ -9,8 +9,7 @@ namespace Tegra {
namespace Host1x {
Host1x::Host1x(Core::System& system_)
: system{system_}, syncpoint_manager{}, memory_manager{system, 32, 12},
allocator{std::make_unique<Common::FlatAllocator<u32, 0, 32>>(1 << 12)} {}
: system{system_}, syncpoint_manager{}, memory_manager(system.DeviceMemory()) {}
} // namespace Host1x

View file

@ -5,9 +5,8 @@
#include "common/common_types.h"
#include "common/address_space.h"
#include "video_core/host1x/gpu_device_memory_manager.h"
#include "video_core/host1x/syncpoint_manager.h"
#include "video_core/memory_manager.h"
namespace Core {
class System;
@ -29,27 +28,18 @@ public:
return syncpoint_manager;
}
Tegra::MemoryManager& MemoryManager() {
Tegra::MaxwellDeviceMemoryManager& MemoryManager() {
return memory_manager;
}
const Tegra::MemoryManager& MemoryManager() const {
const Tegra::MaxwellDeviceMemoryManager& MemoryManager() const {
return memory_manager;
}
Common::FlatAllocator<u32, 0, 32>& Allocator() {
return *allocator;
}
const Common::FlatAllocator<u32, 0, 32>& Allocator() const {
return *allocator;
}
private:
Core::System& system;
SyncpointManager syncpoint_manager;
Tegra::MemoryManager memory_manager;
std::unique_ptr<Common::FlatAllocator<u32, 0, 32>> allocator;
Tegra::MaxwellDeviceMemoryManager memory_manager;
};
} // namespace Host1x