admin 管理员组

文章数量: 1184232

问题背景:

预计 Windows 10 将于 7 月 19 日发布,DirectX 12 也将随之而来。从目前网上测试看,DirectX 12 是得新老显卡的表现有了质的提高,那么问题来了, 1)DirectX 12 的可以支持它之前的显卡是如何做到的?不应该是先给指令集显卡厂商适配么?比如 AMD 的mantle 支持 GCN 构架的 AMD 显卡 2)为何即使是《英雄联盟》这样肯定不是针对 DirectX 12接口的游戏,同样的显卡表现也有非常大提高呢? Windows 10 来了,作为一个 Windows 7 已经使用了 5年多老用户,我表示要升级。

DirectX 12 的设计理念与实现方式使其能够支持较老的显卡,并显著提升性能。以下从技术角度来回答你的问题,并解释为什么即使是较老的显卡和未针对 DirectX 12 优化的程序,也能在 DirectX 12 上表现更好。


1. 为什么 DirectX 12 可以支持老显卡?

DirectX 12 的兼容性设计使其可以支持多代显卡,包括较老的硬件。这主要是通过以下方式实现的:

(1)硬件抽象层兼容

DirectX 12 的 API 仍然依赖于显卡支持的硬件特性,而这些特性大多是 DirectX 11 时代甚至更早就存在的。换句话说,DirectX 12 是在现有硬件的功能基础上,进一步优化了访问方式,而不是强制要求显卡支持全新的指令集。

  • 老显卡的兼容性 :DirectX 12 提供了向下兼容机制,对于不支持最新特性的显卡,它会自动降级到更老的特性集(Feature Level)。例如,Nvidia 的 GTX 770 支持 DirectX 11 特性集,但它仍然能够运行 DirectX 12 的基础功能。
  • 驱动程序更新 :显卡厂商(如 Nvidia 和 AMD)通过更新驱动程序,使旧显卡可以利用 DirectX 12 的优化路径。这不需要硬件更改,而是对现有硬件的支持逻辑进行调整。

(2)特性集(Feature Level)机制

DirectX 12 的特性集机制允许显卡根据其支持的硬件功能,运行不同级别的特性:

  • DirectX 12 Ultimate 特性(如光线追踪、VRS 等)需要更现代的硬件支持。
  • 老显卡可以运行 DirectX 12 的基础功能,但不会启用高级特性。
    这意味着,即使是较老的显卡,也可以通过 DirectX 12 的优化模型获得性能提升。

2. 为什么《英雄联盟》等未针对 DirectX 12 优化的游戏也能获得性能提升?

即使游戏未直接使用 DirectX 12 的 API,玩家在启用 DirectX 12 后仍可能体验到性能的提升。这背后的原因与 DirectX 12 的核心优化机制有关:

(1)减少 CPU 开销

DirectX 12 针对 DirectX 11 的一个重要改进,是显著减少了 CPU 的图形指令管理开销。这对 CPU 性能较弱(例如 Intel i3 或 AMD A8)和存在瓶颈的系统尤其明显。

  • 多线程指令处理 :DirectX 12 支持多线程指令执行。相比 DirectX 11 的单线程渲染,DirectX 12 能让 CPU 核心并行处理更多的任务,从而提高 CPU 的利用率。
  • 降低驱动层开销 :DirectX 12 的底层设计减少了驱动程序在 CPU 上的中间层处理负担,这对于老显卡和未优化的游戏也很有帮助。

从测试图表中可以看到,使用 DirectX 12 时,即便是较弱的 CPU(如 AMD A8),帧率也有显著提升。这是因为 DirectX 12 在 CPU 和 GPU 之间的指令交互更加高效。


(2)更高效的资源管理

DirectX 12 允许开发者直接管理显卡资源(如显存分配、缓冲区管理等),避免了 DirectX 11 中由驱动程序自动管理可能带来的低效问题。

  • 即使是未针对 DirectX 12 优化的游戏,它们的资源管理仍然可以受益于驱动程序对 DirectX 12 的优化。

(3)显卡性能的更充分利用

DirectX 12 通过更底层的硬件控制,使显卡的计算单元和资源利用率更高:

  • 在 DirectX 11 中,驱动程序可能因为不充分的优化而浪费显卡资源。
  • DirectX 12 则通过更高效的任务分配机制,确保显卡的每一部分都能得到更充分的利用。

这对于较老的显卡尤其重要,因为它们的性能本来就有限,但通过 DirectX 12 的优化,可以将这些性能潜力最大化。


(4)驱动程序的间接优化

显卡厂商通常会在发布新的驱动时,在 DirectX 12 的基础上为老显卡进行性能优化。这意味着,即使游戏未直接使用 DirectX 12,也可能因为驱动的改进而获得性能提升。


3. DirectX 12 的性能提升是否需要程序匹配?

DirectX 12 确实需要程序匹配才能最大化利用其特性(如多线程渲染、资源管理优化等)。但即便是未针对 DirectX 12 优化的游戏,也可能间接受益于以下几个方面:

(1)驱动的优化

显卡厂商通常会通过驱动程序,将未匹配 DirectX 12 的游戏适配到更高效的路径。例如,Nvidia 和 AMD 的驱动会在后台自动优化资源分配和指令调度。

(2)系统图形堆栈的改进

Windows 10 中的图形堆栈针对 DirectX 12 进行了底层的优化,这些优化会影响所有游戏的表现,包括未针对 DirectX 12 优化的游戏。

(3)硬件和 API 的协同效应

DirectX 12 的底层改进(如减少 CPU 开销、提高显卡利用率等)是硬件和 API 协同作用的结果,程序本身不需要直接匹配,也能间接受益。


总结:为什么 DirectX 12 能支持老显卡并提升性能?

  1. 兼容性设计 :DirectX 12 的特性集机制和驱动程序更新,使其能够支持较老的显卡,并在现有硬件功能的基础上优化性能。
  2. 减少 CPU 开销 :DirectX 12 的多线程能力和高效资源管理,显著提升了系统性能,尤其是 CPU 瓶颈较严重的场景。
  3. 硬件利用率提升 :DirectX 12 能更充分地发挥显卡的潜力,即使是较老的硬件也能得到优化。
  4. 间接优化 :通过驱动程序和系统堆栈的改进,即便是未针对 DirectX 12 优化的游戏,也能受益于底层性能提升。

因此,无论是老显卡还是现代显卡,都能通过 DirectX 12 获得一定的性能提升,而针对 DirectX 12 优化的游戏则能进一步最大化性能潜力。对于你这样的 Windows 7 用户,升级到 Windows 10 后,体验 DirectX 12 确实是一次值得期待的变化!

本文标签: 优化的游 编程 针对