Программно установить производительность графики для приложения

В панели управления Windows есть опция, которая позволяет установить приложение на «высокую производительность». Панель управления -> Система -> Дисплей -> Настройки графики.

Добавив туда свое приложение, я заметил, что при кодировании с помощью Media Foundation и H.265 для кодирования используется адаптер NVIDIA gfx. До этого он использовал встроенную графику Intel, которая выполняла только кодирование H.264, поэтому кодирование H.265 медленно выполнялось в ЦП.

Как я могу добавить туда свое приложение программно? Это имеет решающее значение для производительности моего секвенсора.

Большое спасибо.

Настройки графики


person Michael Chourdakis    schedule 14.01.2020    source источник
comment
Я не могу подтвердить прямо сейчас, но я думаю, что Windows также соблюдает эти трюки NVIDIA и AMD: gist.github. com/statico/6809850727c708f08458, поскольку dxgi.dll, d3d9.dll и opengl32.dll содержат эти волшебные строки.   -  person Simon Mourier    schedule 14.01.2020
comment
@SimonMourier: к сожалению, эти уловки только в одну сторону, они могут только обеспечить предпочтение дискретного графического процессора.   -  person Roman R.    schedule 14.01.2020


Ответы (1)


Насколько мне известно, для этого нет API или документации. Однако предпочтение хранится в реестре под

HKEY_CURRENT_USER\Software\Microsoft\DirectX\UserGpuPreferences

Строковое значение с частью GpuPreference и целочисленным значением, соответствующим DXGI_GPU_PREFERENCE перечисление.

Если вы устанавливаете значение там программно, оно подхватывается при следующем перезапуске приложения. Родительские ключи UserGpuPreferences и DirectX могут не существовать, поэтому вам нужно убедиться, что они тоже присутствуют.

Кроме того, насколько мне известно, этот параметр имеет приоритет над, возможно, существующим аналогичным параметром предпочтения в настройках конкретного поставщика (AMD, NVIDIA).

Смотрите также:

Пример

Если ваше приложение C:\testapp.exe, вы хотите создать следующую запись реестра:

[HKEY_CURRENT_USER\SOFTWARE\Microsoft\DirectX\UserGpuPreferences]
"C:\\testapp.exe"="GpuPreference=1;"

Или другой способ — добавить переопределение в интерактивном режиме с помощью настроек, а затем просмотреть созданное значение реестра.

person Roman R.    schedule 14.01.2020
comment
ПРИМЕЧАНИЕ. Похоже, что этот ключ может быть, а может и не быть на любом данном компьютере. Сначала меня это сбило с толку, но обычный материал Direct3D находится под HKLM (не HKCU). Таким образом, вам может потребоваться создать ключ в HKCU в дополнение к добавлению значения под ним. - person Scott Smith; 16.09.2020