[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
No known key found for this signature in database
GPG key ID: 425ACD2D4830EBC6
307 changed files with 4419 additions and 4477 deletions

View file

@ -1,3 +1,6 @@
// SPDX-FileCopyrightText: Copyright 2026 Eden Emulator Project
// SPDX-License-Identifier: GPL-3.0-or-later
// SPDX-FileCopyrightText: Copyright 2018 yuzu Emulator Project
// SPDX-License-Identifier: GPL-2.0-or-later
@ -14,6 +17,10 @@
#include "common/thread.h"
#include "core/hardware_properties.h"
namespace Kernel {
class KernelCore;
}
namespace Common {
class Event;
class Fiber;
@ -51,57 +58,55 @@ public:
void Initialize();
void Shutdown();
std::function<void()> GetGuestActivateFunc() {
return [this] { GuestActivate(); };
std::function<void()> GetGuestActivateFunc(Kernel::KernelCore& kernel) {
return [this, &kernel] { GuestActivate(kernel); };
}
std::function<void()> GetGuestThreadFunc() {
return [this] { GuestThreadFunction(); };
std::function<void()> GetGuestThreadFunc(Kernel::KernelCore& kernel) {
return [this, &kernel] { GuestThreadFunction(kernel); };
}
std::function<void()> GetIdleThreadStartFunc() {
return [this] { IdleThreadFunction(); };
std::function<void()> GetIdleThreadStartFunc(Kernel::KernelCore& kernel) {
return [this, &kernel] { IdleThreadFunction(kernel); };
}
std::function<void()> GetShutdownThreadStartFunc() {
return [this] { ShutdownThreadFunction(); };
std::function<void()> GetShutdownThreadStartFunc(Kernel::KernelCore& kernel) {
return [this, &kernel] { ShutdownThreadFunction(kernel); };
}
void PreemptSingleCore(bool from_running_environment = true);
void PreemptSingleCore(Kernel::KernelCore& kernel, bool from_running_environment = true);
std::size_t CurrentCore() const {
return current_core.load();
}
private:
void GuestThreadFunction();
void IdleThreadFunction();
void ShutdownThreadFunction();
void GuestThreadFunction(Kernel::KernelCore& kernel);
void IdleThreadFunction(Kernel::KernelCore& kernel);
void ShutdownThreadFunction(Kernel::KernelCore& kernel);
void MultiCoreRunGuestThread();
void MultiCoreRunIdleThread();
void MultiCoreRunGuestThread(Kernel::KernelCore& kernel);
void MultiCoreRunIdleThread(Kernel::KernelCore& kernel);
void SingleCoreRunGuestThread();
void SingleCoreRunIdleThread();
void SingleCoreRunGuestThread(Kernel::KernelCore& kernel);
void SingleCoreRunIdleThread(Kernel::KernelCore& kernel);
void GuestActivate();
void HandleInterrupt();
void ShutdownThread();
void GuestActivate(Kernel::KernelCore& kernel);
void HandleInterrupt(Kernel::KernelCore& kernel);
void ShutdownThread(Kernel::KernelCore& kernel);
void RunThread(std::stop_token stop_token, std::size_t core);
static constexpr std::size_t max_cycle_runs = 5;
std::optional<Common::Barrier> gpu_barrier{};
struct CoreData {
std::shared_ptr<Common::Fiber> host_context;
std::jthread host_thread;
};
std::unique_ptr<Common::Barrier> gpu_barrier{};
std::array<CoreData, Core::Hardware::NUM_CPU_CORES> core_data{};
bool is_async_gpu{};
bool is_multicore{};
Core::System& system;
std::atomic<std::size_t> current_core{};
std::size_t idle_count{};
std::size_t num_cores{};
static constexpr std::size_t max_cycle_runs = 5;
System& system;
bool is_async_gpu{};
bool is_multicore{};
};
} // namespace Core