2013-05-03 122 views
4

我希望我在這個論壇發帖!Directx11 SDK June 2010(2010)VC++ 2010初始化

最近,我開始使用VC++ 2010上的Directx 11(2010)SDK進行編程,在戴爾LapTop上安裝NVidia GeForce GT 630M GPU和Intel HD 4000芯片。

你要做的一件事就是嘗試枚舉可用的適配器和輸出等等。這裏有一個例子:

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

當我運行這一點,說明結構包含的信息爲我的英特爾HD芯片,而不是信息爲我的GPU!

現在,當我打開我的NVidia控制面板並選擇GPU作爲首選處理器並重新運行示例時,我在desc中獲得了GPU的信息 - 這是正確的!而且,當我嘗試列舉這個適配器的輸出時,我發現至少有一個。

我的問題是:有沒有辦法以編程方式完成這一點,就像在DirectX 11 SDK中一樣,這樣我就不必在我的NVidia控制面板中設置設置了?

我經歷了SDK代碼(用於EmptyProject11),並以某種方式他們「搶」了GPU而不是Intel芯片。我將WinMain函數中的所有代碼都註釋掉了,並插入了上面的代碼,它仍然抓住了GPU!這與Project Setup,環境變量,命令行參數或....有關嗎?我的意思是他們如何做到這一點!?!?!?

我將不勝感激這件事。

感謝

+0

這裏有一個類似的問題,但我不確定它已解決http://stackoverflow.com/questions/10535950/forcing-nvidia-gpu-programmatically-in-optimus-laptops/10545107#10545107 – jcoder 2013-05-03 08:40:10

回答

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 */ 
} 

通常情況下,你將不得不自動選擇默認的或者枚舉所有這些,並在某種設置面板中讓用戶選擇。另一種方法是使用具有最多視頻內存的Adapter Description。這不是一種萬無一失的啓發式方法,但它是我用來爲系統獲得「最好」(使用寬鬆)視頻卡的方法。但是,通常情況下,默認值是默認值。

祝你好運!