转载请注明出处为KlayGE游戏引擎,本文的永久链接为http://www.klayge.org/?p=2662

去年我写过两篇博文《在程序中掌控NVIDIA Optimus》和《在程序中掌控NVIDIA Optimus后续》,讲解了如何利用NV提供的导出NvOptimusEnablement的方法,在程序里切换到独立显卡。然后,当我升级到Win 8.1后,发现Optimus有了一些变化。

  1. 右键菜单中没有了选择用哪个显卡启动的选项。
  2. 不管NvOptimusEnablement设置成什么值,只要导出了NvOptimusEnablement,D3D程序都会用独立显卡来执行。
  3. 程序中获取显卡名字的话,能正确地返回NV独立显卡的名字,而不是一味返回Intel集成显卡的名字。

原先我以为是显卡驱动没装好,装了最新的Intel驱动和NV驱动之后,情况照旧。会不会是Win8.1的新功能?查了WDDM 1.3的新特性后,发现还确实是这样的。WDDM 1.3是Win8.1里的显卡驱动模型,它有个新特性叫做“在混合系统中使用跨显卡资源”,其中对混合系统的定义就是,包含一个集成显卡和一个独立显卡的系统。在这样的混合系统上,Win 8.1负责检测和管理独立显卡和集成显卡。GDI的部分在集成显卡执行,DX的部分在独立显卡执行,结果通过驱动提供的跨显卡资源bitblt或flip交给集成显卡,并传到显示器。也就是说,WDDM 1.3实现了一个和Optimus等价的跨硬件混合渲染机制,并且使得不同的混合系统的细节都被隐藏起来,程序不用再考虑是个Intel+NV的系统,还是Intel+AMD的系统。

所以,在Win8.1上,Optimus的规则已经改变,只要导出NvOptimusEnablement,就会顺利地切换到独立显卡。