DirectX 9 не обнаруживает ноутбук, который находится в спящем режиме - PullRequest
0 голосов
/ 03 июля 2019

Текущая ситуация: Я включил Intel HD GPU от Bios (потому что после установки выделенной карты bios отключите встроенный графический процессор).Таким образом, у меня может быть два Gpus одновременно, я попытался запустить пример кода DirectX (код ниже), чтобы получить список адаптеров, который показывает, что все мои графические процессоры (Amd и Intel) с настольным ПК закрыты.Но тот же код (код ниже) на ноутбуке не работает и показывает только Intel HD, я подозреваю, что графический процессор находится в спящем режиме, и DirectX не может извлечь данные из него.

Что уже было опробовано: После некоторого бесконечного использования Google я обнаружил, что Несколько видеокарт C ++ Directx 11 другого пользователя с той же проблемой, решение было опубликовано с использованием версии DirectX 11.Мне нужно решение в DirectX 9 (если возможно), так как мое оборудование, которое я собираюсь использовать, - AMD Radeon HD3970 X2 и старше, то есть для такой карты DirectX 11 не будет работать.И я не использую какие-либо эффекты DirectX или рендеринг, мне нужен метод DirectX для CreateDevice, чтобы назначить обработку графическому процессору.

Мой код:

LPDIRECT3D9 d3d;    // the pointer to our Direct3D interface
d3d = Direct3DCreate9(D3D_SDK_VERSION);


LPDIRECT3DDEVICE9 d3ddev;    // the pointer to the device class
HWND hWnd = GetForegroundWindow();
HRESULT result;
D3DADAPTER_IDENTIFIER9 adapter;
for (int i = d3d->GetAdapterCount(); i--;)
{
    std::cout << d3d->GetAdapterIdentifier(0, NULL, &adapter) << std::endl;
    std::cout << adapter.DeviceName << std::endl;
    std::cout << adapter.Driver << std::endl;
    std::cout << adapter.Description << std::endl;
    std::cout << adapter.DeviceId << std::endl;
    std::cout << adapter.SubSysId << std::endl;

    result = d3d->CreateDevice(i,D3DDEVTYPE_HAL,hWnd,D3DCREATE_SOFTWARE_VERTEXPROCESSING,&d3dpp,&d3ddev);
    if (result == S_OK)
    {
        std::cout << "OK" << std::endl;
    }
    else {
        std::cout << result << std::endl;
    }
    d3d->Release();
}

Как я могу решить эту проблему?Спасибо.

Обновление: при попытке запустить бесконечный цикл с использованием cuda, нагрузка на nvidia gpu создается ~ 20% использования, но DirectX 9 все еще обнаруживает только Intel Gpu, означает ли это, что DirectX обнаруживает только gpus, подключенные к мониторуЧто я могу сделать в такой ситуации?

...