DirectX11 driver类型浅析
在DirectX 11中,创建设备时可以指定以下几种类型的driver。
D3D_DRIVER_TYPE_UNKNOWN = 0, D3D_DRIVER_TYPE_HARDWARE = ( D3D_DRIVER_TYPE_UNKNOWN + 1 ), D3D_DRIVER_TYPE_REFERENCE = ( D3D_DRIVER_TYPE_HARDWARE + 1 ), D3D_DRIVER_TYPE_NULL = ( D3D_DRIVER_TYPE_REFERENCE + 1 ), D3D_DRIVER_TYPE_SOFTWARE = ( D3D_DRIVER_TYPE_NULL + 1 ), D3D_DRIVER_TYPE_WARP = ( D3D_DRIVER_TYPE_SOFTWARE + 1 )
我们分别来解释一下每种driver的含义和用法。
D3D_DRIVER_TYPE_UNKNOWN
MSDN上只有一句话,The driver type is unknown, 至于用在何时,也不得而知。
D3D_DRIVER_TYPE_HARDWARE
这是硬件类型的driver,这种类型支持硬件加速。且以硬件实现大部分D3D功能,是所有driver类型中性能最好的。这是我们编写应用程序时应该使用的driver类型。该类型并不能保证支持所有的D3D特性,所以如果显卡不支持部分功能,就以软件实现代替。该driver类型通常是指HAL,Hardwar Abstraction Layer-硬件抽象层。
D3D_DRIVER_TYPE_REFERENCE
这种类型是用纯软件实现D3D的特性,与硬件驱动类型不同,该类型实现了所有的D3D特性,但是毕竟是软件实现,所以速度很慢,基本上不能用于应用程序中,所以这种类型的驱动基本用于测试D3D功能,比如你的显卡不支持某个D3D特性,你就可以使用Reference driver来测试该功能的行为是否正确,该类型还有一个用途就是Pre-release,比如,D3D的某个新特性还没有交付给显卡厂商进行生产,但是我们可以通过已有的显卡来测试这个特性,这是就要使用reference driver。该类型与后面的software driver类型的区别是,software driver可用用于最终发布的应用程序,且不需要DX SDK支持,只需要run time library即可。相同点是,两者都是软件实现。该类型需要DX SDK支持。
D3D_DRIVER_TYPE_NULL
该类型本质上是Reference driver,但是没有渲染功能,这个类型是为了调试非渲染类型的API而设置的,所以该类型不适合用于发布应用程序。需要DX SDK支持。
D3D_DRIVER_TYPE_SOFTWARE
该类型使用软件方式实现D3D特性,速度慢,在硬件加速不可用时,程序使用此方式进行渲染。
D3D_DRIVER_TYPE_WARP
WARP-Windows Advanced Rasterization Platfor,这是D3D 11新引入的一种驱动类型,属于高性能的software renderer。详情看这里。
References
==