aboutsummaryrefslogtreecommitdiff
path: root/src/video_core/video_core.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/video_core/video_core.cpp')
-rw-r--r--src/video_core/video_core.cpp8
1 files changed, 4 insertions, 4 deletions
diff --git a/src/video_core/video_core.cpp b/src/video_core/video_core.cpp
index 1ac7a0bc35..54fb8f6239 100644
--- a/src/video_core/video_core.cpp
+++ b/src/video_core/video_core.cpp
@@ -45,23 +45,23 @@ std::unique_ptr<VideoCore::RendererBase> CreateRenderer(Core::System& system, Co
namespace VideoCore {
-std::unique_ptr<Tegra::GPU> CreateGPU(Core::Frontend::EmuWindow& emu_window, Core::System& system) {
+/// @brief Creates an emulated GPU instance using the given system context.
+void CreateGPU(std::optional<Tegra::GPU>& gpu, Core::Frontend::EmuWindow& emu_window, Core::System& system) {
Settings::UpdateRescalingInfo();
const auto nvdec_value = Settings::values.nvdec_emulation.GetValue();
const bool use_nvdec = nvdec_value != Settings::NvdecEmulation::Off;
const bool use_async = Settings::values.use_asynchronous_gpu_emulation.GetValue();
- auto gpu = std::make_unique<Tegra::GPU>(system, use_async, use_nvdec);
+ gpu.emplace(system, use_async, use_nvdec);
auto context = emu_window.CreateSharedContext();
auto scope = context->Acquire();
try {
auto renderer = CreateRenderer(system, emu_window, *gpu, std::move(context));
gpu->BindRenderer(std::move(renderer));
- return gpu;
} catch (const std::runtime_error& exception) {
scope.Cancel();
LOG_ERROR(HW_GPU, "Failed to initialize GPU: {}", exception.what());
- return nullptr;
+ gpu.reset();
}
}