4

我希望我在正确的论坛上发帖!

最近,我开始在 VC++ 2010 上使用 Directx 11 June (2010) SDK 进行编程,在戴尔笔记本电脑上使用 NVidia GeForce GT 630M GPU 和英特尔 HD 4000 芯片。

您要做的一件事是尝试枚举可用的适配器和输出,等等。这是一个例子:

    IDXGIFactory1 *factory;
    CreateDXGIFactory1(__uuidof(IDXGIFactory1), (LPVOID *)&factory);
    IDXGIAdapter *adapter;
    factory->EnumAdapters(0, &adapter);
    DXGI_ADAPTER_DESC desc;
    adapter->GetDesc(&desc);

当我运行它时, desc 结构包含我的 Intel HD 芯片的信息,而不是我的 GPU 的信息!

现在,当我打开我的 NVidia 控制面板并选择 GPU 作为首选处理器并重新运行示例时,我会在 desc 中获得我的 GPU 的信息 - 这是正确的!而且,当我尝试枚举此适配器的输出时,我发现至少有一个。

我的问题是:有没有办法以编程方式完成此操作,例如在 DirectX 11 SDK 中,这样我就不必在我的 NVidia 控制面板中设置设置?

我浏览了 SDK 代码(针对 EmptyProject11),不知何故他们“抓住”了 GPU 而不是英特尔芯片。我把WinMain函数里的代码都注释掉了,把上面的代码插入进去,还是抢GPU!它与项目设置、环境变量、命令行参数或......有关吗?我的意思是他们是怎么做到的!?!?!?

我将不胜感激对此事的任何见解。

谢谢

4

1 回答 1

0

您可以通过使用您已经在使用的相同功能遍历所有可能的适配器来运行所有适配器呈现并获取有关它们的信息:

HRESULT r = S_OK;
unsigned int adapterindex = 0;
std::unique_ptr<IDXGIAdapter, ReleaseDirectX> dxgiadapter = null;
// Save the result of EnumAdapters to r, and then check if it's S_OK
while ( ( r = factory->EnumAdapters( adapterindex, &dxgiadapter ) ) == S_OK ) {
    ++adapterindex;
     /* Work with your adapter here, particularly DXGI_ADAPTER_DESC */
}

通常,您必须自动选择默认选项或枚举所有选项,然后在某种设置面板中让用户选择。另一种方法是使用具有最多视频内存的适配器描述。这不是一种万无一失的启发式方法,但它是我用来为系统获得“最佳”(自由使用)视频卡的方法。然而,通常情况下,默认值是默认值是有原因的。

祝你好运!

于 2013-05-03T08:43:35.890 回答