1. DirextX是一套图形编程的API,它内部实现基于的是WDDM (windows display driver model)。WDDM的主要功能包括:图形功能的核心实现,显存管理,GPU调度和各种3D功能。
2. WDDM1.0是Vista引入的。从它开始,才支持显存虚拟化、GPU调度这些对物理内存和CPU老早就有的机制。
3. 显卡的驱动包括用户态(*.sys)和内核态(*.dll)。
4. Windbg对于内核态debug非常好用;用户态下,也值得一试(张银奎的demo)。用Windbg调试挖地雷,在例子中:挖地雷用的是Dx9的API,pc上装的Dx11,然后显卡支持Dx10。Remote Debugging是必须的,因为调试内核态是不能pause当前pc的OS的。
5. Dx11引入了很多新的有价值的特性:严格的Dx10超集;Shader Model 5.0;Tessellation;Direct Compute。
6. 从Dx10开始,要求显卡硬件厂商必须全部实现了一个Ms规定的Feature list才能标称支持一个版本的Dx。Dx10之前,显卡声称支持某个DxXX,其实只是支持了一部分feature,这就对Dev编程造成了很多问题。ID3d11Device::GetFeatureLevel来检查硬件级别。
7. Dx11的兼容模式:让应用程序既可以在Dx10/11硬件上运行,也可以在Dx9硬件上运行。我们的代码,在于Dx运行时接口的部分,编写两套代码:针对Dx9;针对Dx11。由于Dx11是Dx10的严格超集,所以,Dx10的硬件直接调用Dx11的那套代码是没有任何问题的。
8. Dx11的tessallation:
切分三角面片对于图形显示非常重要。对于游戏和三维图形软件来说,是实时render;对于电影来说,则是离线render。 离线render,可以按帧渲染,所以,可以无限切分三角面片来获得最佳显示效果。而实时render,则必须要平衡切分程度和render性能的问题。Tessellation的作用在于从GPU level对游戏或三维软件切分后的mesh数据进一步切分,从而获得更好的显示效果并平衡性能的损耗。