From da53bcee60fced902479b72b40ed26b099fa9938 Mon Sep 17 00:00:00 2001 From: ReinUsesLisp Date: Thu, 11 Jun 2020 00:58:57 -0300 Subject: video_core: Initialize renderer with a GPU Add an extra step in GPU initialization to be able to initialize render backends with a valid GPU instance. --- src/video_core/gpu.cpp | 31 +++++++++++++++++++------------ 1 file changed, 19 insertions(+), 12 deletions(-) (limited to 'src/video_core/gpu.cpp') diff --git a/src/video_core/gpu.cpp b/src/video_core/gpu.cpp index 512578c8b..acb6e6d46 100644 --- a/src/video_core/gpu.cpp +++ b/src/video_core/gpu.cpp @@ -27,21 +27,28 @@ namespace Tegra { MICROPROFILE_DEFINE(GPU_wait, "GPU", "Wait for the GPU", MP_RGB(128, 128, 192)); -GPU::GPU(Core::System& system, std::unique_ptr&& renderer_, bool is_async) - : system{system}, renderer{std::move(renderer_)}, is_async{is_async} { - auto& rasterizer{renderer->Rasterizer()}; - memory_manager = std::make_unique(system, rasterizer); - dma_pusher = std::make_unique(system, *this); - maxwell_3d = std::make_unique(system, rasterizer, *memory_manager); - fermi_2d = std::make_unique(rasterizer); - kepler_compute = std::make_unique(system, rasterizer, *memory_manager); - maxwell_dma = std::make_unique(system, *memory_manager); - kepler_memory = std::make_unique(system, *memory_manager); - shader_notify = std::make_unique(); -} +GPU::GPU(Core::System& system_, bool is_async_) + : system{system_}, dma_pusher{std::make_unique(system, *this)}, + memory_manager{std::make_unique(system)}, + maxwell_3d{std::make_unique(system, *memory_manager)}, + fermi_2d{std::make_unique()}, + kepler_compute{std::make_unique(system, *memory_manager)}, + maxwell_dma{std::make_unique(system, *memory_manager)}, + kepler_memory{std::make_unique(system, *memory_manager)}, + shader_notify{std::make_unique()}, is_async{is_async_} {} GPU::~GPU() = default; +void GPU::BindRenderer(std::unique_ptr renderer_) { + renderer = std::move(renderer_); + + VideoCore::RasterizerInterface& rasterizer = renderer->Rasterizer(); + memory_manager->BindRasterizer(rasterizer); + maxwell_3d->BindRasterizer(rasterizer); + fermi_2d->BindRasterizer(rasterizer); + kepler_compute->BindRasterizer(rasterizer); +} + Engines::Maxwell3D& GPU::Maxwell3D() { return *maxwell_3d; } -- cgit v1.2.3