Fixup Win10 CPU Sets to check the EfficiencyClass

Instead of picking the first physical core for Xbox threads,
Cxbx-R now picks the first highest performance physical core.
While at least Alder Lake lists performance cores first,
this is not guaranteed to always be the case in the future.
This commit is contained in:
Silent 2021-12-30 21:33:36 +01:00
parent 283331412a
commit f41f73f6c3
No known key found for this signature in database
GPG Key ID: AE53149BB0C45AF1
1 changed files with 9 additions and 5 deletions

View File

@ -151,12 +151,16 @@ public:
cpuSets.erase(cpuSets.begin());
}
// Otherwise: Multiple physical cores
// Assign the first logical and physical core to Xbox, leave the rest of that
// physical core unassigned (if hyperthreading is active), the remaining
// physical cores to other threads
// Assign the first highest performance logical and physical core to Xbox,
// leave the rest of that physical core unassigned (if hyperthreading is active),
// give the remaining physical cores to other threads
else {
const BYTE physicalCore = cpuSets[0]->CoreIndex;
m_xboxCPUSet = cpuSets[0]->Id;
auto highPerfCore = std::max_element(cpuSets.begin(), cpuSets.end(), [](const auto* left, const auto* right)
{
return left->EfficiencyClass < right->EfficiencyClass;
});
const BYTE physicalCore = (*highPerfCore)->CoreIndex;
m_xboxCPUSet = (*highPerfCore)->Id;
for (auto it = cpuSets.begin(); it != cpuSets.end(); ) {
if ((*it)->CoreIndex == physicalCore) {
it = cpuSets.erase(it);