Войти
ПрограммированиеФорумГрафика

Использование дискретной видеокарты на ноутбуке с NVidia Optimus

#0
15:01, 25 сен 2013

Здравствуйте. Сначала опишу как обстоят дела. Код из OgreD3D11RenderSystem:

BOOL D3D11VideoModeList::enumerate()
  {
    UINT adapter = mpDriver->getAdapterNumber();
    HRESULT hr;
    IDXGIOutput *pOutput;
    for( int iOutput = 0; ; ++iOutput )
    {
    //  AIZTODO: one output for a single monitor ,to be handled for mulimon
      if (adapter == 1)
      {
        IDXGIAdapter1 *ptAdapter = mpDriver->getDeviceAdapter();
        hr = ptAdapter->EnumOutputs( iOutput, &pOutput );
      }
      else
      {
        hr = mpDriver->getDeviceAdapter()->EnumOutputs( iOutput, &pOutput );
      }
      if( DXGI_ERROR_NOT_FOUND == hr )
      {
        return false;
      }

У меня Acer Aspire V3. На нем стоит встроенная видеокарта Intel HD Graphics 4000 и выделенная NVidia 650m. Обе поддерживают DirectX 11, причем как я понял, первая на начальном уровне. Мне нужно задействовать выделенную, а не выходит. Или проблема в самом Ogre(приведенный код), или в моей системе(Windows 8). Удается запустить DirectX 9 на встроенном адаптере, поскольку он выбирается по умолчанию. В первый раз output находится нормально. Когда дело доходит до адаптера с номером 1, DXGI_NOT_FOUND. Функция тут же завершается. Output - это выход видеокарты на монитор? Мне советовали подключить второй монитор к другому физическому порту, но второго монитора у меня нет. В настройках NVidia Control Panel в качестве предпочтительного адаптера стоит выделенный. Информация с MSDN: причина ошибки - выход индекса output за пределы диапазона. Что это значит? Еще было подозрение, что нужно делать pOutput->release(ага, тоже с MSDN инфа), но это не помогло. Посоветуйте что-нибудь.

#1
15:17, 25 сен 2013

В Win8 не знаю, но в Win7 есть клик правой кнопкой\запустить с графическим процессором\высокопроизводительный процессор NVIDIA. Вдруг установка по умолчанию почему-то не срабатывает.
А из программы и должен быть только один адаптер доступен, второй не удастся выбрать.

#2
15:59, 25 сен 2013

Что-то начинает проясняться. Вероятно, я ошибся и проблемы не было. Как бы мне узнать, на какой видеокарте оно по умолчанию запускается. Всем спасибо, помощи больше не нужно.

#3
16:10, 25 сен 2013

TheOrca
> Как бы мне узнать, на какой видеокарте оно по умолчанию запускается.

А никак, зависит от настроек драйвера

#4
22:58, 25 сен 2013

В Огре такой порядок работы:
- Создаются подсистемы рендера(как плагины), при этом создается устройство по умолчанию.
- Читается файл настроек, выводится диалог, где можно выбрать подсистему рендера и адаптер, настройки пишутся в файл
- Устройство удаляется нафиг и создается заново на нужном адаптере. Есть функция EnumAdapters, принадлежащая фабрике DXGI, которая их перечисляет.
Поясните вами написанное. Зачем городить этот огород, если доступен один адаптер?

#5
0:00, 26 сен 2013

ну кстати можно заставить, чтобы драйвер автоматически перенаправлял приложение на NVIDIA видеокарту (ссылка: http://developer.download.nvidia.com/devzone/devcenter/gamegraphi… gPolicies.pdf )
вкратце: заэкспортить из бинарника переменную unsigned int NvOptimusEnablement = 1

#6
0:49, 26 сен 2013

TheOrca
> Зачем городить этот огород, если доступен один адаптер?
Ну так он же не для Optimus сделан, а просто для случая когда у нас несколько видеокарт в системе.

ПрограммированиеФорумГрафика

Тема в архиве.

Тема закрыта.