使用DXGI,我可以获得所有图形卡的列表。
IDXGIFactory* factory;
vector<IDXGIAdapter*> all_adapters;
HRESULT result(S_FALSE);
result = CreateDXGIFactory(__uuidof(IDXGIFactory), (void**)&factory);
if (FAILED(result))
return false;
for (int i(0);; i++)
{
IDXGIAdapter* adpt(nullptr);
result = factory->EnumAdapters(i, &adpt);
if (FAILED(result))
break;
DXGI_ADAPTER_DESC adesc;
ZeroMemory(&adesc, sizeof(adesc));
adpt->GetDesc(&adesc);
if ((adesc.VendorId == 0x1414) && (adesc.DeviceId == 0x8c)) // no add WARP
{
adpt->Release();
continue;
}
all_adapters.push_back(adpt);
}
如何定义集成显卡?
我想确定一个独立的集成显卡。
除了供应商ID之外,没有一种简单的方法可以识别它们,即使那样,由于诸如NVidia Optimus或AMD PowerXpress之类的混合图形解决方案,您也无法确定这确实是您要使用的。
通常,您只使用默认设备,并可能在代码中添加以下内容以提示任何混合解决方案:
extern "C"
{
__declspec(dllexport) DWORD NvOptimusEnablement = 0x00000001;
__declspec(dllexport) int AmdPowerXpressRequestHighPerformance = 1;
}
已更新:在Windows 10 April 2018 Update中,现在有一个IDXGIFactory6
支持新EnumAdapterByGpuPreference
方法的新界面,该方法使您可以通过``最大性能''或``最小功率''枚举适配器
ComPtr<IDXGIAdapter1> adapter;
ComPtr<IDXGIFactory6> factory6;
HRESULT hr = m_dxgiFactory.As(&factory6);
if (SUCCEEDED(hr))
{
for (UINT adapterIndex = 0;
DXGI_ERROR_NOT_FOUND != factory6->EnumAdapterByGpuPreference(
adapterIndex,
DXGI_GPU_PREFERENCE_HIGH_PERFORMANCE,
IID_PPV_ARGS(adapter.ReleaseAndGetAddressOf()));
adapterIndex++)
{
DXGI_ADAPTER_DESC1 desc;
adapter->GetDesc1(&desc);
if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)
{
// Don't select the Basic Render Driver adapter.
continue;
}
break;
}
}
else
{
for (UINT adapterIndex = 0;
DXGI_ERROR_NOT_FOUND != m_dxgiFactory->EnumAdapters1(
adapterIndex,
adapter.ReleaseAndGetAddressOf());
adapterIndex++)
{
DXGI_ADAPTER_DESC1 desc;
adapter->GetDesc1(&desc);
if (desc.Flags & DXGI_ADAPTER_FLAG_SOFTWARE)
{
// Don't select the Basic Render Driver adapter.
continue;
}
break;
}
}
本文收集自互联网,转载请注明来源。
如有侵权,请联系 [email protected] 删除。
我来说两句