【问题标题】:is d3d 11 backwards compatible with d3d10 and d3d9?d3d 11 是否向后兼容 d3d10 和 d3d9?
【发布时间】:2012-04-18 06:15:09
【问题描述】:

我提交的问题实际上是一堆问题,因此我将按照要求将它们分成各自的单独问题。

只是一个关于 direct3D 的一般性问题,如果我要使用 hlsl 5.0 着色器完全在 d3d11 中编写应用程序,这些是否仍仅与支持 d3d10 或 d3d9 的系统兼容,只是图形上令人愉悦的效果和 d3d11 的效率较低?如果是这样,它的效率会降低多少?如果不是,我是否真的需要为完全相同的程序制作 2 或 3 个不同版本,但使用 d3d9、d3d10 和 d3d11 除外?

【问题讨论】:

    标签: c++ directx directx-11


    【解决方案1】:

    在一定程度上向后兼容。但是有几点需要记住:

    • DX11 只能安装在 Vista+ 上,这样就排除了那些出于宗教原因仍在使用 XP 的人(我个人认为这很愚蠢,但这只是你必须注意的事实)
    • DX11 的杀手级功能(硬件镶嵌)仅在兼容 DX11 的硬件上可用。相信我——你真的很难不使用它,因为它给了你很多可能性。这可以通过使用几何着色器得到一定程度的补偿,但是......请参阅下一点
    • 几何着色器仅在 DX10.0 级硬件(或更高版本)上可用。所以 DX9 级硬件不适合......再次......
    • 计算着色器在 DX10.0+ 级硬件上有些可用(尽管非常有限),但在早期硬件上完全不可用。

    总而言之,如果您的目标平台是 DX10.0+ 级硬件,则使用 DX11 有点意义(因为除了硬件细分之外,差异是可以容忍的和/或缺少功能的解决方法)。如果您想支持 DX9 HW,我建议您坚持使用 DX9 SDK,因为这将允许您在 XP 上运行您的应用程序。

    【讨论】:

    • 所以我得到的是,是的,d3d11 CODE 可以在 d3d9 和 10 系统上运行,但是缺少这么多功能,因此不值得使用它。真的,我希望我的目标市场是尽可能多的人,但是对于拥有更现代硬件的人来说,可以获得更多的视觉效果/性能。我只是不期待编写 3 个或更多不同的模块来处理 3 个或更多略有不同的 api,将缺少的功能保存在旧版本中。所以我可以或不能确定地编写一个适用于 d3d9 和 10 机器的 d3d11 应用程序?还是只写三个都值得?
    • DX11 是 DX10 的改进版,所以 DX10 级硬件没有必要使用 DX10。您可以使用 DX11 处理 DX10 级硬件 - 只是不要使用 DX11 特定的功能(硬件镶嵌、着色器模型 5、几何着色器的多流输出等)。您可以将 DX11 用于 DX9 级硬件,但它不适用于 Windows XP,而 DX9 SDK 可以。因此,如果您想涵盖 DX9 级硬件,我建议您坚持使用 DX9 SDK。或者最好的方法是简单地放弃该部分,因为使用 DX9 意味着使用 6 年以上的技术,所以没有高级效果......
    【解决方案2】:

    我不相信之前的评论是完全准确的。

    您可能需要在目标机器上安装 DX11 运行时,但您应该能够在任何兼容 DX9+ 硬件的卡上创建 D3D11Device。

    但这并不能真正让您获得太多,因为您需要传入您支持的功能级别列表(或 NULL 表示列表),并且该函数有一个输出参数告诉您您获得了什么功能级别。因此,只有 DX9 的卡会返回 D3D_FEATURE_LEVEL_9_1(或 9_2/9_3)。

    反过来,功能级别让您知道 d3d11 的哪些块可供您使用以及它的行为方式(http://msdn.microsoft.com/en-us/library/windows/desktop/ff476150(v=vs.85).aspxhttp://msdn.microsoft.com/en-us/library/windows/desktop/ff476876(v=vs.85).aspx

    从这些图表中快速得出的结论是,DX11 可能适用于涵盖 DX10 和 DX11 设备。 DX9 也可以/取决于/是否需要/需要这些功能。

    计算着色器主要在 DX10 硬件上工作 (http://msdn.microsoft.com/en-us/library/windows/desktop/ff476873(v=vs.85).aspx)

    【讨论】:

    • 现在这就是我正在寻找的答案。我在这里真正要问的是,如果我用 d3d11 编写所有代码并检查 d3d11 中的功能是否可用,并且在它们不可用时不实现它们,那么大多数相同的代码会在d3d9卡?是否与用 d3d9 编写的一样有效或几乎一样有效?
    【解决方案3】:

    不,它不向后兼容。如果你想在更多平台上运行,支持directX11的显卡肯定会支持directx9。所以要么在 DX9 中开发一次,要么在 DX11 和 DX9 中同时开发。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-08-27
      • 2019-11-14
      • 2021-07-22
      • 2020-01-16
      • 2020-11-15
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多