OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
OpenGL在图形管道中调用了什么用户模式图形驱动程序(UMD)?
图形硬件供应商,需要为显示适配器编,编写用户模式显示驱动程序。用户模式显示驱动程序,是由Microsoft Direct3D运行时加载的动态链接库(DLL)。用户模式显示驱动程序,必须至少支持Direct3D版本9 DDI。
e.g. nvd3dum.dll is the UMD for DirectX11是运行Nvidia的DirectX11的UMD。着色器shader编译是从API调用的DirectX代码进行的,在它进入内核模式驱动程序之前。
UMD是否也将代码放在中间表示吗?(driver驱动是中间语言吗)?
从Windows95OSR2开始,OpenGL基本上一直在Windows上有某种用户模式组件。体系结构中客户机/服务器的分离,使得这一点非常容易做到。这意味着许多客户端API可以执行基本的命令队列、验证、资源创建等操作,而不必切换到内核模式。
例如,在OpenGL中,draw调用比Direct3D更容易。在WindowsVista(WDDM)中,情况发生了变化,WDDM为D3D(包括Vista上的D3D9)指定了一个用户模式驱动程序,该驱动程序的作用与OpenGL的客户端前端类似。
好处有两方面:
如果驱动程序在用户模式下执行某些操作时崩溃,问题通常不会传播到,导致问题的应用程序之外(而不是全面的内核死机)。
在不切换用户模式和内核模式的情况下,可以完成更多的实际工作,这意味着API本身在呈现时的瓶颈更少。
D3D10非常注重减少API的总体开销,而引入WDDM的用户模式驱动程序,实际上也有益于D3D9应用程序。WDDM对OpenGL体系结构,在Windows新版本中的运行方式,几乎没有什么改变,尽管它确实添加了一些新特性,使D3D/GL之间的互操作性更简单(例如,surface共享)。
着色器shader编译只是OpenGL ICD在Windows上用户模式下可以做的许多事情之一。
UMD只与Direct3D相关,OpenGL的用户模式组件称为ICD(可安装客户端驱动程序)。它负责处理整个OpenGL API,并将OpenGL API调用生成的命令,转换为显示驱动程序使用的特定于硬件的命令。DXGI实际上是在windows vista+上将D3D和GL结合在一起的粘合剂,可以将其视为D3D和OpenGL,在用户模式端处理命令之后所描述的公共语言。DXGI是WDDM的中间组件。