mirror of
https://github.com/citra-mirror/citra.git
synced 2024-08-20 18:33:24 +02:00
Replace g_kernel with Core::Global etc.
This commit is contained in:
parent
e707685c2a
commit
3e752002c4
2
TODO
2
TODO
@ -26,7 +26,7 @@
|
|||||||
✔ Shader @done(19-08-13 16:03)
|
✔ Shader @done(19-08-13 16:03)
|
||||||
☐ HLE @started(19-08-13 16:43)
|
☐ HLE @started(19-08-13 16:43)
|
||||||
☐ Kernel @started(19-08-13 16:43)
|
☐ Kernel @started(19-08-13 16:43)
|
||||||
Most of these require adding g_kernel
|
Most of these require adding Core::Global
|
||||||
✔ Address arbiter @done(19-08-13 16:40)
|
✔ Address arbiter @done(19-08-13 16:40)
|
||||||
✔ Client port @done(19-08-13 16:40)
|
✔ Client port @done(19-08-13 16:40)
|
||||||
✔ Client session @done(19-08-13 16:40)
|
✔ Client session @done(19-08-13 16:40)
|
||||||
|
@ -25,6 +25,7 @@
|
|||||||
#endif
|
#endif
|
||||||
#include "core/custom_tex_cache.h"
|
#include "core/custom_tex_cache.h"
|
||||||
#include "core/gdbstub/gdbstub.h"
|
#include "core/gdbstub/gdbstub.h"
|
||||||
|
#include "core/global.h"
|
||||||
#include "core/hle/kernel/client_port.h"
|
#include "core/hle/kernel/client_port.h"
|
||||||
#include "core/hle/kernel/kernel.h"
|
#include "core/hle/kernel/kernel.h"
|
||||||
#include "core/hle/kernel/process.h"
|
#include "core/hle/kernel/process.h"
|
||||||
@ -46,6 +47,12 @@ namespace Core {
|
|||||||
|
|
||||||
/*static*/ System System::s_instance;
|
/*static*/ System System::s_instance;
|
||||||
|
|
||||||
|
template <>
|
||||||
|
Core::System& Global() { return System::GetInstance(); }
|
||||||
|
|
||||||
|
template <>
|
||||||
|
Kernel::KernelSystem& Global() { return System::GetInstance().Kernel(); }
|
||||||
|
|
||||||
System::ResultStatus System::RunLoop(bool tight_loop) {
|
System::ResultStatus System::RunLoop(bool tight_loop) {
|
||||||
status = ResultStatus::Success;
|
status = ResultStatus::Success;
|
||||||
if (!cpu_core) {
|
if (!cpu_core) {
|
||||||
@ -204,7 +211,6 @@ System::ResultStatus System::Init(Frontend::EmuWindow& emu_window, u32 system_mo
|
|||||||
|
|
||||||
kernel = std::make_unique<Kernel::KernelSystem>(*memory, *timing,
|
kernel = std::make_unique<Kernel::KernelSystem>(*memory, *timing,
|
||||||
[this] { PrepareReschedule(); }, system_mode);
|
[this] { PrepareReschedule(); }, system_mode);
|
||||||
Kernel::g_kernel = kernel.get();
|
|
||||||
|
|
||||||
if (Settings::values.use_cpu_jit) {
|
if (Settings::values.use_cpu_jit) {
|
||||||
#ifdef ARCHITECTURE_x86_64
|
#ifdef ARCHITECTURE_x86_64
|
||||||
@ -368,7 +374,6 @@ void System::Shutdown() {
|
|||||||
service_manager.reset();
|
service_manager.reset();
|
||||||
dsp_core.reset();
|
dsp_core.reset();
|
||||||
cpu_core.reset();
|
cpu_core.reset();
|
||||||
Kernel::g_kernel = nullptr;
|
|
||||||
kernel.reset();
|
kernel.reset();
|
||||||
timing.reset();
|
timing.reset();
|
||||||
app_loader.reset();
|
app_loader.reset();
|
||||||
|
6
src/core/global.h
Normal file
6
src/core/global.h
Normal file
@ -0,0 +1,6 @@
|
|||||||
|
namespace Core {
|
||||||
|
|
||||||
|
template <class T>
|
||||||
|
T& Global();
|
||||||
|
|
||||||
|
} // namespace Core
|
@ -11,6 +11,7 @@
|
|||||||
#include "core/hle/kernel/kernel.h"
|
#include "core/hle/kernel/kernel.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
////////////////////////////////////////////////////////////////////////////////////////////////////
|
////////////////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Kernel namespace
|
// Kernel namespace
|
||||||
@ -68,7 +69,7 @@ std::shared_ptr<Thread> AddressArbiter::ResumeHighestPriorityThread(VAddr addres
|
|||||||
return thread;
|
return thread;
|
||||||
}
|
}
|
||||||
|
|
||||||
AddressArbiter::AddressArbiter() : kernel(*g_kernel) {}
|
AddressArbiter::AddressArbiter() : kernel(Core::Global<KernelSystem>()) {}
|
||||||
AddressArbiter::~AddressArbiter() {}
|
AddressArbiter::~AddressArbiter() {}
|
||||||
|
|
||||||
std::shared_ptr<AddressArbiter> KernelSystem::CreateAddressArbiter(std::string name) {
|
std::shared_ptr<AddressArbiter> KernelSystem::CreateAddressArbiter(std::string name) {
|
||||||
|
@ -11,6 +11,7 @@
|
|||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
#include "core/hle/kernel/server_port.h"
|
#include "core/hle/kernel/server_port.h"
|
||||||
#include "core/hle/kernel/server_session.h"
|
#include "core/hle/kernel/server_session.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
SERIALIZE_EXPORT_IMPL(Kernel::ClientPort)
|
SERIALIZE_EXPORT_IMPL(Kernel::ClientPort)
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ ResultVal<std::shared_ptr<ClientSession>> ClientPort::Connect() {
|
|||||||
active_sessions++;
|
active_sessions++;
|
||||||
|
|
||||||
// Create a new session pair, let the created sessions inherit the parent port's HLE handler.
|
// Create a new session pair, let the created sessions inherit the parent port's HLE handler.
|
||||||
auto [server, client] = g_kernel->CreateSessionPair(server_port->GetName(), SharedFrom(this));
|
auto [server, client] = Core::Global<KernelSystem>().CreateSessionPair(server_port->GetName(), SharedFrom(this));
|
||||||
|
|
||||||
if (server_port->hle_handler)
|
if (server_port->hle_handler)
|
||||||
server_port->hle_handler->ClientConnected(server);
|
server_port->hle_handler->ClientConnected(server);
|
||||||
|
@ -18,8 +18,6 @@
|
|||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
KernelSystem* g_kernel;
|
|
||||||
|
|
||||||
/// Initialize the kernel
|
/// Initialize the kernel
|
||||||
KernelSystem::KernelSystem(Memory::MemorySystem& memory, Core::Timing& timing,
|
KernelSystem::KernelSystem(Memory::MemorySystem& memory, Core::Timing& timing,
|
||||||
std::function<void()> prepare_reschedule_callback, u32 system_mode)
|
std::function<void()> prepare_reschedule_callback, u32 system_mode)
|
||||||
|
@ -292,6 +292,4 @@ private:
|
|||||||
void serialize(Archive& ar, const unsigned int file_version);
|
void serialize(Archive& ar, const unsigned int file_version);
|
||||||
};
|
};
|
||||||
|
|
||||||
extern KernelSystem* g_kernel;
|
|
||||||
|
|
||||||
} // namespace Kernel
|
} // namespace Kernel
|
||||||
|
@ -12,6 +12,7 @@
|
|||||||
#include "core/hle/kernel/mutex.h"
|
#include "core/hle/kernel/mutex.h"
|
||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
SERIALIZE_EXPORT_IMPL(Kernel::Mutex)
|
SERIALIZE_EXPORT_IMPL(Kernel::Mutex)
|
||||||
|
|
||||||
@ -26,7 +27,7 @@ void ReleaseThreadMutexes(Thread* thread) {
|
|||||||
thread->held_mutexes.clear();
|
thread->held_mutexes.clear();
|
||||||
}
|
}
|
||||||
|
|
||||||
Mutex::Mutex() : kernel(*g_kernel) {}
|
Mutex::Mutex() : kernel(Core::Global<KernelSystem>()) {}
|
||||||
Mutex::~Mutex() {}
|
Mutex::~Mutex() {}
|
||||||
|
|
||||||
std::shared_ptr<Mutex> KernelSystem::CreateMutex(bool initial_locked, std::string name) {
|
std::shared_ptr<Mutex> KernelSystem::CreateMutex(bool initial_locked, std::string name) {
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
#include "core/hle/kernel/vm_manager.h"
|
#include "core/hle/kernel/vm_manager.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
@ -427,7 +428,11 @@ ResultCode Process::Unmap(VAddr target, VAddr source, u32 size, VMAPermission pe
|
|||||||
return RESULT_SUCCESS;
|
return RESULT_SUCCESS;
|
||||||
}
|
}
|
||||||
|
|
||||||
Kernel::Process::Process() : kernel(*g_kernel), handle_table(*g_kernel), vm_manager(g_kernel->memory)
|
Kernel::Process::Process() : Kernel::Process::Process(Core::Global<KernelSystem>())
|
||||||
|
{
|
||||||
|
}
|
||||||
|
|
||||||
|
Kernel::Process::Process(KernelSystem& kernel) : kernel(kernel), handle_table(kernel), vm_manager(kernel.memory)
|
||||||
{
|
{
|
||||||
kernel.memory.RegisterPageTable(&vm_manager.page_table);
|
kernel.memory.RegisterPageTable(&vm_manager.page_table);
|
||||||
}
|
}
|
||||||
|
@ -143,7 +143,8 @@ private:
|
|||||||
|
|
||||||
class Process final : public Object {
|
class Process final : public Object {
|
||||||
public:
|
public:
|
||||||
explicit Process();
|
Process();
|
||||||
|
explicit Process(KernelSystem& kernel);
|
||||||
~Process() override;
|
~Process() override;
|
||||||
|
|
||||||
std::string GetTypeName() const override {
|
std::string GetTypeName() const override {
|
||||||
|
@ -10,12 +10,13 @@
|
|||||||
#include "core/hle/kernel/server_session.h"
|
#include "core/hle/kernel/server_session.h"
|
||||||
#include "core/hle/kernel/session.h"
|
#include "core/hle/kernel/session.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
SERIALIZE_EXPORT_IMPL(Kernel::ServerSession)
|
SERIALIZE_EXPORT_IMPL(Kernel::ServerSession)
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
ServerSession::ServerSession() : kernel(*g_kernel) {}
|
ServerSession::ServerSession() : kernel(Core::Global<KernelSystem>()) {}
|
||||||
ServerSession::~ServerSession() {
|
ServerSession::~ServerSession() {
|
||||||
// This destructor will be called automatically when the last ServerSession handle is closed by
|
// This destructor will be called automatically when the last ServerSession handle is closed by
|
||||||
// the emulated application.
|
// the emulated application.
|
||||||
|
@ -24,6 +24,7 @@
|
|||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
#include "core/memory.h"
|
#include "core/memory.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
SERIALIZE_EXPORT_IMPL(Kernel::Thread)
|
SERIALIZE_EXPORT_IMPL(Kernel::Thread)
|
||||||
|
|
||||||
@ -66,8 +67,8 @@ u32 ThreadManager::NewThreadId() {
|
|||||||
}
|
}
|
||||||
|
|
||||||
Thread::Thread()
|
Thread::Thread()
|
||||||
: context(g_kernel->GetThreadManager().NewContext()),
|
: context(Core::Global<KernelSystem>().GetThreadManager().NewContext()),
|
||||||
thread_manager(g_kernel->GetThreadManager()) {}
|
thread_manager(Core::Global<KernelSystem>().GetThreadManager()) {}
|
||||||
Thread::~Thread() {}
|
Thread::~Thread() {}
|
||||||
|
|
||||||
Thread* ThreadManager::GetCurrentThread() const {
|
Thread* ThreadManager::GetCurrentThread() const {
|
||||||
|
@ -11,10 +11,11 @@
|
|||||||
#include "core/hle/kernel/object.h"
|
#include "core/hle/kernel/object.h"
|
||||||
#include "core/hle/kernel/thread.h"
|
#include "core/hle/kernel/thread.h"
|
||||||
#include "core/hle/kernel/timer.h"
|
#include "core/hle/kernel/timer.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
namespace Kernel {
|
namespace Kernel {
|
||||||
|
|
||||||
Timer::Timer() : kernel(*g_kernel), timer_manager(g_kernel->GetTimerManager()) {}
|
Timer::Timer() : kernel(Core::Global<KernelSystem>()), timer_manager(Core::Global<KernelSystem>().GetTimerManager()) {}
|
||||||
Timer::~Timer() {
|
Timer::~Timer() {
|
||||||
Cancel();
|
Cancel();
|
||||||
timer_manager.timer_callback_table.erase(callback_id);
|
timer_manager.timer_callback_table.erase(callback_id);
|
||||||
|
@ -18,6 +18,7 @@
|
|||||||
#include "core/hle/kernel/mutex.h"
|
#include "core/hle/kernel/mutex.h"
|
||||||
#include "core/hle/result.h"
|
#include "core/hle/result.h"
|
||||||
#include "core/hle/service/service.h"
|
#include "core/hle/service/service.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
namespace Core {
|
namespace Core {
|
||||||
class System;
|
class System;
|
||||||
@ -601,6 +602,6 @@ namespace boost::serialization {
|
|||||||
template <class Archive>
|
template <class Archive>
|
||||||
inline void load_construct_data(Archive& ar, Service::AM::Module* t, const unsigned int)
|
inline void load_construct_data(Archive& ar, Service::AM::Module* t, const unsigned int)
|
||||||
{
|
{
|
||||||
::new(t)Service::AM::Module(*Kernel::g_kernel);
|
::new(t)Service::AM::Module(Core::Global<Kernel::KernelSystem>());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
@ -8,6 +8,12 @@
|
|||||||
#include "video_core/pica_state.h"
|
#include "video_core/pica_state.h"
|
||||||
#include "video_core/renderer_base.h"
|
#include "video_core/renderer_base.h"
|
||||||
#include "video_core/video_core.h"
|
#include "video_core/video_core.h"
|
||||||
|
#include "core/global.h"
|
||||||
|
|
||||||
|
namespace Core {
|
||||||
|
template <>
|
||||||
|
Pica::State& Global() { return Pica::g_state; }
|
||||||
|
}
|
||||||
|
|
||||||
namespace Pica {
|
namespace Pica {
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user