以编程方式确定我是否需要使用硬件光栅器



我有一个DX11应用程序,我想在其中添加对软件渲染的支持。这是因为在某些情况下,它将在没有 GPU 的机器上运行。从我所做的研究来看,我最好的选择似乎是WARP的。

将应用程序更改为使用 WARP 非常简单:

hr = D3D11CreateDevice(
    NULL, 
    D3D_DRIVER_TYPE_WARP, // was D3D_DRIVER_TYPE_HARDWARE
    NULL,
    creationFlag,
    featureLevels,
    ARRAYSIZE(featureLevels),
    D3D11_SDK_VERSION,
    &mDevice,
    &mFeatureLevel,
    &mDeviceContext
    );

它运行良好。我正在努力确定何时将驱动程序类型设置为WARP而不是硬件。是否有我可以调用的函数来告诉我系统上是否提供硬件支持?

我使用的是 DX 11 功能级别 9_1。

通常是这样做的:只需尝试使用您期望的所有参数进行D3D11CreateDevice(),包括D3D_DRIVER_TYPE_HARDWARE(尝试循环中的不同功能级别,以找出最佳)。如果此操作失败,请回滚到 WARP。如果 WARP 失败,请回滚到软件、D3D9、GL 等。如果所有可能的变体都将失败,请通知用户他需要升级他的机器和/或操作系统 =)

每次尝试检查返回代码以及设备和上下文指针。当你找到(HRESULT == S_OK) && (device != 0) && (context != 0) - 宾果游戏!

希望对您有所帮助。

我认为如果硬件不可用,硬件将下降到软件:

http://msdn.microsoft.com/en-us/library/windows/desktop/ff476328(v=vs.85).aspx

具体说来:

http://msdn.microsoft.com/en-us/library/windows/desktop/ff476082(v=vs.85).aspx

哪里说:

如果驱动程序类型 == D3D_DRIVER_TYPE_HARDWARE,则使用的适配器将是 默认适配器,这是枚举的第一个适配器 IDXGIFactory1::EnumAdapters.

或者,如果要在 WARP 或硬件之间进行控制,而不是其他任何内容,请使用枚举适配器获取可用的适配器:

http://msdn.microsoft.com/en-us/library/windows/desktop/bb174538(v=vs.85).aspx

这为您提供了更多的控制,以防安装了某些第三方软件适配器。

相关内容

  • 没有找到相关文章

最新更新