summaryrefslogtreecommitdiff
path: root/src/core/hle/kernel/kernel.cpp
diff options
context:
space:
mode:
Diffstat (limited to 'src/core/hle/kernel/kernel.cpp')
-rw-r--r--src/core/hle/kernel/kernel.cpp21
1 files changed, 20 insertions, 1 deletions
diff --git a/src/core/hle/kernel/kernel.cpp b/src/core/hle/kernel/kernel.cpp
index 6ae0bdeed..80a78e643 100644
--- a/src/core/hle/kernel/kernel.cpp
+++ b/src/core/hle/kernel/kernel.cpp
@@ -62,6 +62,7 @@ struct KernelCore::Impl {
62 global_scheduler_context = std::make_unique<Kernel::GlobalSchedulerContext>(kernel); 62 global_scheduler_context = std::make_unique<Kernel::GlobalSchedulerContext>(kernel);
63 service_thread_manager = 63 service_thread_manager =
64 std::make_unique<Common::ThreadWorker>(1, "yuzu:ServiceThreadManager"); 64 std::make_unique<Common::ThreadWorker>(1, "yuzu:ServiceThreadManager");
65 is_phantom_mode_for_singlecore = false;
65 66
66 InitializePhysicalCores(); 67 InitializePhysicalCores();
67 InitializeSystemResourceLimit(kernel); 68 InitializeSystemResourceLimit(kernel);
@@ -227,6 +228,15 @@ struct KernelCore::Impl {
227 return this_id; 228 return this_id;
228 } 229 }
229 230
231 bool IsPhantomModeForSingleCore() const {
232 return is_phantom_mode_for_singlecore;
233 }
234
235 void SetIsPhantomModeForSingleCore(bool value) {
236 ASSERT(!is_multicore);
237 is_phantom_mode_for_singlecore = value;
238 }
239
230 [[nodiscard]] Core::EmuThreadHandle GetCurrentEmuThreadID() { 240 [[nodiscard]] Core::EmuThreadHandle GetCurrentEmuThreadID() {
231 Core::EmuThreadHandle result = Core::EmuThreadHandle::InvalidHandle(); 241 Core::EmuThreadHandle result = Core::EmuThreadHandle::InvalidHandle();
232 result.host_handle = GetCurrentHostThreadID(); 242 result.host_handle = GetCurrentHostThreadID();
@@ -235,7 +245,7 @@ struct KernelCore::Impl {
235 } 245 }
236 const Kernel::KScheduler& sched = cores[result.host_handle].Scheduler(); 246 const Kernel::KScheduler& sched = cores[result.host_handle].Scheduler();
237 const Kernel::KThread* current = sched.GetCurrentThread(); 247 const Kernel::KThread* current = sched.GetCurrentThread();
238 if (current != nullptr && !current->IsPhantomMode()) { 248 if (current != nullptr && !IsPhantomModeForSingleCore()) {
239 result.guest_handle = current->GetGlobalHandle(); 249 result.guest_handle = current->GetGlobalHandle();
240 } else { 250 } else {
241 result.guest_handle = InvalidHandle; 251 result.guest_handle = InvalidHandle;
@@ -345,6 +355,7 @@ struct KernelCore::Impl {
345 std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{}; 355 std::array<std::unique_ptr<Kernel::KScheduler>, Core::Hardware::NUM_CPU_CORES> schedulers{};
346 356
347 bool is_multicore{}; 357 bool is_multicore{};
358 bool is_phantom_mode_for_singlecore{};
348 u32 single_core_thread_id{}; 359 u32 single_core_thread_id{};
349 360
350 std::array<u64, Core::Hardware::NUM_CPU_CORES> svc_ticks{}; 361 std::array<u64, Core::Hardware::NUM_CPU_CORES> svc_ticks{};
@@ -643,4 +654,12 @@ void KernelCore::ReleaseServiceThread(std::weak_ptr<Kernel::ServiceThread> servi
643 }); 654 });
644} 655}
645 656
657bool KernelCore::IsPhantomModeForSingleCore() const {
658 return impl->IsPhantomModeForSingleCore();
659}
660
661void KernelCore::SetIsPhantomModeForSingleCore(bool value) {
662 impl->SetIsPhantomModeForSingleCore(value);
663}
664
646} // namespace Kernel 665} // namespace Kernel