Windows中Graphics API的发展

来源:互联网 发布:php sleep 停止执行 编辑:程序博客网 时间:2024/05/21 15:43

内容是本人翻译自Microsoft DirectX SDK Documentation的【Graphics APIs in Windows】


背景

在早期,图形设备接口(GDI)已经成为Windows API主要的编程图形。这个API根据Windows用户界面的经验,被设计来处理大量的2D输出设备。当时,DirectDrawDirect3D是可替代的API支持全屏游戏和3D渲染的现有的硬件扩展。GDI被设计得很复杂。有效的混合的Direct3D元素和传统GDI的元素被这样的设计限制了。Windows XPWDM版本,称为XPDM,反映了GDIDirect3D的并行性(见图1)。

Windows中Graphics <wbr>API的发展

Windows中Graphics <wbr>API的发展

多年来,硬件都以这个功能位主要目标,3D显卡的威力已经迅速增大。一个新的驱动程序模型,Windows Vista显示驱动模型(WDDM)把GPUDirect3D带到最前沿,创造出全新的体验——3D桌面,将GDI二维世界和现代可编程GPU的力量无缝融合起来。在WDDM下,Video硬件是完全Direct3D驱动,所有其他的图形界面,通过新的Direct3D中心驱动模型,可以与Video硬件进行交互(见图2)。

Windows中Graphics <wbr>API的发展


DirectX 9

DirectX 9版首次发布在Windows 2002上,随后在20032004里更新。这个API包含了一个DirectX技术十年发展计划,在DirectX引入的了更强大的着色器编程模型,和对数以千计航运标题出色的支持。Direct3D 9Windows Vista主要的图形界面。使用API理想是能写出需要广泛利用现有硬件和发布位Windows版本的3D游戏和应用程序。新的驱动程序模型的细节隐藏在Direct3D 9接口中,但在幕后操作系统可以充分发挥GPU威力,提供真正的多任务,更有效的资源管理和性能。


为确保与旧版本的Windows兼容,旧驱动模型的一些内容会被新的Windows Vista显示驱动模型仿真。例如,当一个全屏应用程序失去焦点,它必须丢失它在内存中所有的VRAM和重新加载它创建非托管资源,哪怕新的驱动程序模型直接管理资源而不需要从设备上下文。甚至整个管理概念与默认的资源类型都是依照旧驱动模型来设计。另一个例子是期望失败时分配在VRAM总量过剩的非托管资源(默认池),即使新的驱动程序模型可以提供几乎无限的虚拟内存。所以,Direct3D应用程序在Windows Vista运行仍然会收到这些错误状态。因此,他们在使基本的Direct3D 9接口,充分利用新的驱动程序模型的一些特征的能力还是有限的。


新系统将包括航运与Windows Vista WDDM显卡,和一些流行的显卡的新驱动程序包括在一个系统中,Windows Vista也继续支持旧的XPDM驱动程序版本升级和企业的能力。在使用旧的驱动程序模型系统中,Direct3D 9及以上的接口会被使用,还有图形系统的操作与Windows XP非常类似(图1)。WDDM要求应用使用Direct3D 9exDirect3D 10或以上的版本。



Direct3D 9Ex

Direct3D 9ex接口提供了对标准的Direct3D 9 API的轻微扩展,就是把虚拟资源的分配透明化,新lost device semantics,和其他一些可在Windows Vista上运行的新功能。通过这个扩展对象,Direct3D 9 API使用新的semantics,因此应用程序需要使用不同的逻辑的(和不同的代码路径)管理,创建资源,和处理错误。这个API只能在Windows Vista中并且拥有WDDM设备下才能运行。因为Direct3D 9ex相对于Direct3D 9,使用了一个单独的API和驱动代码路径,支持这个API需要额外的测试用例应用程序。


创建新的Direct3D 9ex API主要原因是允许完全访问WDDM的新能力同时兼容存在的Direct3D程序。新的3D桌面和Windows Vista应用程序使可以用这个版本的Direct3D 9,同时他们在老的XPDM驱动运行依然能正常运行。由于缺乏对WDDM的支持,Direct3D API 9ex永远不会出现在旧版本的Windows,所以标准的Direct3D 9接口覆盖的系统更广泛。为了下一代高性能应用能够利用Video硬件,全新的Direct3D 10版本提供了许多新的功能,这是Direct3D 9Ex所不具有的。因此,游戏和其他应用程序推荐使用Direct3D 910



Direct3D 10

充分认识到新的Windows Vista的驱动程序模型和下一代硬件的潜力,一个全新版本的Direct3D API诞生了。因为WDDM限制在现有的图形系统性能,Direct3D 10进一步去除现有Direct3D API中的设计瓶颈,极大地简化了编程的GPU


新的API完全消除了几乎所有固定化的功能,取而代之的是可编程的结构和被大大简化的内部实现。在以前版本的Direct3D数百capability bits已被完全消除,取而代之的是一个明确的,包容的功能集,只有几个可选的场景资源格式的特定用法。CPU密集型资源的创建和验证有了新的API语义。这允许更可预测的性能,大大降低了每次渲染的开销。资源可以重新配置成多种形式去满足在不同阶段的使用效率,和特征集对格式的使用情况有更少的限制。也有一些新的块压缩的normal-map格式。


在新的API中,着色器常数和设备状态是显式的资源,允许更高效的Cache和简化驱动验证。可编程着色器模型已统一在顶点和像素着色器之间,使得计算模型和操作集更具表现力。同时,一个新的几何着色器被添加到顶点着色器后。在顶点和管道几何着色器阶段,GPU工作的结果可以作为视频RAM重用,允许的多做极为复杂的编程可能,使得GPUCPU良好合作。


所有这些改进使下一代图形技术和应用能去把工作分摊给GPU。它将允许更复杂且基于GPU的角色蒙皮技术,加速变形技术,体积阴影生成和挤压,粒子物理的系统是完全基于GPU的,更复杂的材料组合成高效的大批量程序绘制,程序的详细说明,实时光线跟踪的位移映射,单通道立体图生成,和许多技术,可以为应用程序腾出更多的CPU资源。


要提供这种级别的Direct3D 10的功能,旧硬件不能作为一个新接口的实现。显卡要是能够支持全部新特点,就不是Direct3D 10可用显卡。因此,Direct3D 9可以驱动许多directx7时代的硬件驱动,使用不再支持的capability bits和固定编程用法,Direct3D 10只适用于新一代的显卡。要使一个应用程序支持旧的Video硬件,它必须支持Direct3D 9接口。Direct3D的未来版本将建立在版本10,扩展到新的API的版本的同时,保证一个严格的Direct3D 10功能的超集。



Direct3D 10.1

Windows Vista Service Pack 1延伸的Direct3D 10 APIDirect3D 10.1,增加了可选的接口和着色模型,以支持新的支持Direct3D 10.1显卡硬件。所有的硬件能够支持Direct3D 10.1,更完全支持Direct3D 10的所有功能,以及游戏开发者可以利用Direct3D 10.1可用的额外功能。



Direct3D 11

Windows 7支持新修订的,建立在Direct3D 10.1 API设计的Direct3DDirect3D 11。该API的新功能包含了多线程渲染和资源的创建,计算着色,支持10level9特征级别和WARP10渲染器软件,而且,新的Direct3D 11级硬件功能,如TessellationDomain ShaderBC6hBC7纹理压缩格式,着Shader Modle5.0,和Dynamic Shader Linkage。新的API可以使用现有的Direct3D 1010.1级的显卡,一些通过10level9特征能达到一定限度功能支持的Direct3D 9卡,以及新一代的Direct3D 11类显卡。


此外,Direct3D 11 APIWindows 7包括DXGI 1.1Direct2DDirectWrite,并支持WDDM 1.1驱动程序。

0 0
原创粉丝点击