diff --git a/src/core/kernel/exports/EmuKrnlKe.cpp b/src/core/kernel/exports/EmuKrnlKe.cpp index ffdd8b984..72ed32a37 100644 --- a/src/core/kernel/exports/EmuKrnlKe.cpp +++ b/src/core/kernel/exports/EmuKrnlKe.cpp @@ -1404,13 +1404,7 @@ XBSYSAPI EXPORTNUM(124) xbox::long_xt NTAPI xbox::KeQueryBasePriorityThread KIRQL OldIrql; KiLockDispatcherDatabase(&OldIrql); - long_xt ret; - if (const auto &nativeHandle = GetNativeHandle(reinterpret_cast(Thread)->UniqueThread)) { - ret = GetThreadPriority(*nativeHandle); - } - else { - ret = Thread->Priority; - } + long_xt ret = Thread->Priority; KiUnlockDispatcherDatabase(OldIrql); @@ -1855,32 +1849,8 @@ XBSYSAPI EXPORTNUM(143) xbox::long_xt NTAPI xbox::KeSetBasePriorityThread KIRQL oldIRQL; KiLockDispatcherDatabase(&oldIRQL); - long_xt ret; - if (const auto &nativeHandle = GetNativeHandle(reinterpret_cast(Thread)->UniqueThread)) { - ret = GetThreadPriority(*nativeHandle); - - if (Priority == 16) { - Priority = THREAD_PRIORITY_TIME_CRITICAL; - } - else if (Priority == -16) { - Priority = THREAD_PRIORITY_IDLE; - } - - // HACK: only change the priority if set above normal. Test case: Black. It calls this to set the priority of a thread to THREAD_PRIORITY_LOWEST, and that same - // thread calls D3DDevice_BlockUntilVerticalBlank. The problem arises because there is also another thread that runs at higher priority and calls D3DDevice_BlockUntilVerticalBlank - // too to wait on the vblank kevent. When the vblank does occur, this other thread will satisfy the wait first, and set the kevent back to non-signalled. Thus, the other - // thread will miss the signal because typically, Windows won't re-schedule it after many more vblank have already occured. The proper solution is to boost the priority of - // the thread when the kevent is signalled, with the increment argument specified in KeSetEvent. Such boosts should also be appiled whenever a thread satisfies a wait. - if (Priority <= THREAD_PRIORITY_NORMAL) { - BOOL result = SetThreadPriority(*nativeHandle, Priority); - if (!result) { - EmuLog(LOG_LEVEL::WARNING, "SetThreadPriority failed: %s", WinError2Str().c_str()); - } - } - } - else { - ret = Thread->Priority; - } + Thread->Priority = Priority; + long_xt ret = Thread->Priority; KiUnlockDispatcherDatabase(oldIRQL); @@ -1901,13 +1871,6 @@ XBSYSAPI EXPORTNUM(144) xbox::boolean_xt NTAPI xbox::KeSetDisableBoostThread KIRQL oldIRQL; KiLockDispatcherDatabase(&oldIRQL); - if (const auto &nativeHandle = GetNativeHandle(reinterpret_cast(Thread)->UniqueThread)) { - BOOL bRet = SetThreadPriorityBoost(*nativeHandle, Disable); - if (!bRet) { - EmuLog(LOG_LEVEL::WARNING, "SetThreadPriorityBoost failed: %s", WinError2Str().c_str()); - } - } - boolean_xt prevDisableBoost = Thread->DisableBoost; Thread->DisableBoost = (CHAR)Disable;