[video_core, hle] remove redundant parent references in system structs (#3908)

reworked a bit to remove references of parent objects and instead pass as arguments to methods to prevent useless reloads

Signed-off-by: lizzie <lizzie@eden-emu.dev>
Co-authored-by: maufeat <sahyno1996@gmail.com>
Reviewed-on: https://git.eden-emu.dev/eden-emu/eden/pulls/3908
Reviewed-by: Maufeat <sahyno1996@gmail.com>
Reviewed-by: crueter <crueter@eden-emu.dev>
This commit is contained in:
lizzie
2026-06-23 06:31:25 +02:00
committed by crueter
parent f8facda35f
commit 3aa0d46259
307 changed files with 4419 additions and 4477 deletions
+14 -9
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -7,25 +10,27 @@
namespace Service {
Event::Event(KernelHelpers::ServiceContext& ctx) {
Event::Event(KernelHelpers::ServiceContext& ctx_)
: ctx{ctx_}
{
m_event = ctx.CreateEvent("Event");
}
Event::~Event() {
m_event->GetReadableEvent().Close();
m_event->Close();
m_event->GetReadableEvent().Close(ctx.kernel);
m_event->Close(ctx.kernel);
}
void Event::Signal() {
m_event->Signal();
void Event::Signal(Kernel::KernelCore& kernel) noexcept {
m_event->Signal(kernel);
}
void Event::Clear() {
m_event->Clear();
void Event::Clear(Kernel::KernelCore& kernel) noexcept {
m_event->Clear(kernel);
}
Kernel::KReadableEvent* Event::GetHandle() {
return &m_event->GetReadableEvent();
Kernel::KReadableEvent* Event::GetHandle() noexcept {
return std::addressof(m_event->GetReadableEvent());
}
} // namespace Service
+8 -4
View File
@@ -1,9 +1,13 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
#pragma once
namespace Kernel {
class KernelCore;
class KEvent;
class KReadableEvent;
} // namespace Kernel
@@ -19,12 +23,12 @@ public:
explicit Event(KernelHelpers::ServiceContext& ctx);
~Event();
void Signal();
void Clear();
Kernel::KReadableEvent* GetHandle();
void Signal(Kernel::KernelCore& kernel) noexcept;
void Clear(Kernel::KernelCore& kernel) noexcept;
Kernel::KReadableEvent* GetHandle() noexcept;
private:
KernelHelpers::ServiceContext& ctx;
Kernel::KEvent* m_event;
};
+9 -6
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2023 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -10,22 +13,22 @@ namespace Service {
Mutex::Mutex(Core::System& system) : m_system(system) {
m_event = Kernel::KEvent::Create(system.Kernel());
m_event->Initialize(nullptr);
m_event->Initialize(system.Kernel(), nullptr);
// Register the event.
Kernel::KEvent::Register(system.Kernel(), m_event);
ASSERT(R_SUCCEEDED(m_event->Signal()));
ASSERT(R_SUCCEEDED(m_event->Signal(system.Kernel())));
}
Mutex::~Mutex() {
m_event->GetReadableEvent().Close();
m_event->Close();
m_event->GetReadableEvent().Close(m_system.Kernel());
m_event->Close(m_system.Kernel());
}
void Mutex::lock() {
// Infinitely retry until we successfully clear the event.
while (R_FAILED(m_event->GetReadableEvent().Reset())) {
while (R_FAILED(m_event->GetReadableEvent().Reset(m_system.Kernel()))) {
s32 index;
Kernel::KSynchronizationObject* obj = &m_event->GetReadableEvent();
@@ -40,7 +43,7 @@ void Mutex::lock() {
void Mutex::unlock() {
// Unlock.
ASSERT(R_SUCCEEDED(m_event->Signal()));
ASSERT(R_SUCCEEDED(m_event->Signal(m_system.Kernel())));
}
} // namespace Service
+10 -17
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -10,14 +13,6 @@
namespace Service {
Process::Process(Core::System& system)
: m_system(system), m_process(), m_main_thread_priority(), m_main_thread_stack_size(),
m_process_started() {}
Process::~Process() {
this->Finalize();
}
bool Process::Initialize(Loader::AppLoader& loader, Loader::ResultStatus& out_load_result) {
// First, ensure we are not holding another process.
this->Finalize();
@@ -28,7 +23,7 @@ bool Process::Initialize(Loader::AppLoader& loader, Loader::ResultStatus& out_lo
// On exit, ensure we free the additional reference to the process.
SCOPE_EXIT {
process->Close();
process->Close(m_system.Kernel());
};
// Insert process modules into memory.
@@ -52,7 +47,7 @@ bool Process::Initialize(Loader::AppLoader& loader, Loader::ResultStatus& out_lo
// Take ownership of the process object.
m_process = process;
m_process->Open();
m_process->Open(m_system.Kernel());
// We succeeded.
return true;
@@ -64,8 +59,7 @@ void Process::Finalize() {
// Close the process.
if (m_process) {
m_process->Close();
m_process->Close(m_system.Kernel());
// TODO: remove this, kernel already tracks this
m_system.Kernel().RemoveProcess(m_process);
}
@@ -85,7 +79,7 @@ bool Process::Run() {
// Start.
if (m_process) {
m_process->Run(m_main_thread_priority, m_main_thread_stack_size);
m_process->Run(m_system.Kernel(), m_main_thread_priority, m_main_thread_stack_size);
}
// Mark as started.
@@ -97,13 +91,13 @@ bool Process::Run() {
void Process::Terminate() {
if (m_process) {
m_process->Terminate();
m_process->Terminate(m_system.Kernel());
}
}
void Process::ResetSignal() {
if (m_process) {
m_process->Reset();
m_process->Reset(m_system.Kernel());
}
}
@@ -144,8 +138,7 @@ u64 Process::GetProgramId() const {
void Process::Suspend(bool suspended) {
if (m_process) {
m_process->SetActivity(suspended ? Kernel::Svc::ProcessActivity::Paused
: Kernel::Svc::ProcessActivity::Runnable);
m_process->SetActivity(m_system.Kernel(), suspended ? Kernel::Svc::ProcessActivity::Paused : Kernel::Svc::ProcessActivity::Runnable);
}
}
+6 -3
View File
@@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2024 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@@ -22,8 +25,8 @@ namespace Service {
class Process {
public:
explicit Process(Core::System& system);
~Process();
inline explicit Process(Core::System& system) noexcept : m_system(system) {}
inline ~Process() { this->Finalize(); }
bool Initialize(Loader::AppLoader& loader, Loader::ResultStatus& out_load_result);
void Finalize();
@@ -50,8 +53,8 @@ public:
private:
Core::System& m_system;
Kernel::KProcess* m_process{};
s32 m_main_thread_priority{};
u64 m_main_thread_stack_size{};
s32 m_main_thread_priority{};
bool m_process_started{};
};