DXGI集成适配器

范围

使用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] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章