1. Gallium3D
Gallium3D是新出来的3D模型。网上评论比较多,这里就不废话了。
本文翻译自Keith Whitwell的演讲:
TG-Gallium Driver Stack(Softpipe, Cell and Beyond), keith@tungstengraphics.com。
2. 从DRI演进到Gallium3D DRI
在Gallium3D之前,Mesa为了实现硬件加速,其DRI体系结构如下:
图 Mesa DRI(非Gallium3D)
作者认为,这个模型有下面的缺点:
(1) Mesa和驱动之间的Leaky interface;
(2) 驱动体系庞大而且越来越复杂;
(3) API OS相关的东西也写在驱动里面了;
Mesa DRI的模型导致DRI 驱动层过于庞大。而DRI驱动通常是硬件相关的,这就导致为了适用新的设备,开发工作较大。
所以好事者觉得有必要在DRI驱动这一层,提炼一些硬件无关的东西出来。于是他们提出了一个初步的想法,就是将其划分为三层:
图 DRI 驱动分层(非Gallium3D)
这个模型的特点是:
(1) 将API,OS,HW分开;
(2) 创建了新的接口;
(3) 分割驱动;(和第一条差不多了)
现在将DRI驱动分层的想法付诸实施,就得到了下面的模型:
图 DRI 驱动分层(Gallium3D)
这个模型带来了下述特点:
●增加了State tracker, HW Driver, Winsys三个模块;
● TG-Gallium驱动栈
3. Gallium3D的特点和参考实现
驱动模型:
●由GL3(OpenGL 3.0?),NV_GPU4, i965等软硬件抽象出来的接口;
●常态状态对象;
●简单绘图接口;如DrawArrays, DrawElements;
●字节码形式的统一Shade语言;
● Render目标作为私有缓冲;
●可以将硬件驱动运行在新的接口,如GL3,GLES等;
●可以将硬件驱动运行在新的窗口系统;
硬件驱动:
●比DRI驱动简单很多;
●接口:
-Create/Bind/Delete状态对象;
-Draw,1-2个入口;
-缓冲管理;
-Flush
●每个Gallium驱动定义它自己的OS层(Winsys)接口;
●通过重新实现WInsys层可以Re-target驱动;如miniglx,EGL;
Mesa State Tracker
● 实现了当前的Mesa驱动模型;
● 使用了新的硬件驱动接口
● 硬件无关,可重用;
● 将GL状态转化为常类型对象;
● 处理了所有费解的GL概念:
-所有不同的GL绘制路径;
-像素路径操作,DrawPixels, Bitmap, CopyT exSubImage
-GL纹理语义;
-纹理环境,GL1.5 shader, GLSL
O/S Dependencies
● 每一个Gallium驱动会定义其OS层Winsys接口;
● 通过切换Winsys层可以retarget驱动;
Winsys Layer
● 实现了两个接口:
-DRI驱动接口:CreateDevice, CreateContext,SwapBuffers (**)
-硬件驱动的Winsys接口:缓冲管理,命令提交;
● 封装了下述内容:
-DRI lock和cliprects
-Swapbuffers, page flipping.
-通用的操作系统相关内容;
Mesa提供了Gallium3D驱动的软件参考实现Softpipe:
图 Gallium3D驱动的参考实现Softpipe
Mesa同时还提供了Gallium3D驱动的i915参考实现Softpipe:
图 Gallium3D驱动的参考实现i915