Проблема: В ноутбуках с несколькими графическими процессорами есть переключатели Nvidia Optimus или AMD PowerXpress, которые используют выделенные графические процессоры для ноутбуков, если нагрузка на IGPU слишком высока, я пытался найти способ манипулировать этим переключателем, но безуспешно .
Половина решения и проблемы: Используя endlesly google, я обнаружил, что вы можете включить / отключить переключатель с помощью этого кода:
extern "C" {
// http://developer.download.nvidia.com/devzone/devcenter/gamegraphics/files/OptimusRenderingPolicies.pdf
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
// http://developer.amd.com/community/blog/2015/10/02/amd-enduro-system-for-developers/
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}
Он переключается на выделенный графический процессор, но если я хочу восстановить путем изменения с 1 на 0, он не работает.
Чего я хочу добиться: Управляя этим переключателем, я хочу управлять каждым графическим процессором, используя D3D11CreateDevice или CreateDevice , чтобы использовать каждый графический процессор без запуска упомянутых переключателей. даже нагрузка на IGPU слишком высока для обработки
Что может помочь вам решить эту проблему: Я обнаружил, что switch работает в Mac OS так же: https://github.com/0xbb/gpu-switch
Как проверить, работает ли переключатель: , поскольку у ноутбуков есть один экран с использованием функции DirectX EnumerateAdapters (); и GetAdapterIdentifier показывает один графический процессор, то есть по умолчанию он должен показывать IGPU и, используя мой упомянутый код, переключаться на выделенный графический процессор, но при восстановлении значений до 0 он не переключается обратно на IGPU.