DXGI 1.5 DuplicateOutput1因DXGI_ERROR_UNSUPPORTED(0x887a0004)而失败

时间:2018-01-11 12:57:48

标签: dxgi

出于某种原因DuplicateOutput1失败,DuplicateOutput没有。

#include <D3D11.h>
#include <DXGI1_5.h>

int main() {
    ID3D11Device *device;
    D3D_FEATURE_LEVEL levels[] = { D3D_FEATURE_LEVEL_11_1 };
    D3D11CreateDevice(NULL, D3D_DRIVER_TYPE_HARDWARE, NULL, 0, levels, ARRAYSIZE(levels), D3D11_SDK_VERSION, &device, NULL, NULL);

    IDXGIDevice *dxDevice;
    device->QueryInterface<IDXGIDevice>(&dxDevice);

    IDXGIAdapter *adapter;
    dxDevice->GetAdapter(&adapter);

    IDXGIOutput *output;
    adapter->EnumOutputs(0, &output);

    IDXGIOutput5 *output5;
    output->QueryInterface<IDXGIOutput5>(&output5);

    IDXGIOutputDuplication *outputDuplication;
    auto hr1 = output5->DuplicateOutput(device, &outputDuplication);

这里是S_OK

    const DXGI_FORMAT formats[] = { DXGI_FORMAT_B8G8R8A8_UNORM };
    auto hr2 = output5->DuplicateOutput1(device, 0, ARRAYSIZE(formats), formats, &outputDuplication);
}

0x887a0004:此系统不支持指定的设备接口或功能级别。

2 个答案:

答案 0 :(得分:1)

我将在这里发布@weggo的答案,因为我几乎错过了它!

  

对于那些将来可能会偶然发现的人,请致电   SetProcessDpiAwarenessContext(DPI_AWARENESS_CONTEXT_PER_MONITOR_AWARE_V2)   允许DuplicateOutput1成功。我不知道为什么   不过,DuplicateOutput1会检查过程dpi版本。

我将添加,您必须在清单设置的解决方案属性中将DPI感知设置为False,以使SetProcessDpiAwarenessContext起作用:)

答案 1 :(得分:0)

如果您在同时具有集成图形芯片和独立GPU的系统上运行,则可能会发生这种情况。参见https://support.microsoft.com/en-us/kb/3019314

  

不幸的是,由于桌面复制API不支持针对Microsoft Hybrid系统上的离散GPU运行,因此会出现此问题。按照设计,在这种情况下,调用将失败,并显示错误代码DXGI_ERROR_UNSUPPORTED。

     

要变通解决此问题,请在集成GPU上而不是在Microsoft Hybrid系统上的离散GPU上运行应用程序。